Advertisement
Guest User

ads2u3unf2

a guest
Oct 17th, 2017
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.64 KB | None | 0 0
  1. Hlaseni vybranych vyskytu:
  2.  
  3. a,
  4. Pozici, na ktere konci slovo, ktere je na te pozici nejdelsi, uz vlastne hleda Aho-Corasick, protoze ve zkratce na kazdem konecnem stavu budu
  5. mit ulozene slovo, a pripadne pointer na stav, ktery obsahuje slovo, ktere je suffixem naseho soucasneho stavu. Tedy muzu si stranou do fronty
  6. 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
  7. 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
  8. Aho-Corasick, viz prednaska.
  9.  
  10. b,
  11. Konecne pozice nam opet hlasi Aho-Corasick, ale tentokrat budeme muset vyuzivat zkratkovych hran. Chceme totiz to nejkratsi slovo,
  12. ktere tam konci, coz odpovida tomu, ze to je nejkratsi suffix koncoveho stavu, ktery je zaroven jehlou. Toho dosahneme tak, ze pri "vypisu"
  13. budeme do fronty vedle (viz priklad a,) hazet takovy stav, na ktery se dostaneme tim, ze z naseho stavu skaceme po zkratkovych hranach dokud
  14. jsou definovane. Stav na kterem skoncime dame do fronty na vypis. (Fronta je zbytecna pokud muzeme vypisovat v prubehu, ale pokud chceme vystup
  15. najednou vypsat na konci, tak to hodime do fronty a vypiseme nakonec spolecne, slozitost to nezhorsi). Slozitost porad stejna jako Aho-Corasick,
  16. protoze nedelam nic navic nez Aho-Corasick, spravnost protoze Aho-Corasick asi funguje a ja nedelam nic jineho.
  17.  
  18. c,
  19. V tehle situaci nemuzu pouzit klasicky Aho-Corasick, protoze potrebuju porovnavat delky slov, ktere na urcite pozici zacinaji.
  20. Pouziju tedy trik, a "prevratim" cely algoritmus. Budu hledat obracenou jehlu (tedy misto "jehla" hledam "alhej") v obracenem sene. Ja chci hledat co nejdelsi
  21. prefix nasledujiciho (neprohledaneho) sena takovy, ze je zaroven jehlou. To ale presne odpovida tomu, ze si seno i jehlu obratim a budu hledat "odzadu".
  22. Tim se mi z prefixu stane suffix, a tedy muzu pouzit Aho-Corasick.
  23.  
  24. d,
  25. 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
  26. 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
  27. nejkratsi suffix obraceneho sena odpovida nejkratsimu prefixu neobraceneho sena.
  28.  
  29. Priklad algoritmu:
  30.  
  31. seno: "ejehlaned"
  32. jehly: "jehla", "jehlan", "lan"
  33.  
  34. a,
  35. algoritmus chrousta seno dokud se nedostane na "ejehlan". Potom se podiva na aktualni stav a prislusne slovo vypise
  36.  
  37. 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