php怎么自动加数字排序,PHP-求php算法,任意多个数字唯一性全排序算法

我也写了一个,完全实现了n个不同元素中取出m个元素的组合:

我的实现方法如下:

举例 从 5 个不同的元素中取 2 个元素组合 ,首先构造一个 长度一样的数组,用 1 表示当前的组合:

/*

1 1 0 0 0 //默认组合,=> 12

1 0 1 0 0 //将元素中最后一个 1 与 后边第一个 0 交互位置, => 13

1 0 0 1 0 //同上 => 14

1 0 0 0 1 //同上 => 15

0 1 1 0 0 //当最后一个1后边没有出现0,则选取前一个出现的1(右->左)并且后边元素是0,以此类推,找到后,并将其后边出现过的的所有1移动到这个元素之后 => 23

0 1 0 1 0 //同第2步 => 24

0 1 0 0 1 //同上 => 25

0 0 1 1 0 //同第5歩 => 35

0 0 1 0 1 // => 35

0 0 0 1 1 // => 45

*/

直到没有满足条件的数为止,所以以上组合有:12,13,14,15,24,25,35,45

function combination($arr,$num) {

$len = count($arr);

$by = array_merge(array_pad(array(),$num,1),array_pad(array(),$len-$num,0));

$ret = array();

while(1) {

$p = true;

$tmp = '';

for($i=0;$i

if($by[$i] == 1) {

$tmp .= $arr[$i];

if(isset($by[$i+1]) && $by[$i+1] == 0) $p = $i;

}

}

$ret[] = $tmp;

if($p === true) break;

list($by[$p],$by[$p+1]) = array($by[$p+1],$by[$p]);

$t = array_slice($by,$p+2);

if(in_array(1,$t)) {

rsort($t);

array_splice($by,$p+2,$len,$t);

}

}

return $ret;

}

//测试

$arr = array(1,2,3,4); //元素可以是任意元素,{a,b,c,d},{1,5,6,7,2}

echo "

";

print_r(combination($arr,3));

没有用递归,while循环的次数为:n!/((n-m)!m!)

对结果数可以通过组合数公式 c(n,m)=p(n,m)/m!=n!/((n-m)!m!) 验证

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值