AI筆記: 數學基礎之排列與組合

計數原理

1 ) 分類相加

做一件事情,完成它有n類辦法,在第一類辦法中有m1m_1種不同方法,第二類有m2m_2種不同方法 … 在第n類辦法中有mnm_n種不同的方法,完成這件事共有 N=m1+m2+m3+...+mnN = m_1 + m_2 + m_3 + ... + m_n 種不同方法

2 ) 分步相乘

做一件事情,完成它有n個步驟,做第一個步驟有m1m_1種不同方法,第二個步驟有m2m_2種不同方法…做第n個步驟有mnm_n種不同的方法. 那麼完成這件事共有 N=m1m2...mnN = m_1 * m_2 * ... * m_n 種不同的方法

排列

1 )概念

  • 排列:從n個不同元素中,任取m(m<=n)個元素按照一定的順序排成一列,叫做從n個不同元素中取出m個元素的一個排列
  • 排列數:從n個不同元素中,取出m(m<=n)個元素的所有排列的個數,叫做從n個不同元素中取出m個元素的排列數 AnmA_n^m
  • 排列是有序的

2 ) 公式

  • Anm=n(n1)(n2)...(nm+1)A_n^m = n(n-1)(n-2)...(n-m+1)
  • Anm=n!(nm)!A_n^m = \frac{n!}{(n-m)!}
  • Anm=n!A_n^m = n!
  • 規定 0! = 1

組合

1 )概念

  • 組合:從n個不同元素中,任取m(m<=n)個元素併成一組,叫做從n個不同元素中取出m個元素的一個組合
  • 組合數:從n個不同元素中,取出m(m<=n)個元素的所有組合的個數,叫做從n個不同元素中取出m個元素的組合數 CnmC_n^m
  • 組合不考慮順序

2 )公式

  • Cnm=n(n1)(n2)...(nm+1)m!C_n^m = \frac{n(n-1)(n-2)...(n-m+1)}{m!}Cnm=n!m!(nm)!C_n^m = \frac{n!}{m!(n-m)!}
  • Cnm=CnnmC_n^m = C_n^{n-m}
  • 規定 Cn0=1C_n^0 = 1

排列與組合的關係

  • Anm=CnmAmmA_n^m = C_n^m * A_m^m
  • 排列就是先組合再全排列
  • Cnm=AnmAmm=n(n1)...(nm+1)m(m1)...21=n!m!(nm)!C_n^m = \frac{A_n^m}{A_m^m} = \frac{n(n-1)...(n-m+1)}{m(m-1)...2*1} = \frac{n!}{m!(n-m)!} (m <= n)
  • 排列 An+1m=Anm+mAnm1A_{n+1}^m = A_n^m + mA_n^{m-1}
  • 組合 Cn+1m=Cnm+Cnm1C_{n+1}^m = C_n^m + C_n^{m-1}

使用python來測試排列和組合

import itertools

x = list(range(7))
print(x) # [0, 1, 2, 3, 4, 5, 6]

a = itertools.permutations(x, 3)# 測試排列
b = itertools.combinations(x, 3) # 測試組合

print(len(list(a))) # 210
print(len(list(b))) # 35
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章