組合數公式是指從n個不同元素中,任取m(m≤n)個元素并成一組,叫做從n個不同元素中取出m個元素的一個組合;從n個不同元素中取出m(m≤n)個元素的所有組合的個數,叫做從n個不同元素中取出m個元素的組合數。用符号c(n,m) 表示,下面我們來看用php來實作。
公式
有時候也表示成:
c(n,m)=p(n,m)/m!=n!/((n-m)!*m!)
2性質
c(n,m)=c(n,n-m);
3遞推公式
c(n,m)=c(n-1,m-1) c(n-1,m)
等式左邊表示從n個元素中選取m個元素,而等式右邊表示這一個過程的另一種實作方法:任意選擇n中的某個備選元素為特殊元素,從n中選m個元素可以由此特殊元素的分成兩類情況,即m個被選擇元素包含了特殊元素和m個被選擇元素不包含該特殊元素。
代碼如下 | 複制代碼 |
//實作數學上的組合數算法 header("content-type:text/html;charset=utf-8"); function combine($a,$n,$m,$b,$M){ for($i=$n;$i>=$m;$i--){ $b[$m-1]=$i-1; if($m > 1){ $combine[]=combine($a,$i-1,$m-1,$b,$M); }else{ $onecombine=''; for($j=$M-1;$j>=0;$j--){ $onecombine.=$a[$b[$j]]; } $combine[]=$onecombine; $onecombine=''; } } return $combine; } function recursionarray($arr){ $i=0; foreach($arr as $value){ if(is_array($value)){ $i =recursionarray($value); }else{ echo $value." "; $i ; } } return $i; } $a=array('A','B','C','D','E','F','G','H','I','J'); $b=array(); $combine=combine($a,10,5,$b,5); $count=recursionarray($combine); echo "總共有".$count."組合"; ?> |