IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

标签:skip list

共 4 篇相关文章

IT 累计浏览 2,242

跳跃表

这篇讲的是从Redis底层实现引出的跳跃表数据结构。作者从结构图入手,说明它本质是多层链表的组合,底层S0存储有序数据,上层作为索引加速查找。查找时从顶层向下逐层扫描,插入时则通过随机概率P决定新节点能“跳”到多高,从而在期望O(logn)时间内完成操作。 文章展示了一组实验数据,对比了不同P值(如1/2、1/e)对平均操作时间、列高和跳跃次数的影响,直观体现了参数选择的权衡。最后,作者引用了Redis作者antirez的观点,点出跳跃表相比平衡树的核心优势:内存占用可控、对范围查询(ZRANGE)友好、实现与调试更简单。文末也补充说明,这种简单高效的特性使其同样适合算法竞赛场景。

IT 累计浏览 2,541

跳跃表的实现和测试

这篇讲的是LevelDB核心数据结构跳跃表的C语言实现与测试。作者从跳跃表“理论效率非最优但胜在实现简单”这一实用价值出发,完整呈现了从结构定义、增删查改操作到性能测试的全过程。 代码清晰地展示了跳跃表的多层指针设计,比如通过随机层数生成来模拟概率平衡,并通过一个简单的`rand_level`函数控制节点层级分布。文章特别点出了开发中发现的两个实际问题:一是随机层数生成可能超出预设的最大层数,二是在初始化头节点时容易因层数设置不当导致内存越界。作者对这两个问题都给出了具体的修复方案,例如调整循环条件和增加释放内存的`free_skip_list`函数,让整个实现更加健壮。 测试部分不仅验证了插入、查找、删除等基本功能的正确性,还通过性能测试给出了直观数据:插入10万条数据耗时约数十毫秒,搜索10万次同样高效。这些结果印证了跳跃表作为高效查找结构的实用性。对于想理解跳表工作原理或需要借鉴其简洁实现的开发者来说,这篇从代码到测试的完整记录提供了直接参考。

IT 累计浏览 4,422

实时排名,其实很简单

这篇讲的是实时排名算法在特定场景下的高效简化实现。作者从之前用跳表(skip list)处理排名问题出发,指出对于博客这类积分取值范围有限(例如长期在0-10000之间)的应用,完全不必采用过于复杂的数据结构。 核心方案是利用一个数组,记录每个可能分值对应的用户人数。计算排名时,只需对数组进行简单遍历累加即可。与跳表相比,这种方法实现更直接,且在分值范围小的场景下,遍历代价极低,性能开销显著减小。 文章揭示了技术方案选择需要结合具体业务约束。在数据分布范围已知且较小的前提下,看似“笨拙”的简单数组计数法,反而可能是比通用复杂算法更优的工程选择,兼顾了实现简洁与运行效率。

IT 累计浏览 6,924

用skip list实现实时排名?

这篇讲的是博客积分排名系统如何实现实时更新的问题。文章从用户视角出发——当写完一篇文章后,能立刻看到自己的排名变化,比如百分比从 Top 3.27% 提升到 3.16%,这种即时反馈对许多博主(比如文中提到的“晓文哥”)很有吸引力。 为了解决这种高并发的实时排名需求,作者提出使用跳表(Skip List)作为核心数据结构。跳表能高效支持频繁的插入、删除和查询,非常适合动态变化的排行榜场景。文章探讨了在积分频繁变动的情况下,如何利用跳表的有序性与多级索引来快速定位和更新排名,从而避免传统方案可能带来的性能瓶颈。 这种设计让排行榜能快速响应积分变动,既满足用户的即时反馈需求,又保证了系统的稳定性。对于需要构建实时排行榜或类似高频更新场景的开发者来说,这个方案提供了具体的思路参考。