PHP全排列算法实现程序代码
来源: 阅读:1574 次 日期:2015-01-15 14:11:16
温馨提示: 小编为您整理了“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)邻位对换法

实现全排列算法

代码如下

<?php

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."<br/>";

$i++;

}

}

return $i;

}

$a=array('A','B','C','D');

$b=array();

$range=wholerange($a,$b,$a);

$count=recursionarray($range);

echo "总共有".$count."排列";

?>

更多信息请查看IT技术专栏

更多信息请查看网络编程
由于各方面情况的不断调整与变化, 提供的所有考试信息和咨询回复仅供参考,敬请考生以权威部门公布的正式信息和咨询为准!

2025国考·省考课程试听报名

  • 报班类型
  • 姓名
  • 手机号
  • 验证码
关于我们 | 联系我们 | 人才招聘 | 网站声明 | 网站帮助 | 非正式的简要咨询 | 简要咨询须知 | 加入群交流 | 手机站点 | 投诉建议
工业和信息化部备案号:滇ICP备2023014141号-1 云南省教育厅备案号:云教ICP备0901021 滇公网安备53010202001879号 人力资源服务许可证:(云)人服证字(2023)第0102001523号
云南网警备案专用图标
联系电话:0871-65317125(9:00—18:00) 获取招聘考试信息及咨询关注公众号:
咨询QQ:526150442(9:00—18:00)版权所有:
云南网警报警专用图标
Baidu
map