【问题标题】:Efficient way of finding subsets and supersets in a collection of sets在集合中查找子集和超集的有效方法
【发布时间】:2015-03-10 18:15:08
【问题描述】:

是否有任何有效的算法或数据结构来查找集合集合上的超集和子集?

例子:

# collection of sets
>>> col = [{1,2,3},{2,3,4},{4,5,6,7}]

>>> subsets_of({1,2,3,4}, col)
[{1,2,3},{2,3,4}]

>>> supersets_of({4}, col)
[{2,3,4},{4,5,6,7}]

【问题讨论】:

    标签: algorithm data-structures set


    【解决方案1】:

    在一般情况下,不,除了蛮力搜索方法。

    但是,根据您拥有的数据类型,可以使用多种技术进行线性时间搜索。例如,如果元素值始终小于 32(或 64),那么您可以创建一个整数,其中包含为存在的值设置的位,然后对它们进行 OR 以确定该集合是否为子集。如果值小于 1 亿左右,您可以创建一个巨大的布尔数组,如果集合包含该值,则每个数组元素为 1,如果不包含该值,则为 0。那么子集查找是线性时间。类似的方法可以在线性时间内解决超集问题。

    【讨论】:

    • 对于大量的位,这些数组通常称为位集。假设您计划在一个整数中存储 32 或 64 个布尔值。
    【解决方案2】:

    您可以为子集创建哈希方法,然后将其存储在 HashMap 中。

    然后你甚至可以在恒定时间内找到它(如果你有足够的内存)。

    【讨论】:

      猜你喜欢
      • 2011-05-03
      • 2014-07-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多