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

两个或更多排序集的交集

辛盛
2023-03-14
问题内容

我有两个排序集,并且想要进行交集,即。 (age BETWEEN 25, 35) AND (salary BETWEEN 250, 350)

关于效率,是否有比以下更好的方法:

ZUNIONSTORE t_age 1 age WEIGHTS 1
ZREMRANGEBYSCORE t_age -inf (25
ZREMRANGEBYSCORE t_age (35 +inf
ZINTERSTORE result 2 salary t_age WEIGHTS 1 0
ZRANGEBYSCORE result 250 350

问题答案:

您应该先ZSET使用ZCARD检查哪些元素较少,然后克隆并修剪较短的元素。

其次,您将剩下2个剩菜。您可以重复使用同一辅助程序ZSET,以加快清除速度。

我还想建议克隆使用DUMP和RESTORE,但是对于排序集的情况,ZUNIONSTORE实际上要快得多。这是一个100万个元素集的时间安排:

1) 1) (integer) 14
   2) (integer) 1444165498
   3) (integer) 936762
   4) Complexity info: N:1000000,M:1000000
   5) 1) "ZUNIONSTORE"
      2) "temp3"
      3) "1"
      4) "temp1"
      5) "WEIGHTS"
      6) "1"
2) 1) (integer) 13
   2) (integer) 1444165421
   3) (integer) 3166360
   4)
   5) 1) "evalsha"
      2) "48286113cfe4b389d516e98646e5f4e086decc34"
      3) "2"
      4) "temp1"
      5) "temp2"
      6) "0"


 类似资料:
  • 问题内容: 从这个,我们知道要解决两个排序的数组的交叉方法。那么如何获得多个排序数组的交集呢? 基于两个排序数组的答案,我们可以将其应用于多个数组。这是代码 有更好的解决方法吗? 更新1 从这两个主题1和2看来,这是一种更有效的方法。 更新2 为了提高性能,也许可以使用代替我上面的代码。变量保存所有向量的当前最大值。因此,只需将根值与进行比较,如果它们相同,则可以将此元素放入交集列表。 问题答案:

  • 这是我的密码。我们不允许使用方法或数组,我们只是初学者。我的代码在

  • 问题内容: 在观看苹果公司有关LLDB调试器的视频时,我发现我找不到解释。他在撰写文章时谈论的是可选值: 我打开了一个操场,开始尝试,发现可以写任意数量的文字,然后用相同数量的拆开它们。我了解 包装/解包变量 的概念,但是无法想到要包装4、5或6次值的情况。 问题答案: (已更新为Swift > = 3) “ Double optionals”可能有用,Swift博客条目“ Optionals C

  • 我的集合中有两个数组(一个是嵌入式文档,另一个只是字符串的简单集合)。文档,例如: 由于一些查询将仅包含策略,而一些查询将包含标签和参与者数组,并且考虑到我无法创建具有两个数组的多键索引这一事实,我认为使用索引交叉点将是一个经典场景。 我正在执行一个查询,但我看不到交叉点。 以下是索引: 以下是查询: 这是解释的结果: 查询中的每个标记(tag1、tag-2和tag-3)都有10K个文档。每个策略

  • 问题内容: 我正在使用python进行游戏,并且能够得到两个列表的交集: 现在,如果一个列表包含和并包含第三个元素,是否有一个内置函数来查找内部所有三个列表的交集?例如 那么结果应该是 问题答案: 对于2.4,您只需定义一个交集函数。 对于较新版本的python: 相交方法接受任意数量的参数 或者,您可以将第一个集合与其自身相交,以避免切片列表并进行复制: 我不太确定哪种方法会更有效,并且感觉这将

  • 问题内容: 我试图根据某些条件并执行一些步骤来找到两个列表。在学习阶段找不到方法:) 如您所见,逻辑很简单 根据某个过滤器从订单中获取所有项目,并与另一个过滤器相交并做一些事情。 问题答案: 最简单的方法是这样的: