0%

Python itertools模拟排列组合

公式回顾

高中所学的排列组合,我们用程序来模拟一下。

如果是从 n 个元素中取出 n 个元素进行排列,那一共有 n! 种排法。

因为,有 n 个元素,放入 n 个盒子里,第1个盒子有 n 种取法,第2个盒子有 n - 1 种取法,第 n 个盒子有 1 种取法,根据分步算法,n (n - 1) (n - 2) 1 = n! 。

那如果是 n 个元素,任取 m 个排列,那同理能得出如下公式。

$ P_n^m=\frac{n!}{(n-m)!} $

如果是组合,我们把 m 个元素的阶乘除掉即可。

$ C_n^m=\frac{n!}{(n-m)!m!} $

同时,排列组合还有如下两个重要公式:

$ P_{n+1}^m=P_n^m+mP_n^{m-1} $

$ C_{n+1}^m=C_n^m+C_n^{m-1} $

排列

1
2
3
4
5
6
7
8
9
10
11
12
import itertools
list = range(3)
p = itertools.permutations(list, 2)
for i in p:
print(i)

(0, 1)
(0, 2)
(1, 0)
(1, 2)
(2, 0)
(2, 1)

组合

1
2
3
4
5
6
7
c = itertools.combinations(list, 2)
for i in c:
print(i)

(0, 1)
(0, 2)
(1, 2)