用于确定哪些集合是较大集合的子集的有效搜索算法

时间:2016-11-19 06:02:44

标签: performance search

考虑集合A1A2,...,An的集合。我想确定最有效的算法来查找这些集合中的哪一个是不同集合B的子集。

例如,让算法的输入为:

A1 = [1 2]
A2 = [2 3 4]
A3 = [1 3]
B = [1 2 3]

算法应返回:

output = [1 3] 

由于A1A3B的子集,但A2不是。{/ p>

1 个答案:

答案 0 :(得分:2)

简单的O(N)答案:从两个列表开始排序。选择较短的列表,并为每个条目检查它是否存在于另一侧。你不需要对其他列表进行花哨的搜索,只需保持一个指针并递增,直到我们找到或传递我们的目标号码。

另一方面,你仍然可以加速" O(N)"通过使计算机的每个步骤更简单的操作。例如,如果您只需要计算共有多少个数字,您可以使用bitmask

快速计算出这个数字。

如果要将多个列表与一个特殊列表进行比较,并且大多数数字不相同,则可以创建Bloom Filter。这可以告诉你"数字X不在Y和#34;很快。它无法告诉您数字是否存在 - 您必须手动仔细检查。如果您认为MOST数字是未命中的,那么这是一个速度胜利,只有少数会被命中。