redis作者给出的三点:
1.从内存占用来说,跳表比平衡树更灵活
平衡树每个节点包含两个指针,分别指向左右节点
跳表每个节点包含的指针数目取决于概率p,是1/(1-p)
redis取的p是1/4,那么平均每个节点包含1.33个指针。
比平衡树更有优势。
2.跳表在范围查找的时候,比平衡树要简单
平衡树上,找到指定范围的最小值之后,还需要中序遍历继续找不超过最大值的节点
而在跳表上进行范围查找,比较简单,只要找到最小值之后,对第一层链表进行若干步的遍历就可以实现
3.算法实现难度上,跳表比平衡树简单
平衡树的插入和删除,可能引发子树的调整,逻辑复杂
跳表的插入和删除,只需要修改相邻节点的指针,简单。
p的解释:
跳表在创建节点时候,会生成范围为[0-1]的一个随机数,如果这个随机数小于 0.25(相当于概率 25%),那么层数就增加 1 层,然后继续生成下一个随机数,再判断是否继续增加层数,当生成的随机数大于或等于0.25时,停止生成新的层数,最终确定该节点的层数。
例子:
假设我们希望生成一个节点的层数,设定阈值为 0.25。
第一次生成的随机数是 0.2,小于 0.25,层数增加 1 层。
第二次生成的随机数是 0.3,大于或等于 0.25,结束。
结果:该节点最终层数为 1。
跳表节点定义:

最低0.47元/天 解锁文章
4282

被折叠的 条评论
为什么被折叠?



