找到一个集合中的元素而不是另一个集合的最佳方法

时间:2014-09-13 15:20:28

标签: algorithm

我有两个系列。一个具有id和content的项目列表,让我们调用此列表ItemList。我有另一个集合,告诉我用户是否选择了一个项目。调用此列表收集它将具有用户ID和项ID。用户和项目的数量都非常大。从ItemList查询不在列表Collected中的用户的项目的最佳方法是什么。

以下是我的一些想法:

  1. 使用关系数据库的连接来解决此问题。我唯一的查询就是处理非常大的数据集。
  2. 使用blooms过滤器存储收集的项目列表,并在查询项目时检查它是否不在过滤器中。
  3. 如果上述想法无法扩展,你能否为我提供算法。这些不能是内存中的解决方案,因为我肯定需要保留数据。

1 个答案:

答案 0 :(得分:1)

您也可以使用位集。

Load into some bitset ItemList (ItemID is index in the bitset).
Load into another bitset IDs_for_user for this user.
Perform opearation: Resut = ItemList ANDNOT IDs_for_user. 

您可以在这里获得免费的bitset库: http://bmagic.sourceforge.net/