trie树

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)

参考:http://en.wikipedia.org/wiki/Trie

你可能感兴趣的:(trie树)