关于PATRICIA混乱[关闭](Confusion regarding PATRICIA [clo

2019-08-20 14:57发布

根据点3和4 的libstdc ++文档 ,PATRICIA尝试有两种类型的节点:

A(PATRICIA)线索类似于树,但有以下区别:

  1. 它明确意见键作为元素的序列。 例如,特里结构可以查看一个字符串作为字符序列; 特里结构可以查看一个数字作为比特序列。

  2. 它不是(必然)二进制文件。 每个节点具有扇出的n + 1,其中n是不同的元素的数量。

  3. 它仅在叶节点存储的值。

  4. 内部节点具有性质A)每个人都有至少两个孩子,和B)各股相同的前缀与任何后裔。

这本书我一直在读(算法在C,1-4部分由罗伯特·塞奇威克)似乎描述PATRICIA线索存储与仅n个节点的n值,使用内部节点的存储值:

像DSTS,帕特里夏尝试允许只用N个节点树搜索N个按键。 ......我们避免通过其他简单的设备进行外部节点:我们存储在内部节点的数据,并指向向上返回到正确的内部节点线索链接替换链接到外部节点

这似乎有信心在这里的两个阵营:

  1. 一方面,我们有严格,具体的定义(即塞奇威克,高德纳,莫里森谁似乎都形容PATRICIA专门与分支消除单向前缀压缩二叉树); 和
  2. 然后,我们有那些相信术语形成,这似乎更像是他们打算用一个词像“地图”,“字典”或“线索”(均为实际松散定义,即的libCstd ++文档)一个松散的,模糊的定义。

我想我很担心我的资源的准确性。 据我所知,由于通过共同的前缀引入的问题,它不可能表示与只是N个节点树,而不呈现它作为二进制树(这似乎违背的libCstd ++文档点2和点4具有可变处理时-width键),并且没有通过渲染“叶节点”和“孩子”有点无效)的概念失去严格的单向分支概念(违反分3和4。 这两个功能协同工作,以消除困境,即“内部节点”,将导致这些树木使用超过N个节点(回忆:N项有N只节点)。

引用的这两组不能同时是正确的; 有太多的相互排斥。 当一个参考说PATRICIA是二进制的,另一个说,这可能不是,他们不能同时被认为是真实,正确,而这仅仅是一个矛盾的例子,我在这里看到。 以下哪个引用的是正确的?

Answer 1:

我继续寻找从过去的有信誉的来源明确的定义,以确认我所怀疑的,我正在写,提供我的发现。 也许最显著是官方给出定义PATRICIA,由DR莫里森在十月1968s“ACM学报”发表:

PATRICIA从“一库自动机” [3]等研究中发展。 ...早在这一演变,决定了字母应仅限于一个二进制。 这极大地影响这一决定的一个定理是其中之一,另一种形式,是因为欧拉。 该定理指出,如果字母表是二进制的,则分支的数量正好是一个比端的数量少。 推论指出,随着库的增长,每一个新的结束带来了与它究竟是一个新的分支图书馆,每个分支都有恰好两个出口。 这些事实是在存储的索引的分配非常有用的。 他们暗示所需的总存储完全由端的数量决定的,和所有所需的存储实际上会被使用。

这当然违背点2和的libstdc ++参考的3。 有没有在本文中,如具体的算法细节进一步的证据,但上面的报价应该足够了。

似乎没有从在塞奇威克报价官方描述的任何偏差,但是。 在此基础上,该++的libstdc资源肯定比塞奇威克资源少有效。



Answer 2:

虽然两者的定义似乎是正确的,第一个是更详细,似乎更给我。 也看看这个答案 ,在这里我试着描绘帕特里夏和定期特里之间的差异。



文章来源: Confusion regarding PATRICIA [closed]