如何找到从 k 个子集中选择一个的组合数
How to find number of combinations of choosing one from k subsets
假设我们设置了 S:
S = {1,2,3,4,5,6}
和 S 的 3 个(比如 k)个子集:
S_1 = {1,2,3}
S_2 = {2,3,4,5}
S_3 = {1,3,6}
从每个子集中选择一个元素的案例总数是多少?
同一元素不能从不同的子集中拾取,不考虑顺序。
例如,
S_1 = {2},S_2 = {3},S_3 = {6}
和
S_1' = {3},S_2' = {2},S_3' = {6}
被认为是一样的。并且
S_1' = {3},S_2' = {3},S_3' = {1}
无效,因为 S_1' 和 S_2' 选择了相同的元素。
我该如何表述?
这题类似于数perfect matchings in a bipartite graph的个数。
为了以这种方式建模,构造一个二分图,其中 A = { 1, ..., k },B 是原始集合 S,边来自 x ∈ A 到 y ∈ B 存在当 y 是集合 S_[=20= 的成员时]x.
完美匹配对应于将 A 的每个元素与 B 的不同元素匹配的边的子集;对于每个集合 S_x,此匹配选择一个不同的元素 y ∈ S_x。也就是说,多个不同的匹配项可能与 B 中的相同 k 元素匹配,这意味着由于您的问题中未考虑顺序而导致的多算(即,为了您的目的,哪个无关紧要边从 A 映射到那些 k 元素)。尽管如此,这些问题非常相似,很可能每个问题都可以归结为另一个问题。
根据某种 this answer on math.SE there is no known efficient algorithm for counting perfect matchings, so there is probably no known efficient algorithm for this similar problem, either. That suggests you're unlikely to do much better than a backtracking search。
假设我们设置了 S:
S = {1,2,3,4,5,6}
和 S 的 3 个(比如 k)个子集:
S_1 = {1,2,3}
S_2 = {2,3,4,5}
S_3 = {1,3,6}
从每个子集中选择一个元素的案例总数是多少?
同一元素不能从不同的子集中拾取,不考虑顺序。
例如,
S_1 = {2},S_2 = {3},S_3 = {6}
和
S_1' = {3},S_2' = {2},S_3' = {6}
被认为是一样的。并且
S_1' = {3},S_2' = {3},S_3' = {1}
无效,因为 S_1' 和 S_2' 选择了相同的元素。
我该如何表述?
这题类似于数perfect matchings in a bipartite graph的个数。
为了以这种方式建模,构造一个二分图,其中 A = { 1, ..., k },B 是原始集合 S,边来自 x ∈ A 到 y ∈ B 存在当 y 是集合 S_[=20= 的成员时]x.
完美匹配对应于将 A 的每个元素与 B 的不同元素匹配的边的子集;对于每个集合 S_x,此匹配选择一个不同的元素 y ∈ S_x。也就是说,多个不同的匹配项可能与 B 中的相同 k 元素匹配,这意味着由于您的问题中未考虑顺序而导致的多算(即,为了您的目的,哪个无关紧要边从 A 映射到那些 k 元素)。尽管如此,这些问题非常相似,很可能每个问题都可以归结为另一个问题。
根据某种 this answer on math.SE there is no known efficient algorithm for counting perfect matchings, so there is probably no known efficient algorithm for this similar problem, either. That suggests you're unlikely to do much better than a backtracking search。