PHP中简单实现数学组合算法
发布:smiling 来源: PHP粉丝网 添加日期:2015-04-08 16:05:27 浏览: 评论:0
组合数公式是指从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!)
二、性质
c(n,m)=c(n,n-m);
三、递推公式
c(n,m)=c(n-1,m-1)+c(n-1,m)
等式左边表示从n个元素中选取m个元素,而等式右边表示这一个过程的另一种实现方法:任意选择n中的某个备选元素为特殊元素,从n中选m个元素可以由此特殊元素的分成两类情况,即m个被选择元素包含了特殊元素和m个被选择元素不包含该特殊元素,代码如下:
- <?php
- //实现数学上的组合数算法
- 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."<br/>";
- $i++;
- } //开源软件:phpfensi.com
- }
- 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."组合";
- ?>
Tags: PHP组合算法 PHP数学算法
- 上一篇:PHP全排列算法实现程序代码
- 下一篇:php远程读取json的方法分析
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)