给定一个集合 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 个子集交集集合也产生空集。
背景:我正在处理几个版本的这个问题,有些比其他的要大。在最小的问题中,|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 个子集交集集合也产生空集。
S1 = {{1}, {2,3}}
和S2 = {{}, {1}, {2,3}}
是S
的子集,它们的交集是(S1 & S2) == {{1}, {2,3}}
,即交集的成员本身就是集合,因此交集的集合是集合S
的子集的交集的集合(即S
的成员的交集的集合)。你如何使输出只是一个集合的集合? - jfs