Trie树,又叫前缀树,是一种排序树数据结构,用来存储关联数组,其中的key通常是字符串。不像二叉搜索树(BST)的节点上不存储相关的key,Trie树上的节点位置用来表示与它相关的key。所有的后继结点都拥有相同的前缀,而根节点关联的是空字符串。通常节点不关联值,只有其上的叶子节点和中间节点表示你感兴趣的key。
下面是Trie树相对于二叉搜索树(BST)的优点:
1. 查找key更快,对于一个长度为m的key,最差时间复杂度是O(m)。而BST需要用O(logN)来比较key,N是树上元素的个数。由于查找依赖于树的深度,因此最差的情况下BST需要O(m log N)的时间。
2. Trie树需要更小的存储空间。
3. Trie树可以方便地用来做最长前缀匹配(LPM)。
用Trie树和Hash表做比较,可以发现下面的优点和缺点:
1. 在最糟情况下,Trie的查找时间是O(m),它高于hash表的(N),因为hash表可能会遇到key冲突。不过典型的hash表查找时间是O(1).
2. Trie树中没有不同key的冲突问题。
3. 在新增key的情况下不需要像hash表那样增加或者修改hash函数。
4. Trie树可以提供key字母序的值。
Trie也有一些缺点:
1. Trie查找要比hash表来的要慢
2. 很多key是无法用字串来表示的,只能用多个字串来表示,例如浮点数。
Trie通常用来存储字典,比如说手机上的字典,它利用了Trie的快速查找和添加删除功能。但是,如果存储是最重要的考量的话,无环DFA是将会比Trie更节省空间。
Tire也能很好的应用在模糊匹配算法方面,包括一些拼写检查的软件。