- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我真的不明白这个列表的概率。除了声明“我们必须检查不超过 n/2 + 1 个节点(其中 n 是列表的长度)。还给每第四个节点一个指针向前四(图 1c)要求不超过 n/4 + 2 个节点被检查”。我在以下链接中阅读了此声明:ftp://ftp.cs.umd.edu/pub/skipLists/skiplists.pdf
最佳答案
您没有理解的是,每个 节点在第 1 层都有一个链接。也就是说,在最低层,数据结构本质上是一个链表。使用这个搜索节点当然是一个 O(n) 操作。
跳跃列表的每个节点都有至少一个链接:第 1 层的链接。平均,一半的节点也有第 2 层的链接。如果这是链接存在的最高级别,那么您可以在 O(n/2) 中找到任意节点。基本上,您遵循第 2 级节点,直到找到您正在寻找的项目,或者直到您到达一个值大于您正在寻找的节点的节点。在这一点上,您降级到第 1 级节点并从前一个节点(即小于您要查找的节点的节点)向前搜索。
同样,平均而言,1/4 的节点在第 3 层有链接。使用这些,您可以在 O(n/4) 中找到任意节点。您首先搜索第 3 级节点,直到找到该节点或越过它,然后从该点下降到第 2 级节点,如果在第 2 级找不到节点,则下降到第 1 级节点。
如果你按照数学计算,你可以看到如果你的最大级别是m
,那么只要你在跳过列表中的节点少于2^m
,您的摊销平均搜索时间将为 O(log2(n)),其中 n
是列表中的项目数。
所以跳表节点的结构是这样的:
SkiplistNode
{
int level;
SomeType data; // the data held in the node
SkiplistNode* forwards[]; // an array of 'level' forward references
}
如果节点的 level
值为 1,则 forwards
数组中只有一项。如果是第 4 级,则将有四个条目:第 4、3、2 和 1 级各一个。
事实证明,forwards
数组的平均大小为 2。这遵循 1 + 1/2 + 1/4 + 1/8 + 1/16, + 1/32, ...
即:
Every node has a link at level 1
1/2 of the nodes have a link at level 2
1/4 of the nodes have a link at level 3
1/8 of the nodes have a link at level 4
etc.
现在更清楚了吗?
关于data-structures - skiplist-我真的需要一个解释,它是如何插入和删除的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4422854/
跳跃链表是一种随机化数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间),并且对并发算法友好。 基本上,跳跃列表是对有序的链表增加上附加的前进链接,增加
我开始研究 ConcurrentSkipListSet。 从一开始我就试图了解 SkipList 是什么? 我是这样想的(可能的变体): 我有两个问题: SkipList 与并发性有何关系? 为什么不
曾经有人质疑antirez(Redis 的作者)为什么Redis 在ycombinator 中使用跳跃列表来实现排序集。 : I was looking at Redis yesterday and
我真的不明白这个列表的概率。除了声明“我们必须检查不超过 n/2 + 1 个节点(其中 n 是列表的长度)。还给每第四个节点一个指针向前四(图 1c)要求不超过 n/4 + 2 个节点被检查”。我在以
我想要一个用于跳跃列表实现的随机数生成器,并得到了以下逻辑。我能解释一下随机数是如何生成的吗?我看到使用位运算符但无法理解逻辑。 #include #include using namespace
我正在实现 STL 风格的跳过列表。内部节点类型如下: template struct __skiplist_node { typedef __skiplist_node* __skiplist
所以我试图实现一个 FastDefaultList 类,它基本上是一个跳跃列表,表示索引为 0,1,2,3,…,∞ 的无限列表。开始时,此列表中的每个值都被分配默认值 null。否则,这个类的行为就像
我最近一直在阅读有关跳跃列表的内容。 我有一个 Web 应用程序,它对静态数据集执行非常复杂的 Sql 查询。 我想实现一个缓存系统,据此生成 sql 查询的 md5 哈希,然后返回查询的缓存数据集(
我是一名优秀的程序员,十分优秀!