> 백엔드 개발 > PHP 튜토리얼 > PHP全排列算法实现程序代码_PHP教程

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

WBOY
풀어 주다: 2016-07-13 10:09:52
원래의
1172명이 탐색했습니다.

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

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/941716.htmlTechArticlePHP全排列算法实现程序代码 从n个不同元素中任取m(mn)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当...
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿