【问题标题】:Set sizes for large number of sets大量集合的集合大小
【发布时间】:2013-03-27 09:29:04
【问题描述】:

我有一个用例,我需要存储大量具有唯一集合大小的条目。如果我们将其简化为联系人(问题不是很大)。我们会遇到这样的问题:

假设用户知道他们有多少朋友:

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

玛丽 - 卡罗尔、苏西、迈克、弗雷德、罗伯特

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

我宁愿不做的是将所有条目存储在每个集合中,但是布隆过滤器感觉不太对劲。还有其他选择吗?

更新:挑战在于我在顶级集合中有 2000 万个 Joe/Mary/...,每个集合中有 400 万个半独立成员。下面是快速代码示例(为简单起见,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])

【问题讨论】:

  • 您正在使用哪种编程语言?
  • 几乎所有 - 快速更新。
  • friends(Mary) 的输出是什么?
  • 不是friends(Mary) = 6,因为乔和玛丽是朋友吗?
  • 成员的总规模是多少?是20m还是24m还是80m?即,4m 个成员是随机/唯一值,还是它们都包含在 20m 组标头中?另外,您更喜欢什么,小空间、快速插入还是快速检索?

标签: algorithm set


【解决方案1】:

由于您正在考虑使用 Bloom 过滤器,因此听起来大概的答案是可以的。使用HyperLogLog 之类的小空间基数估计器代替self.friends。

【讨论】:

    猜你喜欢
    • 2011-03-09
    • 1970-01-01
    • 1970-01-01
    • 2013-07-30
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 2010-10-06
    • 2019-07-06
    相关资源
    最近更新 更多