web-dev-qa-db-ja.com

Trieデータ構造のベスト/ワースト/アベレージケースのBig-Oランタイムとは何ですか?

挿入と検索のためのトライデータ構造の最良/最悪/平均の場合の複雑さ(Big-O表記)は何ですか?

すべての場合でO(K)だと思います。ここで、Kは、挿入または検索される任意の文字列の長さです。誰かがこれを確認しますか?

13
Karim Elsheikh

Wikipedia および this source によると、トライの挿入と検索の最悪の場合の複雑さはO(M)です。ここで、Mは長さです。キーの。挿入と検索の最良または平均的なケースの複雑さを説明するソースを見つけることができません。ただし、Big-Oは複雑さの上限のみを記述しているため、最良かつ平均的なケースの複雑さはO(M)であり、Mはキーの長さであると安全に言えます。

17
Alex Brooks

k:検索または挿入する文字列の長さ。

For Search

Worst: O(26*k) = O(k)
Average: O(k)          # In this case, k is an average length of the string
Best: O(1)             # Your string is just 'a'.

Trieの複雑さは、検索する文字列の数によって変わることはなく、検索文字列の長さによってのみ変わります。そのため、英語の辞書で語彙全体を検索する場合のように、検索する文字列の数が多い場合にTrieが使用されます。

For Insertion

Worst: O(26*k) = O(k)
Average: O(k) 
Best: O(1)

だから、はい、あなたは正しいです。あなたはおそらくO(MN)を見て、それはあなたを混乱させたかもしれませんが、それはあなたが上記を行う必要があるときについて話しているだけですO(k)操作N回数。

6
Aerin

ウィキペディアにはこれに関するいくつかの素晴らしい情報があります。 http://en.wikipedia.org/wiki/Trie

0
Ralph Caraveo