用于插入和搜索的trie数据结构的最佳/最差/平均案例复杂度(以Big-O表示法)是什么?
对于所有情况,我认为它是O(K)
,其中K
是要插入或搜索的任意字符串的长度。有人会证实这一点吗?
答案 0 :(得分:15)
根据Wikipedia和this source,插入和搜索特里结构的最坏情况复杂度为O(M)
,其中M
是密钥的长度。我没有找到任何描述插入和搜索的最佳或平均案例复杂性的来源。但是,我们可以有把握地说,最佳和平均情况复杂度为O(M)
,其中M
是密钥的长度,因为Big-O仅描述了复杂性的上限。
答案 1 :(得分:5)
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)并且可能会让您感到困惑,但它只是在谈论您何时需要进行N次以上的O(k)操作。
答案 2 :(得分:0)
在Wikpedia上有一些很好的信息。 http://en.wikipedia.org/wiki/Trie