最新项目需求是要做一个实时排行榜,有积分Score变动就直接影响排行榜,这里讲一种比较高效的实现,欢迎指正。 基本实现原理: 1、排行榜用的数据结构是跳表 SkipList (跳表是一种有序的链表,随机检索、插入和删除的性能非常高,Redis和LevelDB都有采用跳表这种数据结构,是一种空间换时间 ...
分类:
其他好文 时间:
2018-11-30 13:47:19
阅读次数:
320
星期五(11月16日) 学校期中考试调休了,中午就放假了,但是周日早上八点就要返校。别人都在抱怨学校不能休息一个完整的星期天,好多人都在想着办法请假,我倒是无所谓,因为好久不回到这个鸟不拉屎的地方,反而甚是想念。 想念呢群人名我都还记不起来的同班同学;想念老班诗情画意的课堂;想念呢我总是能比别人先完 ...
分类:
其他好文 时间:
2018-11-25 10:15:35
阅读次数:
154
一、有序集合求交集的方法有 a)二重for循环法,时间复杂度O(n*n) b)拉链法,时间复杂度O(n) c)水平分桶,多线程并行 d)bitmap,大大提高运算并行度,时间复杂度O(n) e)跳表,时间复杂度为O(log(n)) 以下是方法的具体介绍: 方案一:for * for,土办法,时间复杂 ...
分类:
其他好文 时间:
2018-11-24 19:02:01
阅读次数:
231
排行榜有很多种设计方案: 比如数组,排序树,Redis的sort set等,还有这里说的跳表。 先科普一下跳表以及分析一下跳表优劣: 跳表:在普通链表中,给一些节点增加额外的指针,使得这些节点能够一次跨越更多的中间节点,提高了效率。 优点:相比普通链表,由于跳跃的特性,可以节省便利次数,时间复杂度上 ...
分类:
其他好文 时间:
2018-11-14 19:16:15
阅读次数:
833
Java中的数组在内存中的图解,其实对于数组,还是比较熟悉的,平时用的也是很多的,在看数据结构与算法的极客时间专栏,最常用的10个数据结构:数组、链表、栈、队列、散列表、二叉树、堆、跳表、图、Trie树,其中数组是最基础,也是学起来最简单的一种数据结构,数组是一种线性表数据结构。它用一组连续的内存空 ...
分类:
编程语言 时间:
2018-10-31 23:31:16
阅读次数:
406
之前我们知道,二分查找依赖数组的随机访问,所以只能用数组来实现。如果数据存储在链表中,就真的没法用二分查找了吗?而实际上,我们只需要对链表稍加改造,就可以实现类似“二分”的查找算法,这种改造之后的数据结构叫作 跳表(Skip List) 。 1. 何为跳表? 对于一个单链表,即使链表是有序的,如果我 ...
分类:
编程语言 时间:
2018-10-29 14:46:16
阅读次数:
348
MemTable(db/memtable.h db/memtable.cc db/skiplist.h) LevelDB中存储在内存中的那部分KV数据都存储在memtable中,而memtable中的数据实际是用跳表来存储的。MemTable使用Arena进行内存管理,并提供了添加、查找、迭代器的接 ...
分类:
数据库 时间:
2018-08-05 19:35:58
阅读次数:
154
Skip list(跳表)是一种可以代替平衡树的数据结构,默认是按照Key值升序的。Skip list让已排序的数据分布在多层链表中,以0 1随机数决定一个数据的向上攀升与否,通过“空间来换取时间”的一个算法,在每个节点中增加了向前的指 针,在插入、删除、查找时可以忽略一些不可能涉及到的结点,从而提 ...
分类:
编程语言 时间:
2018-06-14 01:08:53
阅读次数:
181
跳表(SkipList)是一种随机化的数据结构,目前在redis和leveldb中都有用到它,它的效率和红黑树以及 AVL 树不相上下,但跳表的原理相当简单,只要你能熟练操作链表, 就能轻松实现一个 SkipList。 考虑一个有序表: 从该有序表中搜索元素 ,需要比较的次数 ...
分类:
其他好文 时间:
2018-06-06 23:53:22
阅读次数:
212
跳表 跳表是一个包含n个元素的单链表,且满足以下条件: (1)在单链表的结点中,每隔2i个元素,就增加一个i级指针,0≤i≤?log2n?; (2)其头节点为Head,是一个大小为?log2n?的一维指针数组,里面只存放指向i级的第一个级指针,0≤i≤?log2n?,不存放实际数据元素,它和同i级的 ...
分类:
其他好文 时间:
2018-06-04 14:27:24
阅读次数:
133