10.2計數與概率基礎

排列與組合是最基本的計數技巧。本節介紹一些基本的相關知識和方法

加法原理。做一件事有n個辦法,第i個辦法有pi種方案

乘法原理。做一件事情有n個步驟

容斥原理。(概率論求和的公示)


有重複元素的全排列。有k個元素,其中有k個元素,其中第i個元素有ni個,求全排列個數

分析:

令所有ni之和爲n,再設答案爲x,首先做全排列,然後把所有元素編號,其中第S種元素的編號爲1~ns。這樣由於編號後所有元素均不同,方案總數爲n的全排列數爲n!.根據懲罰原理得到一個方程:n1! n2!......nk! x!=n!,後移項即可


可重複選擇的組合。有n個不同元素,每個元素可以選多次,一次選k個元素,有多少種方法?

分析:

設第i個元素選xi個,問題轉化爲求方程x1+x2+...+xn=k的非負整數解的個數,令yi=xi+1,則答案爲y1+y2...+yn=k+n的正整數的個數

C(k+n-1,n-1)=C(n+k-1,k)

10.2.1楊輝三角與二項式定理

給定n,如何求出(a+b)^n中所有項的係數呢?一個方法是用遞推,根據楊輝三角中不難發現規律

memset(C,0,sizeof C);
for(int i=0;i<=n;i++){
    C[i][0]=1;
    for(int j=1;j<=i;j++)
        C[i][j]=C[i-1][j-1]+C[i-1][j];
}
時間複雜度爲n*n

另一個方法是利用等式。。從左到右遞推

C[0]=1;

for(int i=1;i<n;i++) C[i]=C[i-1]*(n-i+1)/i;

注意,應該先乘後除,避免非整數溢出

10.2.2數論中的計數問題

問題!小於n且與n互素的整數個數。

。。。。。。

10.2.3編碼與解碼

兩個a,一個b和一個c組成的所有串可以按照字典序編號爲:

aabc(1),aacb(2),,,,,,,cbaa(12)

任給一個字符串,能否方便地求出他的編號?

10.2.4離散概率初步

關於概率有一套很深的理論,不過很多和概率相關的問題並不需要特別的知識,熟悉排列組合就夠了

注意double型的溢出,可以變成邊除,以及全概率公式的應用

發佈了38 篇原創文章 · 獲贊 2 · 訪問量 8042
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章