PHP头条
热点:

PHP排列组合算法


php排列组合的算法。

<?php

$keyword_list = ['mysql', '数据库', '权限'];

//求2个元素作为一个整体的排列数组
$list = arrangement($keyword_list, 2);
echo '<pre>';
print_r($list);

//求2个元素作为一个整体的排列数组个数
$num = arrangementNum(count($keyword_list), 2);
echo $num . "\n";

//求2个元素作为一个整体的组合数组
$list = combination($keyword_list, 2);
echo '<pre>';
print_r($list);

//求2个元素作为一个整体的组合数组个数
$num = combinationNum(count($keyword_list), 2);
echo $num . "\n";


// 阶乘
function factorial($n) {
    return array_product(range(1, $n));
}

// 排列数
function arrangementNum($n, $m) {
    return factorial($n) / factorial($n - $m);
}

// 组合数
function combinationNum($n, $m) {
    return arrangementNum($n, $m) / factorial($m);
}

// 排列
function arrangement($array, $m) {
    $r = array();

    $n = count($array);
    if ($m <= 0 || $m > $n) {
        return $r;
    }

    for ($i = 0; $i < $n; $i++) {
        $b = $array;
        $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;
}

// 组合
function combination($array, $m) {
    $r = array();

    $n = count($array);
    if ($m <= 0 || $m > $n) {
        return $r;
    }

    for ($i = 0; $i < $n; $i++) {
        $t = array($array[$i]);
        if ($m == 1) {
            $r[] = $t;
        } else {
            $b = array_slice($array, $i + 1);
            $c = combination($b, $m - 1);
            foreach ($c as $v) {
                $r[] = array_merge($t, $v);
            }
        }
    }

    return $r;
}

www.phpzy.comtrue/php/19217.htmlTechArticlePHP排列组合算法 php排列组合的算法。 ?php$keyword_list = ['mysql', '数据库', '权限'];//求2个元素作为一个整体的排列数组$list = arrangement($keyword_list, 2);echo 'pre';print_r($list);//求2个元素作为一个...

相关文章

PHP之友评论

今天推荐