Ukkonen算法的运行时间如何取决于字母大小?


19

我担心Ukkonen算法的渐近运行时间问题,它可能是在线性(?)时间构造后缀树的最流行算法。

这是丹·古斯菲尔德(Dan Gusfield)撰写的《关于字符串,树和序列的算法》(第6.5.1节)的引用:

“ ... Aho-Corasick,Weiner,Ukkonen和McCreight算法都需要空间,或者O m 时限应替换为O m log m O的最小值m log | Σ | ”。Θ|Σ|ØØ日志Ø日志|Σ|

[ 是字符串长度,Σ是字母的大小]Σ

我不明白为什么这是真的。

  • 空间:好吧,如果我们使用大小为数组表示节点外的分支,那么实际上,我们最终会占用Θ m | Σ |空间。但是,据我所知,还可以使用哈希表(例如Python中的字典)存储分支。这样一来,我们将只将Θ m 指针存储在所有哈希表中(因为树中有Θ m )个边),同时仍然能够访问O 1 )中的子节点。Θ(|Σ|)Θ(m|Σ|Θ(mΘØ1个 时间,与使用数组时一样快。
  • 时间:如上所述,使用哈希表使我们能够在时间内访问任何节点的传出分支。由于Ukkonen的算法需要O m )个操作(包括访问子节点),因此总运行时间也将为O m Ø1个ØØ

对于任何提示我为什么我的结论是错误的以及Gusfield为什么Ukkonen算法对字母的依赖性是正确的,我将不胜感激。


3
我认为没有任何证据可以证明不可能实现与字母大小无关的时间/空间限制。我相信古斯菲尔德之所以发表这一声明,是因为没有已知的方法可以完全摆脱时限。为了建立一个,您必须更详细地说明您的哈希函数。哈希查找的真正最坏情况O(1)时间限制要求完美的哈希。我尚不清楚在算法期间如何执行此操作(因为此时哈希条目不是静态的)。
jogojapan

(续)一旦树完成,就可以执行此操作,但是算法本身的时间范围将保持不变。(不过是问题的+1。)
jogojapan 2013年

Answers:


2

O(1)O(1)Ω(Σ)Θ(mΣ)

而且,实际上所有这些哈希表的建立时间将比建立数组的时间长得多。

使用以(节点,字符)对为索引的全局哈希表可能会更好,但是至少会保留“仅摊销”参数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.