Algorithm Trie节点是否存储字符值?

Algorithm Trie节点是否存储字符值?,algorithm,data-structures,trie,Algorithm,Data Structures,Trie,我正在学习Trie,从维基百科的描述中我有点困惑: 在示例图片中,字符同时存储在节点和边缘中?node类最常见的实现是什么?人们通常将角色存储在节点对象中吗?还是他们通常用边缘来储存 谢谢 我认为当你有一个2d数组或矩阵时,边更有意义。构建一棵树并将价值存储在边上可能会很复杂 字符至少需要存储在边缘上(从技术上讲,我不确定是否将其归类为存储在边缘上,而是存储在父级上) 这背后的原因是——如果你不知道孩子们代表什么字符,你将如何有效地在树中找到字符串?在每个级别,您都必须查看所有的子级: for

我正在学习Trie,从维基百科的描述中我有点困惑:

在示例图片中,字符同时存储在节点和边缘中?node类最常见的实现是什么?人们通常将角色存储在节点对象中吗?还是他们通常用边缘来储存


谢谢

我认为当你有一个2d数组或矩阵时,边更有意义。构建一棵树并将价值存储在边上可能会很复杂

字符至少需要存储在边缘上(从技术上讲,我不确定是否将其归类为存储在边缘上,而是存储在父级上)

这背后的原因是——如果你不知道孩子们代表什么字符,你将如何有效地在树中找到字符串?在每个级别,您都必须查看所有的子级:

for each child c
  if c.char == character we're looking for
而不仅仅是:(假设
子节点
字符
节点
映射

当然,您可以更紧凑地“存储”字符-如果您只有小写字符,您可以有一个数组-
节点子项[26]
,在这里您可以像这样查找:

children[character we're looking for - 'a']

意思是
子对象[0]
将是
'a'
的子对象,
子对象[1]
将是
'b'
的子对象,等等。

当我使用trys时,字符的引用方式是在父节点中。当我这样做时,我使用了一个长度为26的数组来表示不同的字符。例如,单词“cab”在父阵列的第三个插槽中有一个子节点,在第一个插槽中有一个子节点,在第二个插槽中有一个子节点。每个节点只保存一个计数和一个Trie子节点数组。那么您基本上使用子数组中的索引值来标识char值?第一个='a',第二个='b'等。。。?这是因为你想尽可能地节省空间吗?事实上,这是因为这是最简单的方法——再说一遍,我就是这样做的,不一定是“最好”的方法,但对我来说效果很好。而且,正如下面的回答中提到的,它就像
children[0]
一样简单。我觉得用节点存储char值更容易实现,但不确定它是否有任何其他缺点。这更有意义。这可能取决于用例。如果我的字符集大于26个字符,或者我使用的字符远小于26个字符,那么我可能不希望在每个节点上使用静态字符[26]数组(因为浪费空间)。在这种情况下,贴图可能更好?是的,一旦角色集变得更大,数组方法就不再可行。请注意,地图的开销相当大。即使只填充了1/2或1/3的元素,
节点[26]
仍可能比地图占用更少的空间(而且速度也会更快)。
children[character we're looking for - 'a']