尝试和树木之间的区别?

时间:2011-01-19 16:31:23

标签: tree trie

我远程记住,尝试不会存储每个节点的整个数据,只会存储父节点的后缀。

树存储整个数据,但只根据前缀组织自己。

因此尝试变小,这样可以很好地压缩字典。

这真的是唯一的区别吗?

从实际应用程序中我记得尝试在范围查询中更快。甚至还有特殊的solr / lucene trie字段来加速范围查询。但那是怎么回事?

实际差异是什么,尝试和树木的优点和缺点是什么?

3 个答案:

答案 0 :(得分:59)

树是递归节点的一般结构。有很多种树木。受欢迎的是binary treebalanced treeTrie是一种树,有许多名称,包括前缀树,数字搜索树和检索树(因此名称为'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仍然提供了一些见识。

  

树仅存储键,它们不存储与   键。