Ukkonenのアルゴリズムの実行時間はアルファベットサイズにどのように依存しますか?


19

Ukkonenのアルゴリズムの漸近的な実行時間、おそらく線形(?)時間でサフィックスツリーを構築するための最も一般的なアルゴリズムの問題に関心があります。

これは、ダンガスフィールドによる本「ストリング、ツリー、シーケンスのアルゴリズム」からの引用です(セクション6.5.1)。

"... Aho-Corasick、Weiner、Ukkonen、およびMcCreightアルゴリズムはすべてスペースを必要とするか、O m 時間境界を最小のO m log m およびOに置き換える必要がありますm log |Θm|Σ|OmOmログm "。Omログ|Σ|

[ mは文字列の長さ、はアルファベットのサイズ]Σ

なぜそうなのか分かりません。

  • スペース:まあ、サイズ配列を使用してノードからの分岐を表す場合、実際、Θ m | Σ |スペース使用になります。ただし、私の知る限り、ハッシュテーブル(Pythonの辞書など)を使用してブランチを保存することもできます。その後、O 1 )の子ノードにアクセスできる一方で、すべてのハッシュテーブルにΘ m ポインターのみを格納します(ツリーにはΘ m エッジがあるため)。Θ|Σ|Θm|Σ|ΘmΘmO1 時間、配列を使用するときと同じくらい速い。
  • 時間:前述のように、ハッシュテーブルを使用すると、時間で任意のノードの発信ブランチにアクセスできます。UkkonenのアルゴリズムはO m 操作(子ノードへのアクセスを含む)を必要とするため、全体の実行時間もO m )になります。O1OmOm

結論が間違っている理由と、アルファベットに対するUkkonenのアルゴリズムの依存性についてGusfieldが正しい理由についてのヒントをいただければ、非常に感謝しています。


3
私は、アルファベットサイズに依存しない時間/空間の境界が不可能であるという効果の証拠はないと思います。私は、時間制限を完全に取り除く既知の方法がないため、ガスフィールドが声明を出したと信じています。ハッシュ関数を確立するには、ハッシュ関数をさらに詳しく説明する必要があります。ハッシュルックアップの真の最悪ケースO(1)時間制限には、完全なハッシュが必要です。アルゴリズム中にこれを行う方法は明確ではありません(その時点でハッシュエントリは静的ではないため)。
jogojapan

(続き)ツリーが完成したらできますが、アルゴリズム自体の時間制限は変更されません。(ただし、質問の+1。)
jogojapan

1
便利なコンテキスト:Ukkonenのアルゴリズムを説明
FrankW

回答:


2

O(1)O(1)Ω(Σ)Θ(mΣスペース(と同じ時間初期化の要件)。

さらに、実際には、これらすべてのハッシュテーブルを設定する時間は、配列を設定する時間よりもはるかに長くなります。

(ノード、文字)ペアでインデックス付けされたグローバルハッシュテーブルを使用する方がうまくいくかもしれませんが、少なくとも「償却のみ」の引数は残ります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.