Data structures 如何以k元级别的顺序获取父级succut-trie?

Data structures 如何以k元级别的顺序获取父级succut-trie?,data-structures,computer-science,trie,bitvector,Data Structures,Computer Science,Trie,Bitvector,我正在实现一个级别顺序的简洁trie,我不希望给定的节点能够跳回其父节点 我尝试了几种等级/级别的组合,但我无法理解这一点 我将本文用作基本文档: 它解释了如何穿越childs,而不是如何上升 感谢麻省理工学院的讲座(),我知道这是可能的(在15:50的固定时间内),但演讲者只解释了二进制trie(例如:使用公式select1(floor(I/2))) 如何在k元trie上实现这一点?我不知道什么是select1(),但另一部分(floor(I/2))看起来像是在数组嵌入式二叉树中使用的技巧,

我正在实现一个级别顺序的简洁trie,我不希望给定的节点能够跳回其父节点

我尝试了几种等级/级别的组合,但我无法理解这一点

我将本文用作基本文档:

它解释了如何穿越childs,而不是如何上升

感谢麻省理工学院的讲座(),我知道这是可能的(在15:50的固定时间内),但演讲者只解释了二进制trie(例如:使用公式select1(floor(I/2)))


如何在k元trie上实现这一点?

我不知道什么是
select1()
,但另一部分(
floor(I/2)
)看起来像是在数组嵌入式二叉树中使用的技巧,如前面所述。您可以除以2,因为每个父级正好有2个子级-->每个级别使用的空间是父级的两倍

如果在每个节点中没有相同数量的子节点(除了叶子和可能有一个节点的子节点较少),则不能使用此技巧

如果您想知道任何给定节点的父节点,则需要在每个节点中添加指向父节点的指针


尽管如此,由于树通常从根开始向下遍历,通常要做的事情是在数组中存储指向路径节点的指针。在任何给定点,当前节点的父节点都是数组中的上一个元素。这样,您就不需要在每个节点中添加指向父节点的指针。

我想我已经找到了答案。Guy Jacobson的这篇论文在第3.2节一元一次序列中解释了这一点

父(x){select1(rank0(x))}

空间有效的静态树和图


这项工作非常好,只要你不象我那样弄乱你的节点编号。

好吧,我需要转到父节点,因为我将使用这个trie来存储数据。我将使用另一个数据结构进行索引和搜索。但是我仍然需要一种在最小空间中引用trie中每个单词的方法,这可以通过指向终端节点并跳回根来实现。有趣的论文。这些“目录”允许快速修改吗?