PHP全排列算法实现程序代码
发布:smiling 来源: PHP粉丝网 添加日期:2015-04-08 15:48:29 浏览: 评论:0
从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++;//开源软件:phpfensi.com
- }
- }
- return $i;
- }
- $a=array('A','B','C','D');
- $b=array();
- $range=wholerange($a,$b,$a);
- $count=recursionarray($range);
- echo "总共有".$count."排列";
- ?>
Tags: PHP排列算法 PHP算法
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)