węzeł := NEXT(węzeł, litera) if OUTPUT(węzeł) <> nil then wypisz pozycję i wypisz wszystkie wartości ze zbioru OUTPUT(węzeł) end end end

Determinizacja automatu Przy przetwarzaniu jednego znaku może być odwiedzone więcej niż jeden węzeł, tj. najpierw pewna liczba przejść przez krawędzie fail, a następnie przez jedną krawędź etykietowaną literą. Automat można jednak zdeterminizować, tj. zrezygnować z krawędzi fail i określić dla każdego węzła następnik, dzięki czemu dla jednej litery automat zmieni stan dokładnie raz. Wiąże się to jednak ze znacznym wzrostem wymagań pamięciowych.

Dla odróżnienia nowa funkcja przejść nazwana została DETNEXT.

procedure Aho-Corasick-determinizacja(trie) begin kolejka := pusta kolejka węzeł := korzeń drzewa trie

for litera in alfabet do węzeł := NEXT(korzeń, litera)

if węzeł <> korzeń then dodaj węzeł do kolejki end

DETNEXT(korzeń, litera) := węzeł end

while kolejka nie pusta do węzeł := weź z kolejki