首页 > 编程知识 正文

php排列组合算法(php实现全排列,PHP全排列算法实现程序代码)

时间:2023-05-03 23:59:08 阅读:121151 作者:806

PHP全数组算法实现程序代码

从n个不同元素中任意提取m(yyddx )个元素,按一定顺序排列,就是从n个不同元素中提取出m个元素的一个序列。 当m=n时,所有的排列情况称为全排列。

个人资料

例如,1、2、3三种元素的全部排列如下。

1,2,3

一,三,二

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

一,三,二

2,1,3

2,3,1

3,2,1

3,1,2

这是因为算法只考虑了如何输出全部数组,而没有考虑置换是否有问题。 所以我提出了解决方案。 是变换函数的修正

1 )不要直接取代3和1,例如2 )3)2) 1。 3列排在最前后,1、2列排在最后

基本算法

以下介绍全排列算法4种:

(a )词典序法

(b )升序位数法

(c )递减位数法

(d )邻居调换法

实现全数组算法

代码如下

header (内容类型:文本/html; charset=utf-8 '; //*

* @param array $a排列的要素集合动态变化

* @param array $b保存当前数组

* @param array $M排列的要素的集合相当于常数,总是最先排列的要素的集合

*/

functionwholerange($a、$b、$M ) {

$range=array (;

if (计数) $a )1) {

$d=$b;

Foreach($aas$value ) {

$b[]=$value;

$c=array_diff($m,$b );

if (计数) $c )0) {

$range[]=wholerange($c、$b、$M );

}

$b=$d;

}

} else if (计数($ a )==1) )。

Foreach($aas$value ) {

$b[]=$value;

}

$onerange=' ';

Foreach($bas$value ) {

$onerange.=$value;

}

$range[]=$onerange;

}

返回$范围;

}

//*

*递归输出数组

*

* @param array $arr输出的数组

* @return int是数组元素的数量*/

functionrecursionarray($arr ) {

$i=0;

Foreach($arras$value ) {

if(is_Array($value ) ) }{

$ I=恢复阵列($ value );

}else{

echo $value.'

';

$i;

}

}

返回$ I;

}

$a=array('a '、' b '、' c '、' d ' );

$b=array (;

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

$count=recursionarray($range );

echo '共有'.$count.'序列';

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。