Algoritmus Aho-Corasick: Porovnání verzí

Smazaný obsah Přidaný obsah
m Oprava překlepu.
m formulace
Řádek 1:
'''Algoritmus Aho-Corasick''' je [[vyhledávací algoritmus]] objevenývynalezený [[Alfred V. Aho|Alfredem Ahem]] a [[Margaret J. Corasick|Margaret J. Corasickovou]]. Je to druh slovníkového vyhledávacího algoritmu, který ve vstupním textu hledá prvky konečné množiny řetězců. Vyhledává všechny prvky množiny najednou, jeho [[asymptotická složitost]] je proto lineární k délce všech vyhledávaných prvků plus délce vstupního textu plus délce výstupu. Jelikož algoritmus najde všechny výskyty, celkový počet výskytů pro celou množinu může být až kvadratický (například v případě, kdy vyhledávané řetězce jsou <code>a, aa, aaa, aaaa</code> a vstupní text je <code>aaaa</code>).
 
Neformálně řečeno, algoritmus konstruuje [[trie|trii]] se zpětnými odkazy pro každý vrchol (například <code>abc</code>) na nejdelší existujícívlastní koncovku[[sufix]] (pokud existuje, tak <code>bc</code>, jinak pokud existuje <code>c</code>, jinak do kořene). Obsahuje také odkazy z každého vrcholu na prvek slovníku obsahující odpovídající nejdelší koncovkusufix. Tudíž, všechny výsledky mohou být vypsány sledovánímprocházením výsledného [[spojový seznam|spojového seznamu]]. Algoritmus pak pracuje tak, že postupně zpracovává vstupní řetězec a pohybuje se po nejdelší odpovídající cestě stromu. Pokud algoritmus načte znak, který neodpovídá žádné další možné cestě, přejde po zpětném odkazu na nejdelší odpovídající koncovkusufix a pokračuje tam (případně opět přejde zpět).
 
Pokud je množina vyhledávaných řetězců známa předem (např. databáze [[počítačový vir|počítačových virů]]), je možné zkontruovat [[automat]] předem a ten pak uložit.