我目前正在实施一种算法,其中一个特定步骤要求我以下列方式计算子集。
想象一下,我有一组(可能是数百万个)整数。每个集合可能包含大约 1000 个元素:
Set1: [1, 3, 7]
Set2: [1, 5, 8, 10]
Set3: [1, 3, 11, 14, 15]
...,
Set1000000: [1, 7, 10, 19]
想象一个特定的输入集:
InputSet: [1, 7]
我现在想快速计算这个 InputSet 是哪个子集。在这种特殊情况下,它应该返回 Set1 和 Set1000000。
现在,暴力破解它需要太多时间。我也可以通过 Map/Reduce 进行并行化,但我正在寻找更智能的解决方案。此外,在一定程度上,它应该是内存高效的。我已经通过使用 BloomFilters 来优化计算,以快速消除输入集永远不可能是子集的集。
我错过了什么聪明的技术?
谢谢!