A trie, or prefix tree, is an ordered tree data structure that is used to store an associative array where the keys are usually strings.
The term trie comes from retrieval.(检索的意思)
它有3个基本性质:
1.根节点不包含字符,除根节点外每一个节点都只包含一个字符。
2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
3.每个节点的所有子节点包含的字符都不相同。
性能方面:
与别的算法不一样,trie树构造上了利用了词或串“可分”的特性,充分利用了数据的特征,所以trie树在插入,删除和查找上所用时间是很稳定的,所以在对插入,删除,查找都有要求的算法当中,trie树是一种很好的选择。而且当数据量一直增大的时候,不会重建树(hash满时要重建)。当海量数据,且数据较短时trie树的空间消耗很小。
与hash table相比,trie树的优点:
1)trie树支持排序,而hash table得到的结果为一个伪随机的
2)trie树支持最大的前缀匹配
3)Tries tend to be faster on average at insertion than hash tables because hash tables must rebuild their index when it becomes full - a very expensive operation. Tries therefore have much better bounded worst-case time costs, which is important for latency-sensitive programs
4)Since no hash function is used, tries are generally faster than hash tables for small keys.
5)在查寻的时候,trie的的最坏情况上届也远好于hash table,因为hash table在生成的过程中会发生碰撞,链接法散列的最坏情况查找时间为O(n)。
与hash table比缺点:
1)不可用在磁盘存储上,分支多,可能一个结点的不同分支不在一个页面上,而hash 的碰撞后还可能在一个页面上
2)在一些情况下,例如存储浮点数,如果用trie树的话可能会产生很多没有意义的分支就不如hash table存储
应用方面:
1.查找最大匹配前缀
2.字符串分词
3.词频的统计,这时候可以把trie树可以用来存储associative array(功能类似于map和hash_map)