PHP实现排列组合

来源:互联网 发布:网易云课堂for mac版 编辑:程序博客网 时间:2024/05/29 09:22
<?php// 阶乘function factorial($n){    return array_product(range(1,$n));}// 排列数function A($n,$m){    return factorial($n)/factorial($n-$m);}// 组合数function C($n,$m){    return A($n,$m)/factorial($m);}/** * 排列 * @param array $a * 要排列的数构成的数组 * @param int $m * @return array * 返回所有的排列情况 */function arrangement($a, $m) {    $r = array();    $n = count($a);    if ($m <= 0 || $m > $n) {        return $r;    }    for ($i=0; $i<$n; $i++) {        $b = $a;        $t = array_splice($b, $i, 1);        if ($m == 1) {            $r[] = $t;        } else {            $c = arrangement($b, $m-1);            foreach ($c as $v) {                $r[] = array_merge($t, $v);            }        }    }    return $r;}/** * 组合 * @param array $a * 要组合的数构成的数组 * @param int $m * @return array * 返回所有的组合情况 */function combination($a, $m) {    $r = array();    $n = count($a);    if ($m <= 0 || $m > $n) {        return $r;    }    for ($i=0; $i<$n; $i++) {        $t = array($a[$i]);        if ($m == 1) {            $r[] = $t;        } else {            $b = array_slice($a, $i+1);            $c = combination($b, $m-1);            foreach ($c as $v) {                $r[] = array_merge($t, $v);            }        }    }    return $r;}
原创粉丝点击