Algorithm 具有隐式键的Treap

Algorithm 具有隐式键的Treap,algorithm,data-structures,binary-tree,key,treap,Algorithm,Data Structures,Binary Tree,Key,Treap,有一个叫做treap的数据结构:这是一个随机二叉搜索树,也是随机生成的所谓“优先级”的堆 这个结构有一个变体,其中键是隐式的,它们不存储在树中,但是我们把树中的节点的有序索引看作这个节点的密钥。我们需要在每个节点中存储子树的大小,而不是键。这项技术使我们能够像某种数组一样考虑treap,它在O(logn)时间内支持很多操作:插入、删除、子数组反转、更改间隔等等 我对这种结构略知一二,但不太了解。我试着用谷歌搜索它,但我只找到了很多关于treap本身的文章,而没有找到关于这个“隐式treap”/“

有一个叫做treap的数据结构:这是一个随机二叉搜索树,也是随机生成的所谓“优先级”的堆

这个结构有一个变体,其中键是隐式的,它们不存储在树中,但是我们把树中的节点的有序索引看作这个节点的密钥。我们需要在每个节点中存储子树的大小,而不是键。这项技术使我们能够像某种数组一样考虑treap,它在O(logn)时间内支持很多操作:插入、删除、子数组反转、更改间隔等等

我对这种结构略知一二,但不太了解。我试着用谷歌搜索它,但我只找到了很多关于treap本身的文章,而没有找到关于这个“隐式treap”/“索引列表”的文章。我甚至不知道它的名字,因为我的母语不是英语,我听过的讲座使用的是母语的结构术语,而不是英语的原始术语。这个本地术语可以在英语中直接翻译为“隐式键上的Treap”或“隐式键上的笛卡尔树”

有人能给我指一下这篇关于这个结构的文章,或者告诉我它的原名吗?多谢各位

如果我的英语不够好理解,我很抱歉

UPD:关于我正在寻找的结构的一些额外解释

考虑一个普通的treap,它具有随机选择的优先级和键,这些是存储在树中的实际用户数据。然后让我们想象一下,我们在每个节点中存储了一些其他的用户信息,这些键只不过是搜索键。下一步是计算和维护每个节点中的子树大小:我们必须在每次合并/拆分/添加/删除后更新此参数,但它允许我们在O(logn)时间内找到树的第k个元素

当我们在每个节点中都有子树大小时,我们可以扔掉键,想象treap在有序遍历中表示一个用户数据数组。每个元素的数组索引可以很容易地从子树大小计算出来。现在我们可以在数组的中间添加或删除一个元素或者拆分这个数组-所有在O(log n)的时间。 我们还可以进行“多重”操作——例如,向“数组”的所有元素添加一个常量值。为了实现这一点,我们必须使该操作延迟,在每个节点中添加一个参数,该参数表示延迟常数,该常数必须“稍后”添加到该节点子阵列的所有元素中,并根据需要“推”更改。向子阵列添加常数或绘制(标记)子阵列可以通过这种方式延迟,如反转子阵列(此处节点中位“子阵列必须反转”)中的延迟信息),等等

UPD2:以下是我找到的少量信息。不要注意西里尔语:)单词“ааччччччччччччччччччччч。如果你把钥匙拿开,我看不出你怎么会有麻烦:所以也许我误解了你的问题。或者您指的是treaps的替代方案,随机二叉搜索树。这两种数据结构都使用相同的思想,即通过确保树看起来像一棵普通树(而不是一个病态病例),可以获得平均病例复杂性

使用treaps,您可以使用随机优先级和平衡来实现这一点

对于随机二叉树,随机性仅包括在构造过程中:即,当在树T中插入节点时,它的根概率为1/(size(T)+1,其中size(T)是T的节点数;当然,如果没有在根节点插入节点,则可以递归地继续,直到添加节点为止。(有关这些树的详细研究,请参阅文章my C.Martinez。)

此数据结构的行为与treap完全相同,但使用不需要密钥的不同机制


如果这不是你想要的,也许你可以分享一些额外的信息:你的讲师是否提到任何可能在这个结构上工作过的人,你在哪里,这位讲师,他/你的国籍是什么。看起来可能不是这样,但了解你的母语可能是一条重要线索,因为你通常可以将算法/数据结构与产生它的特定国家联系起来。

我认为这种数据结构没有名字,因为它只是两个正交概念的组合。您可以将这样的隐式键用于几乎任何自平衡树数据结构


您可能想看看替罪羊树,因为它们已经使用子树大小进行重新平衡,并且不需要任何每节点开销

也许您正在寻找一种(复杂形式的字符串)修改,以满足延迟操作的需要。有趣的是,有一个关于rope的开放性问题。

你可以在Kaplan和Verbin关于按反转排序有符号排列的论文(第7页,第3.1节)中找到这个数据结构:。

我说的正是treap,而不是随机BST。在我看来,treap有键和优先级:键是存储在树中的实际用户数据,优先级是随机选择的内部参数。Treap是BST上的键,同时是堆上的优先级。我是乌克兰人,演讲用俄语,讲师维塔利·戈尔茨坦,ACM ICPC奖章获得者,前谷歌实习生,目前在Yandex工作。这个讲座是在哈尔科夫冬季ACM编程学校听的,如果你知道的话。我将在我的文章的UPD中分享一些关于这个结构的额外解释。@Skiminok我对这个技术的写作感兴趣。如果你手头有链接的话,可以给我发个链接吗?谢谢@dhruvbird关于treaps和随机BST的原始论文是。但它只描述了基本的定义和操作。我已经涵盖了系列中所有关于treaps及其应用程序的资料(包括带有隐式键的treaps)