【发布时间】:2014-07-02 17:47:33
【问题描述】:
我在主题 Skip list 下浏览 java 中的数据结构,我遇到了以下问题:
在n nodes的跳过列表中,对于每个k和i使得1 ≤ k ≤lg n和1 ≤ i ≤
n/2k–1⎦ – 1,位置2k–1的节点@i指向位置@987654330的节点@·(i + 1)。
这意味着每隔一个节点指向前面两个位置的节点,每个
第四个节点指向前面四个位置的节点,以此类推,如图
3.17a。这是通过在节点中具有不同数量的参考字段来实现的
上榜:一半的节点只有一个引用字段,四分之一的节点
有两个参考字段,八分之一的节点有三个参考字段,所以
在。参考字段的数量表示每个节点的级别,参考字段的数量表示
级别是maxLevel = ⎣lg n⎦ + 1。
图是: 具有 (a) 均匀和 (b) 不同级别的不均匀间隔节点的跳过列表; (c) 清晰显示参考节点的跳过列表。
我不明白数学部分以及 sktip 列表到底是什么,甚至是节点?
【问题讨论】:
-
它就像一个SortedMap。您可以在 O(log(n)) 时间内找到其中的值。通常它的内存占用与 TreeMap 相似或更小,但我猜它的内存局部性更差,因为它的数组长度不同。
-
@GáborBakos 不能同意你的看法。 O(log(n)) 只有在你进行 O(n) 操作来平衡它的情况下才能实现,否则 O(log(n)) 只是预期的查找,而不是最坏的情况
-
@xyz 顺便说一句,您是否尝试过跳过列表上的 Wiki 文章?它似乎比你正在阅读的东西写得更好。
-
@Ordous 感谢您的更正,您是对的,O(log(n)) 只是预期的,而不是最坏的情况。
-
@Ordous 还没有……我正在阅读 Adam Drozdek 的 Java 中的数据结构和算法一书
标签: java skip-lists