php全排列算法实现程序代码 从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。
简介
如1,2,3三个元素的全排列为:
1,2,3
1,3,2
2,1,3
2,3,1
3,1,2
3,2,1
共3*2*1=6种 3!
2公式
全排列数f(n)=n!(定义0!=1)
递归算法
1,2,3
1,3,2
2,1,3
2,3,1
3,2,1
3,1,2
这是由于算法只是考虑到了如何输出全排列,而没有考虑到换位是否有问题。所以我提出了解决方案,就是换位函数修改下
如 1 2 3 换位的话 ,不应该直接 3 2 1这样 ,让3和1直接换位; 而是让3排在最前后 ,1 2 依次向后
基本算法
以下介绍全排列算法四种:
(a)字典序法
(b)递增进位制数法
(c)递减进位制数法
(d)邻位对换法
实现全排列算法
代码如下
1){ $d=$b; foreach($a as $value){ $b[]=$value; $c=array_diff($m,$b); if(count($c) > 0){ $range[]=wholerange($c,$b,$m); } $b=$d; } }elseif(count($a) == 1){ foreach($a as $value){ $b[]=$value; } $onerange=; foreach($b as $value){ $onerange.=$value; } $range[]=$onerange; } return $range; } /** * 递归输出数组 * * @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'); $b=array(); $range=wholerange($a,$b,$a); $count=recursionarray($range); echo 总共有.$count.排列; ?>
http://www.bkjia.com/phpjc/941716.htmlwww.bkjia.comtruehttp://www.bkjia.com/phpjc/941716.htmltecharticlephp全排列算法实现程序代码 从n个不同元素中任取m(mn)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当...