Home > php教程 > php手册 > PHP全排列算法实现程序代码

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

WBOY
Release: 2016-06-13 09:17:08
Original
1004 people have browsed it

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."排列";
?>

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Recommendations
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template