Мене хвилює питання про асимптотичний час роботи алгоритму Укконена , можливо, найпопулярнішого алгоритму побудови дерев суфіксів у лінійному (?) Часі.
Ось цитата з книги "Алгоритми про струни, дерева та послідовності" Дена Гусфілда (розділ 6.5.1):
"... алгоритми Aho-Corasick, Weiner, Ukkonen та McCreight або вимагають простору , або обмежений час O ( m ) повинен бути замінений мінімумом O ( m log m ) та O ( m log | Σ | ) ".
[ - довжина рядка і Σ - розмір алфавіту]
Я не розумію, чому це правда.
- Space: добре, якщо ми уявимо гілка з вузлів з використанням масивів розміру , то, на насправді, ми в кінцевому підсумку з thetas ; ( т | Е | ) використанням простору. Однак, наскільки я бачу, можна також зберігати гілки, використовуючи хеш-таблиці (скажімо, словники в Python). Тоді ми мали б лише Θ ( m ) покажчики, які зберігаються у всіх хеш-таблицях (оскільки у дереві є Θ ( m ) ребра), і в той же час ми матимемо доступ до дитячих вузлів у O ( 1 ) час, так само швидко, як при використанні масивів.
- Час : як було сказано вище, використання хеш-таблиць дозволяє нам отримати доступ до вихідних гілок будь-якого вузла за час . Оскільки алгоритм Укконена вимагає операцій O ( m ) (включаючи доступ до дитячих вузлів), то загальний час роботи тоді також буде O ( m ) .
Я був би вам дуже вдячний за будь-які підказки про те, чому я помиляюся у своїх висновках і чому Гусфілд має рацію щодо залежності алгоритму Укконена від алфавіту.