设置大量集的大小

时间:2013-04-05 04:26:20

标签: algorithm set

我有一个用例,我需要存储大量具有每个条目的唯一设置大小的条目。如果我们将这简化为联系人(问题非常多)。我们会遇到类似的问题:

如果用户知道他们有多少朋友:

乔       - 玛丽,约翰,鲍勃,汤姆

玛丽       - Carol,Suzy,Mike,Fred,Robert

因此friends(Joe) = 4 - 支持的唯一操作是addFriend(Joe, Sam)。虽然Mary可能是Joe的朋友,但不需要存储任何相关信息。

我不想做的是存储每个集合中的所有条目,但是布隆过滤器不太合适。还有其他选择吗?

更新:挑战在于我在顶级套装中拥有20M Joe / Mary / ...每组中有4M半不同成员。快速代码示例如下(为简单起见,python) - 但是在规模+持久存储中,宇宙结束了。

class World:
    def __init__(self):
        self.friends = defaultdict(set)

    def addFriend(self, id, member):
        self.friends[id].add(member)

    def friends(self, id):
        return len(friends[id])

1 个答案:

答案 0 :(得分:1)

由于您正在考虑使用Bloom过滤器,因此听起来好像是近似答案。使用HyperLogLog等小空间基数估算器代替self.friends