尝试和树木之间的区别?

问题描述 投票:47回答:3

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

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

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

这真的是唯一的区别吗?

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

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

tree trie
3个回答
59
投票

树是递归节点的一般结构。有很多种树木。热门的是binary treebalanced treeTrie是一种树,以许多名称而闻名,包括前缀树,数字搜索树和检索树(因此名称为“trie”)。

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

trie代表其结构中的序列。它的不同之处在于它存储的是值序列而不是单个单个值。每个递归级别都表示“输入列表的第I项的值是多少”。这与将单个搜索值与每个节点进行比较的二叉树不同。


4
投票

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

Trie:trie的每个节点都包含多个分支。每个分支代表键的可能特征。我们需要将每个键的最后一个节点标记为叶节点。将使用特里节点字段值将节点区分为叶节点(值字段还有其他用途)

要了解尝试,请参阅此topcoder教程。 https://www.topcoder.com/community/data-science/data-science-tutorials/using-tries/


2
投票

刚刚从this talk获得了一些见解,即使通过linux内核中使用的Radix树与维基百科上的那个略有不同。

树只存储密钥,它们不存储与密钥相关的值。

© www.soinside.com 2019 - 2024. All rights reserved.