我远程记住,尝试不会存储每个节点的整个数据,只会存储父节点的后缀。
树存储整个数据,但只根据前缀组织自己。
因此尝试变小,这样可以很好地压缩字典。
这真的是唯一的区别吗?
从实际应用程序中我记得尝试在范围查询中更快。甚至还有特殊的solr / lucene trie字段来加速范围查询。但那是怎么回事?
实际差异是什么,尝试和树木的优点和缺点是什么?
答案 0 :(得分:59)
树是递归节点的一般结构。有很多种树木。受欢迎的是binary tree和balanced tree。 Trie是一种树,有许多名称,包括前缀树,数字搜索树和检索树(因此名称为'trie')。
每种树都有不同的目的,结构和行为。例如,二叉树存储可比较项目(例如数字)的集合。因此,它可以用于存储一组数字,或者索引可以用数字表示的其他数据(例如,可以被散列的对象)。它的结构已经过排序,因此可以快速搜索以查找单个项目。其他树结构,例如平衡树,原则上是相似的。
trie表示其结构中的序列。它的不同之处在于它存储的是值序列而不是单个单个值。每个递归级别都表示“输入列表的第I项的值是多少”。这与将单个搜索值与每个节点进行比较的二叉树不同。
答案 1 :(得分:4)
二叉树或 bst 通常用于存储数值。 bst中的时间复杂度是插入,删除和搜索的O(log(n))。二叉树中的每个节点最多有2个子节点。
Trie :trie的每个节点都包含多个分支。每个分支代表键的可能特征。我们需要将每个键的最后一个节点标记为叶节点。 trie节点字段值将用于将节点区分为叶节点(值字段还有其他用途)
要了解尝试,请参阅此topcoder教程。 https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/
答案 2 :(得分:2)
即使从linux内核中使用的Radix树与Wikipedia上的树相比,this talk仍然提供了一些见识。
树仅存储键,它们不存储与 键。