面试只Trie树特点和应用场景

Trie树也叫前序表达树(prefix tree),Trie树的结构在这里不再赘述,请参考wiki trie,附一张wiki的图,如下:

《面试只Trie树特点和应用场景》

Trie通常和二叉搜索树作比较,同时也和HashTable做比较,其特点如下:

优点:

1. Trie进行对某个string查找的时间复杂度为O(m),m为string中字符个数。相比较,BST(二叉搜索树)的时间复杂度是O(logN),在树不平衡的情况下,为O(N);同时,相比HashTable,尽管大部分情况Hash时间复杂度为O(1),但是Hashtable有不能增长等缺点,并且如果hashfunc不完美的话,最坏情况也有O(N)的情况。

2. Trie可以生成以字母顺序排序的键值对集合

缺点:

1. Trie在搜索效率上可能会比Hash慢。

2. 有些键(key),例如浮点数,有很长的前序节点,可能会导致内存过大或者搜索效率下降。虽然bitwise trie可以处理这种情况,但需要针对特定的情境编写多余的代码。

3. 在空间复杂度上,Trie的开销可能会多于Hashtable申请的内存。Trie的每一个节点可能会有多个孩子(例如每个节点最多可能有a-z 26个孩子),这个多层的Trie对内存开销很大。

Trie的应用场景

1. 保存一本字典,英文字典大约只有50,000个单词,并且Trie还演化出来一种叫做Directed acyclic word graph的东西,它将后缀一样的字符串也进行了压缩,所以空间利用率有了进一步提高。所以Trie在空间利用率上不会比Binary Search Tree差太多。
2. 根据保存的字典,可以预测用户输入内容
3. 断词和拼写查错软件也运用了Trie — spellings/suggestions/type-ahead-lookup/auto-completion/
这些应用场景都有一个特点,就是不是单独地查询一个词,而是获取以有一定字母顺序的一组字符串

    原文作者:Trie树
    原文地址: https://blog.csdn.net/cinnamonjester7/article/details/11599289
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞