基数树和Patricia trys有什么区别?


31

我正在学习基数树(也称为压缩尝试)和Patricia尝试,但是我发现关于它们实际上是否相同的冲突信息。当节点是唯一的子节点时,可以通过将节点与其父节点合并来从基数(未压缩)的树中获得基数树。这也适用于帕特里夏(Patricia)尝试。两种数据结构在哪些方面有所不同?

例如,NIST将两者列出为相同:

帕特里夏树

(数据结构)

定义:Trie的紧凑表示,其中作为唯一子节点的任何节点都与其父节点合并。

也称为基数树。

网络上的许多消息来源都声称相同。但是,显然Patricia尝试是基数树的特例。维基百科条目说:

PATRICIA尝试是基数等于2的基数尝试,这意味着将分别比较密钥的每个位,并且每个节点都是双向(即,左与右)分支。

我不太明白。区别仅在于进行查找时进行比较的方式吗?每个节点如何成为“双向分支”?ALPHABET_SIZE给定节点最多应该有最多分支吗?

有人可以澄清吗?出于实际目的,基数尝试是否通常像Patricia尝试一样实现(因此通常被认为是相同的)?还是不能做出这样的概括?

Answers:


22

我发现这篇文章非常有帮助。

要了解帕特里夏尝试和基数树之间的区别,重要的是要了解:

  • radix的概念,因为Patricia尝试是基数等于2的基数树。
  • 密钥的处理方式:作为比特流。一次将密钥与位进行比较,其中2 r是trie的基数。[R2[R

假设我们插入钥匙微笑微笑,和微笑在帕特里夏特里(按照这个顺序)。这些密钥的二进制表示形式如下:

三个示例键的二进制表示

请注意,微笑是一个前缀笑了笑,以及分析的二进制表示,我们可以看到,第一位的是不同(从左至右)为0(以红色突出显示在第二行); 因为这个原因,笑着将是左孩子笑脸。同样,笑容将是右孩子微笑,因为它们共享相同的前缀高达位,其值是1(以红色突出显示在第三行)。插入三个键后的结果是Patricia trie:

有3个节点的Patricia Trie

如果基数为4,则内部节点最多可以有四个子节点(其边分别标记为00、01、10和11)。在这种情况下,密钥将按2位而不是1的块进行比较(如Patricia所做的那样)。


两种数据结构在哪些方面有所不同?

据我了解,唯一的区别是基数,在Patricia try的情况下等于2。在常规基数树中,该值可以是2的任意幂。

区别仅在于进行查找时进行比较的方式吗?

日志2[R[R

每个节点如何成为“双向分支”?ALPHABET_SIZE给定节点最多应该有最多分支吗?

基数确定了基数树的节点可以具有的最大子代数。例如,当radix = 2时,每个节点最多可以有两个孩子。Patricia try(也称为二进制基数树)就是这种情况。

基数尝试是否通常像Patricia尝试一样实现(因此通常被认为是相同的)?还是不能做出这样的概括?

老实说,我没有这个问题的答案。似乎这两种数据结构都是由不同的作者在同一时间提出的。由于我不知道的历史原因,这两个词在今天仍然有效。


3

Patricia trie是将PATRICIA算法应用于字母数字数据而产生的二进制基数trie。

PATRICIA代表检索字母数字编码信息的实用算法 [ Donald R. Morrison的原始论文 ]。本文定义了一个基本词汇,包括START,STOP,END,L-PHRASE,BRANCH,TWIN和CHAIN。PATRICIA尝试是应用该算法得出的尝试-二进制基数尝试,其中基数r为2 [ Wikipedia ](及以上);遍历trie时,每个节点的二进制选择)。

但是,实际上,术语Patricia似乎与r> = 2一起使用(即基数尝试),其中使用了类似的存储和搜索算法。例如是评为了Patricia。的复仇帕特里夏梅克尔Trie树是另一个例子,其中r是16在某些节点。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.