首页 > PHP教程 > php开发知识文章

php 计算数组的全排列(元素所有组合)的方法

本文实例讲述了php 计算数组的全排列(元素所有组合)的方法,欢迎大家的学习。

全排列

从n个不同元素中任取m(m≤n)个元素,按照一定的顺序排列起来,叫做从n个不同元素中取出m个元素的一个排列。当m=n时所有的排列情况叫全排列。

公式:全排列数f(n)=n!(定义0!=1),如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种。

 

php全排列算法

字典序法、递增进位制数法、递减进位制数法、邻位对换法

$source = array('php', 'java', 'js', 'c', 'go','python');
sort($source); //保证初始数组是有序的
$last = count($source) - 1; //$source尾部元素下标
$x = $last;
$count = 1; //组合个数统计
echo implode(',', $source), "<br>"; //输出第一种组合
while (true) {
$y = $x--; //相邻的两个元素
if ($source[$x] < $source[$y]) { //如果前一个元素的值小于后一个元素的值
$z = $last;
while ($source[$x] > $source[$z]) { //从尾部开始,找到第一个大于 $x 元素的值
$z--;
}
/* 交换 $x $z 元素的值 */
list($source[$x], $source[$z]) = array($source[$z], $source[$x]);
/* $y 之后的元素全部逆向排列 */
for ($i = $last; $i > $y; $i--, $y++) {
list($source[$i], $source[$y]) = array($source[$y], $source[$i]);
}
echo implode(',', $source), "<br>"; //输出组合
$x = $last;
$count++;
}
if ($x == 0) { //全部组合完毕
break;
}
}
echo 'Total: ', $count, "\n";

输出:

php 计算数组的全排列(元素所有组合)的方法

以上这篇php 计算数组的全排列(元素所有组合)的方法就是小编分享给大家的全部内容了,希望能给大家一个参考。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。