尝试与三元搜索树进行自动完成?

Pav*_*avi 16 string algorithm autocomplete trie data-structures

我已经通过尝试和三元搜索树,我对它们有一些问题.我用Google搜索了答案,但我无法得到具体答案.所以,这是我的问题.

  1. 如果尝试空间效率低并且TST结合了最好的BST和尝试,这是否意味着尝试几乎根本不使用?

  2. 假设TST用于自动完成,那么对于Google来说,它会如何运作?我的意思是,实际上我们没有一套固定的单词等等,所以如何构建TST的树?

tem*_*def 17

尝试和三元搜索树代表时间/空间权衡.如果你的字母表中有k个符号,则trie中的每个节点都有k个指针加上一个额外的位,表示节点是否编码一个字.查找长度为L的单词总是需要时间O(L).三元搜索树每个节点存储三个指针,加上一个字符和一个位用于节点是否编码一个字.查找长度为L的单词需要时间O(L log k).(如果你有一个静态三元搜索树,你可以使用权重平衡树来构建TST ,这会将查找时间提高到O(L + log k),但会使插入过于昂贵.)

对于trie中的每个节点都使用其大部分子节点的情况,Trie比三元搜索树具有更高的空间效率和时间效率.如果每个节点存储相对较少的子节点,则三元搜索树的空间效率更高.通常来说,尝试比三元搜索树快得多,因为需要更少的指针间接.

所以在排序方面,两种结构都不比其他结构严格好.这取决于存储的单词.

为了简单起见,简洁的尝试开始成为上述两种方法的可行替代方案.尽管查找时间往往要慢得多,但它们的空间使用效果要好于尝试.同样,它取决于应用程序是否会比其他两个选项更好或更差.

至于如何构建它们 - 尝试和三元搜索树都支持有效插入单个单词.它们不需要事先用固定的单词构建.

希望这可以帮助!

  • ***对于Trie中的每个节点都使用其大部分子节点的情况,Trie比三元搜索树具有更高的空间效率和时间效率.如果每个节点存储相对较少的子节点,则三元搜索树的空间效率要高得多.***在"Trie"的情况下,每个节点最多可以有k个指针,这意味着大量的内存,因此空间效率低.但是如果每个节点的子节点很少,使用像列表或地图而不是数组的动态集合可以节省空间.因此,即使每个节点的子节点很少,尝试在空间方面也不是那么糟糕. (7认同)
  • @MeenaChaudhary这是真的,尽管这些数据结构的时间效率低于标准数组.一切都是权衡! (3认同)