首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定性跳过列表自上而下插入中的违规

确定性跳过列表自上而下插入中的违规
EN

Stack Overflow用户
提问于 2014-05-01 20:59:19
回答 2查看 398关注 0票数 4

假设我有一个跳跃列表,顺序是3。

代码语言:javascript
复制
           HEAD
level 3     |--------------------------------------------> X
            |                      |---|
level 2     | -------------------> |   | ----------------> X
            |    |---|    |---|    |---|    |---|
level 1     | -> |   | -> |   | -> |   | -> |   | -------> X
            |    |---|    |---|    |---|    |---|
            |    | 20|    |100|    |150|    |200|
            |    |---|    |---|    |---|    |---|


minlimit = ceil(order/2) - 1 = 1

maxlimit = order - 1 = 2

所以本质上它是一个1-2 skip-list

如果我想用自顶向下的插入算法插入50,它会在插入到Head150之间之前提升节点100的级别,并在100之前插入50。现在将发生冲突,因为在100150之间没有节点,而在该间隙中应该至少有一个高度为h-1的节点作为minlimit=1

我做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2014-05-01 23:54:15

如果我想通过自顶向下的插入算法插入50,它将在插入Head和150之间的间隙之前提升节点100的级别,并在100之前插入50

你为什么要这么做?

根据你的链接,我找到的第一个关于确定性的1-2跳过列表(this paper)的参考资料(PDF)是这样的:

在...中注明,插入在...中可以自上而下地执行,...采用这种方法,当搜索要插入的元素时,我们通过将大小为3的任何间隙分成两个大小为1的间隙来在1-2-3跳过列表中插入元素。我们以这种方式确保结构在插入元素或不插入元素时保持间隙不变。

更准确地说,我们从标题开始搜索,并且在比跳过列表的高度更高的级别1开始搜索。当我们找到我们要降低的间隙时,我们查看下面的水平,如果我们看到连续3个相同高度的节点,我们提升中间的节点;然后我们下降一个水平。当我们到达最底层时,我们只需插入一个高度为1的新节点。

根据这个,你应该从级别3开始,然后看看下面的级别2。这里没有3个相同高度的节点-只有单个节点150 -所以你不需要提高任何东西。现在,下降到间隙头部的level 2,150。

这开始解决你的困惑了吗?

票数 2
EN

Stack Overflow用户

发布于 2014-05-03 03:11:08

如果我想通过自顶向下的插入算法插入50,它会在进入

和150之间的空隙之前提升节点100的水平,并在100之前插入50。

它不会提升节点100的级别。相反,它会提升节点20的级别。根据算法,每当您达到某个间隙中节点的maxlimit时,您就会提升该间隙中ceil((maxlimit/2))th节点的级别。

在这种情况下,当节点20的级别被提升到级别2时,在头部和节点20之间没有级别1节点,但是它不会引起任何结构违规。Munro等人的论文中描述的确定性跳表的原始结构。是这样读的。

假设在n个元素的跳跃列表中存在比跳跃列表的高度高1的第0个和第(n+1)st个节点,我们要求在高度为h (h > 1)或更高的任意两个节点之间,存在1个或2个高度为h-1的节点。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23408199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档