組合數c(n,m)在組合數學中占有重要地位。與組合數相關的最重要的兩個內容是楊輝三角和二項式定理。
如圖:另一方面,把(a+b)^n展開,將得到乙個關於x的多項式:
(a+b)^0 = 1
(a+b)^1 = a + b
(a+b)^2 = a^2 + 2ab + b^2
(a+b)^3 = a^3 + 3a^2b + 3ab^2 + b^3
(a+b)^4 = a^4 + 4a^3b + 6a^2b^2 + 4ab^3 + b^4
係數正好與楊輝三角一致。一般得,有二項式定理:
其中這不難理解,(a+b)^2是n個括號連乘,每個括號裡任選一項乘起來都會對最後的結果有乙個貢獻。如果選了k個a,就一定會選n-k個b。最後的項自然就是
給定n,如何求出(a+b)^n中所有項的係數呢?乙個方法是用遞推,根據楊輝三角中不難發現的規律,可以寫出以下的**:
void binomial(int n)
}
但遺憾的是,這個演算法的時間複雜度是o(n^2)-儘管只用了楊輝三角的第n行的n+1個元素,卻把全部n行的o(n^2)個元素都計算了一遍。
另乙個方法是利用等式c(n,k)=n-k+1/k * c(n,k-1),從c(n,0)=1開始從左到右遞推。
void binomial2(int n)
注意,應該先乘後除,因為c[i-1]/i 可能不是整數。但這樣一來增加了溢位的可能性-即使最後結果在int 或 long long 範圍會內,乘法也可能溢位。如果擔心這樣的情況出現,可以先約分,不過一般來說是不必要的。 二項式定理與楊輝三角
問題 求 a b n中各項的係數。方法一 利用楊輝三角 11 1 1 2 1 1 3 3 1 1 4 6 4 1 1 5 10 10 5 1 1 6 15 20 15 6 1 a b 1 a b a b 2 a 2 2ab b 2 a b 3 a 3 3b a 2 3a b 2 b 3 兩者對比可以...
二項式定理與楊輝三角
a b 2 a2 2ab b2 a b 3 a3 3a2b 3ab2 b3 a b 4 a4 4a3b 6a2b2 6ab3 b4 a b 5 a5 5a4b 10a3b2 10a2b3 5ab4 b5 a b 6 a6 6a5b 15a4b2 20a3b3 15a2b4 6ab5 a6 a b n...
走格仔問題(補充 楊輝三角與二項式)
這篇是對前一篇 鏈結 的補充 關於走格仔問題,簡化一點即 兩維座標系中,僅能一次沿x或y走一步,從原點走到 x,y 的最短路徑數 看到一篇對這個問題解讀比較清楚的文章 鏈結 最後的遞迴思路我在前一篇文章中也有描述,不再贅述。從前一篇文章已經知道,可以用遞迴思路求解,求解的結果矩陣就是乙個楊輝三角,問...