Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Hlaseni vybranych vyskytu:
- a,
- Pozici, na ktere konci slovo, ktere je na te pozici nejdelsi, uz vlastne hleda Aho-Corasick, protoze ve zkratce na kazdem konecnem stavu budu
- mit ulozene slovo, a pripadne pointer na stav, ktery obsahuje slovo, ktere je suffixem naseho soucasneho stavu. Tedy muzu si stranou do fronty
- hazet vzdy pri nalezeni vzoru (koncovy stav ze ktereho nemuzeme dal => po vypisu bude muset byt pouzita zpetna hrana) pouze to slovo, ktere ma v sobe
- stav ulozeny, a muzeme ignorovat zkratkove hrany. Na konci sena akorat vyhazim prvky z fronty a vypisu je na vystup. Slozitost a spravnost je stejna jako
- Aho-Corasick, viz prednaska.
- b,
- Konecne pozice nam opet hlasi Aho-Corasick, ale tentokrat budeme muset vyuzivat zkratkovych hran. Chceme totiz to nejkratsi slovo,
- ktere tam konci, coz odpovida tomu, ze to je nejkratsi suffix koncoveho stavu, ktery je zaroven jehlou. Toho dosahneme tak, ze pri "vypisu"
- budeme do fronty vedle (viz priklad a,) hazet takovy stav, na ktery se dostaneme tim, ze z naseho stavu skaceme po zkratkovych hranach dokud
- jsou definovane. Stav na kterem skoncime dame do fronty na vypis. (Fronta je zbytecna pokud muzeme vypisovat v prubehu, ale pokud chceme vystup
- najednou vypsat na konci, tak to hodime do fronty a vypiseme nakonec spolecne, slozitost to nezhorsi). Slozitost porad stejna jako Aho-Corasick,
- protoze nedelam nic navic nez Aho-Corasick, spravnost protoze Aho-Corasick asi funguje a ja nedelam nic jineho.
- c,
- V tehle situaci nemuzu pouzit klasicky Aho-Corasick, protoze potrebuju porovnavat delky slov, ktere na urcite pozici zacinaji.
- Pouziju tedy trik, a "prevratim" cely algoritmus. Budu hledat obracenou jehlu (tedy misto "jehla" hledam "alhej") v obracenem sene. Ja chci hledat co nejdelsi
- prefix nasledujiciho (neprohledaneho) sena takovy, ze je zaroven jehlou. To ale presne odpovida tomu, ze si seno i jehlu obratim a budu hledat "odzadu".
- Tim se mi z prefixu stane suffix, a tedy muzu pouzit Aho-Corasick.
- d,
- Pouziju stejny trik jako v c, kde obratim jehlu i seno a hledam "odzadu" (vlastne odpredu v obracenem sene). Pouze tentokrat budu chodit po zkratkovych
- hranach, a az dojdu na stav kde je zkratkova hrana nedefinovana, vypisu out tohoto stavu. To je nejkratsi slovo ktere na danem miste zacina, protoze
- nejkratsi suffix obraceneho sena odpovida nejkratsimu prefixu neobraceneho sena.
- Priklad algoritmu:
- seno: "ejehlaned"
- jehly: "jehla", "jehlan", "lan"
- a,
- algoritmus chrousta seno dokud se nedostane na "ejehlan". Potom se podiva na aktualni stav a prislusne slovo vypise
- TODO: projedu jehla a jehlan => jak poznam ze jehla je na jinem miste a kdy se to ma vypsat?
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement