all_combinations 所有组合

all_combinations 所有组合

即所有N个数的k个组合,其总数为 $ C_n^k $

算法

在这个问题中,我们要确定从 $ 1 {\ldots} n $ 中数出k个数的所有可能的组合,
我们用回溯法来解决这个问题。

范例:

$C_n^k = C_4^2 $ 的所有组合是:

\[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4] \]

代码

[all_combinations.py]{..\src\backtracking\all_combinations.py}

"""
Prepare
   1. sys.path 中增加 TheAlgorithms\src 子模块

"""
import sys
sys.path.append('E:\dev\AI\TheAlgorithms\src')

案例一:

$C_n^k = C_4^2 $ 的所有组合是:

\[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4] \]

from backtracking.all_combinations import generate_all_combinations
"""
"""
n,k=4,2     # 设置 n, k 值 ,其中 n>=k

print(generate_all_combinations(n,k)) # 生成 generate_all_combinations 列表

[[1, 2], [1, 3], [1, 4], [2, 3], [2, 4], [3, 4]]

案例二:

$C_n^k = C_6^4 $ 的所有组合是:

\[[[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 3, 6], [1, 2, 4, 5], [1, 2, 4, 6], [1, 2, 5, 6], [1, 3, 4, 5], [1, 3, 4, 6], [1, 3, 5, 6], [1, 4, 5, 6], [2, 3, 4, 5], [2, 3, 4, 6], [2, 3, 5, 6], [2, 4, 5, 6], [3, 4, 5, 6]] \]

其组合的数量应与 $ C_n^{(n-k)} = C_6^{(6-4)} $ 是一致的

\[[[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 3], [2, 4], [2, 5], [2, 6], [3, 4], [3, 5], [3, 6], [4, 5], [4, 6], [5, 6]] \]

from backtracking.all_combinations import generate_all_combinations
"""
"""
n,k=6,4     # 设置 n, k 值 ,其中 n>=k

myList = generate_all_combinations(n,k) # 生成 generate_all_combinations 列表
print(len(myList)) # 显示其数量
print(myList) # 显示明细list
## 验证 C(6,4)=C(6,2)
myList = generate_all_combinations(n,n-k) # 生成 generate_all_combinations 列表
print(len(myList)) # 显示其数量
print(myList) # 显示明细list


15
[[1, 2, 3, 4], [1, 2, 3, 5], [1, 2, 3, 6], [1, 2, 4, 5], [1, 2, 4, 6], [1, 2, 5, 6], [1, 3, 4, 5], [1, 3, 4, 6], [1, 3, 5, 6], [1, 4, 5, 6], [2, 3, 4, 5], [2, 3, 4, 6], [2, 3, 5, 6], [2, 4, 5, 6], [3, 4, 5, 6]]
15
[[1, 2], [1, 3], [1, 4], [1, 5], [1, 6], [2, 3], [2, 4], [2, 5], [2, 6], [3, 4], [3, 5], [3, 6], [4, 5], [4, 6], [5, 6]]
posted @ 2021-05-31 15:27  IT88老兵  阅读(76)  评论(0编辑  收藏  举报