【发布时间】:2013-03-26 02:10:29
【问题描述】:
给定一个集合 S = {si : {zj : z ∈ N} },什么是计算 S 的子集的唯一交集的高效算法?
作为背景,我正在处理这个问题的几个版本,有些版本比其他版本大。在最小的一个|S| ≈ 1,000, |si| ≈ 10,000,值是邮政编码。
为了清晰起见的小例子:
输入:S = {{},{1},{2,3},{3,4,5,6,7,8,9,10}} 输出:{{},{1},{2,3},{3,4,5,6,7,8,9,10},{3}}|S| = 4 并且有 24 = 16 个 S 的子集。 但是,只有五组独特的子集交集。前四个是 S 本身的成员。第五个是{3}。空集已经是 S 的成员。所有其他 10 个子集交集也产生空集。
【问题讨论】:
-
我想你要找的只是一个简单的集合交集算法,看看[线性交集算法] (stackoverflow.com/questions/4642172/…)
-
@amas S 有 2^n 个子集,S 有 1000 多个元素。 O(n) 交集算法没有帮助。交叉路口不是 IMO 的问题,它决定了哪些交叉路口不要做。
-
抱歉 4,也许我没有理解这个问题。你能提供更多细节吗?
-
@amas 我不确定您还需要什么其他详细信息。如果你把所有 2^|S| S 的子集并与它们相交,2^|S| 中的唯一集将非常少结果。我正在寻找那些独特的套装。
-
你如何定义
subset和intersection?例如,S1 = {{1}, {2,3}}和S2 = {{}, {1}, {2,3}}是S的子集,它们的交集是(S1 & S2) == {{1}, {2,3}}即,交集的成员本身就是集合,因此一组交集是一组集合(交集)的集合(S)。你如何让输出只是一组集合?
标签: performance algorithm set intersection discrete-mathematics