【发布时间】:2021-03-31 17:03:26
【问题描述】:
我正在尝试创建一个函数,该函数采用子集列表,如果所有组合都存在,则将它们合并为更大的集合。
基本上,假设我们有 n=4(即 index_domain = {0,1,2,3}),我们有以下组合作为输入
[(0, 2), (0, 3), (1, 3), (2, 3)]
该函数应接受此输入并生成以下输出:
[(0, 2, 3), (1, 3)]
所以,(0, 2, 3) 因为所有组合(2 的组合)都存在于输入列表中。 (1, 3) 保持原样,因为我们没有其他 1 的组合。
对于一个索引域D⊆ℕ和输入列表L,该案例的主要特征是:
- L 可以是一个空列表。 (离题)
- L 总是包含 2 的组合,即对,如果不为空的话。
- 这些对是对称的,并且只有一对包含在 L 中(没有重复)。也就是说,如果一对 (i, j) 应该包含在 L 中,则对 (i, j) 存在于 L 中并且 (j, i) 永远不会包含,其中 i
- 在 L, i ∈ D 中从来没有一对 (i, i)。
简单来说就是组合(n, 2) 的逆向。我已经搜索了“反向组合”这个主题,但到目前为止我还没有找到合适的资源。我已经考虑过一些选项,例如输入的双重迭代以检查是否所有组合都存在,但这不是最好的方法。我还没有想出一个有效的解决方案。感谢任何关于有效解决方案的想法。
谢谢。
【问题讨论】:
-
这里
n的范围是多少? -
@AbhinavMathur 好吧,在我的情况下,n 上限为 100(最大),但通常为 n~20。
标签: python python-3.x algorithm combinations graph-theory