前言:搞算法,做數學,求和的時候往往會遇到平方求和,立方求和。但是求和的公式並不是那么好背,網上搜一搜都是千篇一律的三次方差,四次方差相減求和相消,一堆數字看着人頭皮發麻。。。
而用組合數就靈活得多~
證明1(平方求和): $\sum_{i = 1}^{n}\left(i^{2}\right)=\sum_{i=1}^{n}\left[i\times (i-1)+i\right]$
$=2\sum_{i=1}^{n}\left[\frac{i\times(i-1)}{1\times 2}\right] + \sum_{i=1}^{n}i$
$=2\sum_{i=2}^{n}C_{i}^{2} + \sum_{i=1}^{n}i$ (這里的組合數求和方法高中至少學過四種)
$=2\times C_{n+1}^{3}+ \frac{n \times (n+1)}{2}$
$=\frac{n\times(n+1)\times(2n+1)}{6}$
證明2(立方求和)(方法同上類似): $\sum_{i=1}^{n}i^{3}=\sum_{i=1}^{n}\left[i^{2}\times (i+1) - i^{2}\right]$
$=\sum_{i=1}^{n}\left[ i\times(i+1)\times(i-1+1) - i^{2}\right]$
$=\sum_{i=1}^{n}\left[ (i-1)\times i\times(i+1) +i\times(i+1)- i^{2}\right]$
$=6\times\sum_{i=2}^{n}C_{i+1}^{3}+2\times\sum_{i=1}^{n}C_{i+1}^{2}-\sum_{i=1}^{n}i^{2}$ (這里就用到了證明1的平方求和結論)
$=6\times C_{n+2}^{4} + 2 \times C_{n+2}^{3}-\frac{n\times(n+1)\times(2n+1)}{6}$
$=\frac{(n+2)\times(n+1)\times n\times(n-1)}{4}+\frac{(n+2)\times (n+1)\times n}{3} -\frac{n\times (n+1)\times (2n+1)}{6}$
$=\left[\frac{n\times(n+1)}{2}\right]^{2}$
總結: 很巧妙,本來無從下手的式子,化成組合數的形式再求和就變得迎刃而解。
而究其組合數的本質,這個東西說白了不就是由加減乘除這些基本的運算組成的嗎,但是“組合”起來就有了它自己的性質。
這和OOP的思想有異曲同工之妙,或許為我們以后解決問題提供了更高一階的角度。