計數原理
1 ) 分類相加
做一件事情,完成它有n類辦法,在第一類辦法中有m1種不同方法,第二類有m2種不同方法 … 在第n類辦法中有mn種不同的方法,完成這件事共有 N=m1+m2+m3+...+mn 種不同方法
2 ) 分步相乘
做一件事情,完成它有n個步驟,做第一個步驟有m1種不同方法,第二個步驟有m2種不同方法…做第n個步驟有mn種不同的方法. 那麼完成這件事共有 N=m1∗m2∗...∗mn 種不同的方法
排列
1 )概念
- 排列:從n個不同元素中,任取m(m<=n)個元素按照一定的順序排成一列,叫做從n個不同元素中取出m個元素的一個排列
- 排列數:從n個不同元素中,取出m(m<=n)個元素的所有排列的個數,叫做從n個不同元素中取出m個元素的排列數 Anm
- 排列是有序的
2 ) 公式
- Anm=n(n−1)(n−2)...(n−m+1)
- Anm=(n−m)!n!
- Anm=n!
- 規定 0! = 1
組合
1 )概念
- 組合:從n個不同元素中,任取m(m<=n)個元素併成一組,叫做從n個不同元素中取出m個元素的一個組合
- 組合數:從n個不同元素中,取出m(m<=n)個元素的所有組合的個數,叫做從n個不同元素中取出m個元素的組合數 Cnm
- 組合不考慮順序
2 )公式
- Cnm=m!n(n−1)(n−2)...(n−m+1) 或 Cnm=m!(n−m)!n!
- Cnm=Cnn−m
- 規定 Cn0=1
排列與組合的關係
- Anm=Cnm∗Amm
- 排列就是先組合再全排列
- Cnm=AmmAnm=m(m−1)...2∗1n(n−1)...(n−m+1)=m!(n−m)!n! (m <= n)
- 排列 An+1m=Anm+mAnm−1
- 組合 Cn+1m=Cnm+Cnm−1
使用python來測試排列和組合
import itertools
x = list(range(7))
print(x)
a = itertools.permutations(x, 3)
b = itertools.combinations(x, 3)
print(len(list(a)))
print(len(list(b)))