Skip to content

Instantly share code, notes, and snippets.

@kyoro1
Last active August 10, 2016 02:51
Show Gist options
  • Save kyoro1/feed3ead05ec80056d7e9e602ccdd412 to your computer and use it in GitHub Desktop.
Save kyoro1/feed3ead05ec80056d7e9e602ccdd412 to your computer and use it in GitHub Desktop.
組み合わせの計算をPythonで作ってみる ref: http://qiita.com/kyoro1/items/c9c58496ad3dd798c665
_nC_r=\frac{n!}{r!(n-r)!}
_nC_r=_{n-1}C_{r-1}+_{n-1}C_r
def comb2(n,r):
if n < 0 or r < 0 or n < r:
return 0
elif n == 0 or r == 0:
return 1
return comb2(n-1,r-1)+comb2(n-1,r)
>>> comb1(20,5)
15504.0
>>> comb2(20,5)
15504
>>> import scipy.misc as scm
>>> scm.comb(20, 5)
15504.0
_nC_r=_nC_{r-1}\times\frac{n-r+1}{r}
_nC_r=\frac{n!}{r!(n-r)!}=\frac{n!}{r\times(r-1)!\times(n-r)!}=\frac{n!}{(r-1)!\times(n-r)!}\times\frac{1}{r}\\
_nC_{r-1}=\frac{n!}{(r-1)!\times(n-r+1)\times(n-r)!}=\frac{n!}{(r-1)!\times(n-r)!}\times\frac{1}{n-r+1}
r\times_nC_r=(n-r+1)_nC_{r-1}
_nC_r=_{n-1}C_{r-1}+_{n-1}C_r
\begin{eqnarray}
_nC_r+_nC_{r-1} &=& \frac{n!}{r!(n-r)!}+\frac{n!}{(r-1)!(n-r+1)!}\\
&=& \frac{n!\times\{(n-r+1)+r\}}{r!(n-r+1)!}\\
&=& \frac{n!\times(n+1)}{r!(n-r+1)!}=\frac{(n+1)!}{r!(n+1-r)!}\\
&=& _{n+1}C_r
\end{eqnarray}
_nC_r=_nC_{r-1}\times\frac{n-r+1}{r}
_0C_r=_nC_0=1
def comb1(n, r):
if n == 0 or r == 0: return 1
return comb1(n, r-1) * (n-r+1) / r
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment