快速选择至少具有与主数组共同的k个元素的数组

时间:2014-12-24 17:50:25

标签: arrays performance algorithm data-structures

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

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

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

注意:

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

2 个答案:

答案 0 :(得分:0)

使用倒置索引

搜索引擎用于查找查询匹配的内容。

答案 1 :(得分:0)

如果数据库已修复,则可以构建包含项和数组的表。所以如果你有两个数组:

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有点生疏了。 。