Niepokoi mnie kwestia asymptotycznego czasu działania algorytmu Ukkonena , być może najpopularniejszego algorytmu do konstruowania drzewek sufiksów w czasie liniowym (?).
Oto cytat z książki „Algorytmy na strunach, drzewach i sekwencjach” Dana Gusfielda (sekcja 6.5.1):
„... wszystkie algorytmy Aho-Corasick, Weiner, Ukkonen i McCreight wymagają albo przestrzeni , albo ograniczenie czasowe O (m) należy zastąpić minimum O (m \ log m ) i O (m \ log | \ Sigma |) ".O ( m ) O ( m log m ) O ( m log | Σ | )
[ to długość łańcucha, a to rozmiar alfabetu]
Nie rozumiem, dlaczego to prawda.
- Space: cóż, w przypadku, gdy reprezentujemy gałęzie poza węzłami za pomocą tablic o rozmiarze , wówczas faktycznie kończy się użycie miejsca . Jednak, o ile widzę, możliwe jest również przechowywanie gałęzi za pomocą tabel skrótów (powiedzmy słowników w Pythonie). Wówczas mielibyśmy tylko wskaźniki zapisane we wszystkich tabelach skrótów (ponieważ w drzewie znajdują się krawędzie ), a jednocześnie nadal jesteśmy w stanie uzyskać dostęp do węzłów potomnych w czasie , tak szybko jak przy użyciu tablic.
- Czas : jak wspomniano powyżej, użycie tabel skrótów pozwala nam uzyskać dostęp do wychodzących gałęzi dowolnego węzła w czasie . Ponieważ algorytm Ukkonena wymaga operacji (w tym dostępu do węzłów potomnych), całkowity czas działania wyniósłby wówczas również .O ( m ) O ( m )
Byłbym bardzo wdzięczny za wszelkie wskazówki, dlaczego mylę się we wnioskach i dlaczego Gusfield ma rację co do zależności algorytmu Ukkonen od alfabetu.