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.'序列';
?