Tree 树和树的区别?

Tree 树和树的区别?,tree,trie,Tree,Trie,我隐约记得,尝试不会存储每个节点的全部数据,只存储父节点的后缀 树确实存储了整个数据,但只根据前缀进行组织 因此,尝试变得更小,例如,这允许非常好地压缩字典 这真的是唯一的区别吗 从实际应用中,我记得在范围查询中尝试更快。甚至还有特殊的solr/lucene trie字段来加速范围查询。但这是怎么回事 try和trees的实际区别是什么?优缺点是什么?tree是递归节点的一般结构。有许多种类的树。流行的是和。A是一种树,有许多名称,包括前缀树、数字搜索树和检索树(因此命名为“trie”) 每种树

我隐约记得,尝试不会存储每个节点的全部数据,只存储父节点的后缀

树确实存储了整个数据,但只根据前缀进行组织

因此,尝试变得更小,例如,这允许非常好地压缩字典

这真的是唯一的区别吗

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


try和trees的实际区别是什么?优缺点是什么?

tree是递归节点的一般结构。有许多种类的树。流行的是和。A是一种树,有许多名称,包括前缀树、数字搜索树和检索树(因此命名为“trie”)

每种树都有不同的用途、结构和行为。例如,二叉树存储可比较项的集合(例如数字)。因此,它可以用来存储一组数字,或者索引可以用数字表示的其他数据(例如可以散列的对象)。它的结构已排序,因此可以快速搜索以找到单个项目。其他树结构,如平衡树,原则上是相似的


表示其结构中的序列。它非常不同,因为它存储的是一系列值,而不是单个值。每一级递归都会说“输入列表中项目I的值是多少”。这与将单个搜索值与每个节点进行比较的二叉树不同。

通常使用二叉树或bst来存储数值。bst中插入、删除和搜索的时间复杂度为O(log(n))。二叉树中的每个节点最多有2个子节点

Trie:Trie的每个节点都由多个分支组成。每个分支表示键的一个可能字符。我们需要将每个键的最后一个节点标记为叶节点。trie节点字段值将用于将节点区分为叶节点(值字段还有其他用途)

要了解有关尝试的信息,请参阅本topcoder教程。

刚刚从中获得了一些见解,尽管linux内核中使用的基数树与wikipedia上的略有不同

树只存储键,不存储与 钥匙


崔不是有点跛脚吗?除了存储空间之外,二叉树不是在所有方面都优于trie吗?每个数据结构都有一个位置。查找具有相同前缀的所有字符串怎么样?O(n)访问?tree不会也这样做吗?让我们有10亿个条目,查找前缀20。Trie分20步完成。Tree按lg 1B/lg 2=30步完成。现在使用相同的1B条目,我们发现前缀为40。Tree仍然需要30个步骤,但trie需要40个步骤。前缀为100的trie现在需要100步,而tree仍然需要30步。等等,对我来说,如果有更好的方法的话。由于trie中的查找是字符串长度的
O(m)
,而树中的查找是
O(m*logn)
,其中n是节点数,因为比较两个字符串需要最坏情况下的
O(m)
时间,您需要进行最坏情况下的
O(logn)
比较。然而,尝试进行
O(1)
字符比较。@Pacerier Trie对于基本上所有的操作都有更好的渐近性,因为Trie中的比较是
O(1)
,因为您比较的是值的常量子部分,而它们是树中的
O(m)