php实现全排列,PHP全排列算法实现程序代码

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)邻位对换法

实现全排列算法

代码如下

header("content-type:text/html;charset=utf-8");/**

* @param array $a 待排列的元素集合,会动态变化

* @param array $b 储存当前排列

* @param array $M 待排列的元素集合,相当于一个常量,始终为初始待排列的元素集合

*/

function wholerange($a,$b,$M){

$range=array();

if(count($a) > 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."排列";

?>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值