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