【问题标题】:Quickly select arrays which have at least k elements common with master array快速选择至少具有与主数组共有的 k 个元素的数组
【发布时间】:2015-02-22 18:56:52
【问题描述】:

我有 N 唯一元素,从 0 开始索引,以及使用这些元素创建的数组数据库。数据库是不变的,不会改变。给出了一个查询数组,每次调用都不同。

我必须选择与查询数组至少有K 元素(例如一半)的数据库数组。

我想到的一个解决方案:有一个长度为N的位数组,设置与查询堆栈元素相对应的位,然后遍历整个数据库一次,过滤出具有K的数组。这是相当可扩展的,但有点慢,而且似乎可以使用更快的方法......

注意:

  • 查询数组可以包含存在于任何数据库数组中的元素。
  • 没有数组(数据库或查询)有重复的元素。
  • 可以在 db 数组上进行预处理,以使某些操作更快,如果需要,可以用内存换取速度。

【问题讨论】:

  • 数据库数组中的值是否有范围?
  • @thepace 不,元素不一定是数字。

标签: arrays performance algorithm data-structures


【解决方案1】:

如果数据库是固定的,那么您可以构建一个包含项目和数组的表。所以如果你有两个数组:

A = {1, 7, 9, 12, 15}
B = {7, 12, 15}

你的桌子是:

Item  Array
  1     A
  7     A
  7     B
  9     A
 12     A
 12     B
 15     A
 15     B

这本质上是一个倒排索引。

现在,给定查询数组{1, 5, 7, 12},您可以在数据库中查询所有这些项目。

select * from ItemArrayIndex where Item in (1, 5, 7, 12) order by Array

然后计算每个数组有多少项。

想一想,如果您按 Array 分组,您可能可以从 SQL 查询中获取计数。不过,我的 SQL 有点生疏了。 . .

【讨论】:

    【解决方案2】:

    使用倒排索引

    这是搜索引擎为查找查询匹配项所做的工作。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2017-05-11
      • 2017-04-11
      • 1970-01-01
      • 1970-01-01
      • 2020-12-28
      • 2023-04-05
      • 1970-01-01
      相关资源
      最近更新 更多