Radix尝试,尝试和三元搜索尝试

时间:2014-04-16 17:55:55

标签: algorithm trie ternary-search-tree radix-tree

我目前正试图了解Trie的各种变化,并想知道是否有人能够澄清几点。 (我对这个问题Tries versus ternary search trees for autocomplete?的答案感到很困惑,尤其是在第一段中。)

据我所知,以下是正确的吗?假设我们在数据结构中存储了n个元素,L是我们要搜索的字符串的长度:

  • Trie将其密钥存储在叶子节点上,如果我们对搜索有正面命中,那么这意味着它将执行O(L)比较。然而,对于未命中,平均性能为O(log2(n))。

  • 类似地,基数树(R = 2 ^ r)将密钥存储在叶节点处,并且将对正向命中执行O(L)比较。然而,未命中将更快,并且在O(logR(n))中平均发生。

  • 三元搜索Trie本质上是一个BST,其操作<,>,=并且每个节点都存储一个字符。我们只比较该节点上密钥的字符,而不是比较节点上的整个密钥(与BST一样)。总的来说,假设我们的字母大小是A,那么如果有一个命中,我们必须执行(最多)O(L * A)= O(L)比较。如果没有命中,平均我们有O(log3(n))。

关于基数树,例如我们的字母表是{0,1}并且我们设置R = 4,对于二进制字符串0101我们只需要两次比较吗?因此,如果我们的字母表的大小是A,我们实际上只会执行L *(A / R)比较?如果是这样,那么我猜这只是O(L),但我很好奇这是否是正确的推理。

感谢大家给予的任何帮助!

0 个答案:

没有答案