草庐IT

redis - 为什么 zpopmin 的时间复杂度是 log n?

来自redis文档:ZPOPMIN键[计数]从5.0.0开始可用。时间复杂度:O(log(N)*M),其中N是已排序集合中的元素数,M是弹出的元素数。删除并返回count个存储在键中的排序集中得分最低的成员。所以,我的问题是,如果列表已排序,为什么它采用logn,为什么不是O(1)? 最佳答案 Ifthelistissorted,whyit'stakelogn,whynotO(1)?如果排序集是用列表实现的,您实际上可以在每个元素的O(1)时间内完成此操作。但是,排序集是implemented(部分)与skiplist数据结构,在O

data-structures - 如果Redis Sorted Set是用Skip List实现的,为什么ZPOPMIN的时间复杂度是O(log n)?

我已经阅读了thisquestion这不是我要找的。据我所知,删除包含n元素的SkipList中的前m元素需要O(m)或者我们可以说O(1)如果m不重要。但是为什么Redis中的ZPOPMIN需要O(logn)呢? 最佳答案 我不知道Redis的确切实现。但是,如果排序集是使用SkipList实现的,则删除操作将花费O(logn)。根据对跳跃列表构建方式的观察,我想您可能明白了。这不是使用简单的单个数组实现的,该数组将花费O(m)时间来删除第一个m元素。相反,它使用多个数组(将其视为一个链表)并巧妙地存储值以支持在O(logn)时间

data-structures - 如果Redis Sorted Set是用Skip List实现的,为什么ZPOPMIN的时间复杂度是O(log n)?

我已经阅读了thisquestion这不是我要找的。据我所知,删除包含n元素的SkipList中的前m元素需要O(m)或者我们可以说O(1)如果m不重要。但是为什么Redis中的ZPOPMIN需要O(logn)呢? 最佳答案 我不知道Redis的确切实现。但是,如果排序集是使用SkipList实现的,则删除操作将花费O(logn)。根据对跳跃列表构建方式的观察,我想您可能明白了。这不是使用简单的单个数组实现的,该数组将花费O(m)时间来删除第一个m元素。相反,它使用多个数组(将其视为一个链表)并巧妙地存储值以支持在O(logn)时间