时间复杂度:
zrank:O(logn)
zscore:O(1)
熟知的zset底层结构为跳表,跳表是以score进行排序的,那么是怎么做到zrank的时间复杂度为O(logn)呢?我们并不知道这个元素的分数,自然也就没办法利用跳表的顺序属性。
原因是zset底层不单单是跳表,同时还有字典的实现,也就是hash表,我们可以通过元素在O(1)的时间内找到元素的分数,进而去跳表中找到对应元素的排名。
而且虽然维护了两个数据结构,但是两者引用的都是同一块内存地址,所以并没有额外的空间开销。
时间复杂度:
zrank:O(logn)
zscore:O(1)
熟知的zset底层结构为跳表,跳表是以score进行排序的,那么是怎么做到zrank的时间复杂度为O(logn)呢?我们并不知道这个元素的分数,自然也就没办法利用跳表的顺序属性。
原因是zset底层不单单是跳表,同时还有字典的实现,也就是hash表,我们可以通过元素在O(1)的时间内找到元素的分数,进而去跳表中找到对应元素的排名。
而且虽然维护了两个数据结构,但是两者引用的都是同一块内存地址,所以并没有额外的空间开销。