Kapitola 5. | |||||
Vyhľadávanie v reťazcoch | |||||
Ďalším typom vyhľadávacích úloh je vyhľadávanie zadaného vzoru v reťazci znakov. Aj vzor je vlastne reťazec, budeme ho však ďalej nazývať vzor a tak ho odlišovať od reťazca, v ktorom tento vzor vyhľadávame. Pri práci s veľkým množstvom textu potrebujeme niekedy nájsť nami zadané slovo. Algoritmus vyhľadávania musí prejsť celý text (reťazec) a porovnávať postupnosť znakov v texte s nami zadanou postupnosťou znakov (vzor). Zoznámime sa s tromi takýmito algoritmami.
| |||||
Výstupom týchto algoritmov je index prvého znaku v reťazci, od ktorého sa postupnosť znakov v reťazci zhoduje s postupnosťou znakov vo vzore. Dĺžku vzoru, teda počet znakov, ktoré vzor obsahuje budeme označovať m a počet znakov reťazca budeme ďalej v tejto kapitole označovať n. Počet prvkov abecedy, teda koľko rôznych znakov existuje v použitej abecede, budeme označovať písmenom c. Vzor a reťazec môžu pozostávať iba zo znakov, ktoré obsahuje abeceda.
| |||||
Teraz si uvedieme tri algoritmy, na ktorých si ukážeme aké techniky sa pri vyhľadávaní používajú. Viac vyhľadávacích algoritmov používaných pre reťazce môžeme nájsť v [7], [8], [12] a [13].
| |||||
Zoznam stránok venujúcich sa vyhľadávaniu vzoru v reťazci | |||||
| |||||
| |||||
| |||||
Porovnanie algoritmov pre vyhľadávanie vzoru v reťazci | |||||
Trieda použitá na analýzu a testovanie vybraných algoritmov | |||||
Trieda obsahuje najma premenné, do ktorých sa budú načítavať počty porovnaní. Samozrejme bude pre hodnotenie potrebné aj trvanie algoritmov pre rôzne dĺžky vzoru, reťazca a veľkosti použitej abecedy.
| |||||
//prehladavany retazec class CRetazec { //statisticke premenne na analyzu roznych druhov porovnani int p_a_porovnani_; int p_b_porovnani_; int p_c_porovnani_; int p_d_porovnani_; char* retazec_; //prehladavany retazec int velkost_; //dlzka retazca bez ukoncovacieho znaku public: . . . }; | |||||
|