php汉字组合算法,PHP中简单实现数学组合算法

组合数公式是指从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");

/**

* 在数组$a中任意m个元素组合

*

* @param array $a 候选的集合

* @param int $n 候选的集合大小

* @param int $m 组合元素大小

* @param array $b 储存当前组合中的元素,这里储存的是元素键值

* @param int $M 相当一个常量,一直保持不变

* @return */

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;

}

/**

* 递归输出数组

*

* @param array $arr 待输出的数组

* @return int 返回数组元素个数*/

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."组合";

?>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值