当前位置: 首页 > 面试题库 >

Redis:当插入的元素位于开头或结尾时,ZADD是否优于O(logN)?

韩彦君
2023-03-14
问题内容

ZADD 的redis 文档指出操作为O(log N )。

但是,有人知道插入的元素位于排序顺序的开头还是结尾时,ZADD是否比O(log N )好?

例如,对于某些实现,这可能是O(1)。

具体来说,redis 教程指出:

排序集是通过包含跳过列表和哈希表的双端口数据结构实现的,因此,每次添加元素时,Redis都会执行O(log( N ))操作。

修改跳转列表以支持O( k )在开头和结尾处插入似乎是合理的,其中 k 是跳转列表的最大级别。


问题答案:

我已经在Redis网站上交叉发布了这个问题,Pieter Noordhuis在此处提供了答案,我在这里交叉发布:

那是正确的。排序集依靠RNG来确定每个节点的级别数(这是一个概率数据结构)。在跳过列表的开头插入/删除元素可以是O(1),而理论上最坏的情况是O(N)(每个节点的级别相同)。但是,当您考虑节点之间的级别分布时,摊销时间复杂度为O(log
N)。



 类似资料:
  • 考虑以下代码来计算每个单词中字母“a”的出现次数: 这将导致这样的事情: 我试图做更多的事情: 计算每个单词中的元音总数 合计编号每个单词中的字母数 一个单词是否以元音开头,则 1 否则 0 单词是否以元音结尾,则 1 否则 0 问题是,如果我使用nchar(data$string),它也计算点'.'此外,我无法找到以上4个要求的帮助。 最终数据我想看起来像这样:

  • 本文向大家介绍当ID的名称的开头保持一致且HTML的结尾不同时,将CSS样式应用于ID元素,包括了当ID的名称的开头保持一致且HTML的结尾不同时,将CSS样式应用于ID元素的使用技巧和注意事项,需要的朋友参考一下 可以使用div和'id = post'选择帖子。这将选择所有id包含引号的div元素。 我们可以使用- div [id * ='post-'] {...}将选择所有id都为引号的div

  • 问题内容: startsWith(‘abc’, ‘a’) [1] TRUE > startsWith(‘abc’, ‘c’) [1] FALSE 问题答案: 不是那种内在的。 选项包括和。

  • 如何实现以下函数都在O(log N)中的数据结构? 插入(x)-将整数添加到集合 成员(x)-检查集合是否包含整数x 删除(x)-从集合中删除整数x deleteLessThan(x)删除所有等于或小于k的数字 我唯一能想到的就是使用某种平衡的BST来获取插入、成员和删除的O(logn)。 deleteLessthan()函数看起来像这样:找到大于k的最小元素,删除它的左子树,然后重新平衡。但是,

  • 问题内容: 在尚未设置商品时,使用和无法返回。 但是,确实可行。事实证明,这也是可行的。 一位评论基本上说,并应始终优先考虑: getter和setter提供了一致,标准化和跨浏览器兼容的方式来使用LS api,并且始终应优先于其他方式。 我喜欢对localStorage使用速记点和方括号表示法,但是我很好奇知道其他人对此的看法。localStorage.getItem(’item’)是否比loc

  • 更新:这里的问题是本机MongoDB驱动程序需要与Mongoose不同格式的objectID。我需要做的不是{_id:story_id},而是{_id:new mongoose.types.objectid(story_id)}。它只返回这两个字段的原因是它正在创建一个带有{_id:story_id}的新文档,而不是更新{_id:{$oid:story_id}}的文档。然而,我最初使用本地驱动程序