PHP中阶乘的置换 [英] Permutation of factorial in php

查看:86
本文介绍了PHP中阶乘的置换的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

不知道该怎么解释.但是也许下面的例子可以使您理解我的问题所在.

示例:

我有一个包含3个元素的数组.

$elements = array( 'A', 'B', 'C' );

排列为3的3.因此结果为:

A-B-C ; A-C-B ; B-A-C ; B-C-A ; C-A-B; C-B-A

我不希望任何三分之二的排列或三分之一的排列,例如示例中所示的三分之三.因此,如果我在一个数组中有4个元素,则排列为4中的4.依此类推...

(我认为排列的数目是3!= 1 * 2 * 3 = 6个排列,4!= 1 * 2 * 3 * 4 = 24个排列...这就是为什么我称之为阶乘排列的原因.)

如果还有其他与我的问题类似的问答,请让我知道

解决方案

使用递归函数:

function permutations($elements) {
    if(count($elements)<2) return $elements;

    $newperms= array();
    foreach($elements as $key=>$element) {
        $newelements= $elements;
        unset($newelements[$key]);

        $perms= permutations($newelements);
        foreach($perms as $perm) {
            $newperms[]= $element."-".$perm;
        }
    }
    return $newperms;
}

没有测试过,所以仍然可以为您工作;-)

Don't know how to explain. But maybe example below will be make you understandable what my problem is.

Example :

I have an array with 3 elements.

$elements = array( 'A', 'B', 'C' );

The permutation will be 3 in 3. so the result are :

A-B-C ; A-C-B ; B-A-C ; B-C-A ; C-A-B; C-B-A

I don't want any permutation 2 in 3 or 1 in 3, just 3 in 3 as you can see in example. So if I have 4 elements in an array, the permutation is 4 in 4. and so on...

(I think the number of permutations is 3! = 1*2*3 = 6 permutations, 4! = 1*2*3*4 = 24 permutations... that why I call Permutations of Factorial.)

If there are other question and answer similar to my problem, please let me know

解决方案

Use a recursive function:

function permutations($elements) {
    if(count($elements)<2) return $elements;

    $newperms= array();
    foreach($elements as $key=>$element) {
        $newelements= $elements;
        unset($newelements[$key]);

        $perms= permutations($newelements);
        foreach($perms as $perm) {
            $newperms[]= $element."-".$perm;
        }
    }
    return $newperms;
}

Didn't test it, so there is still work for you ;-)

这篇关于PHP中阶乘的置换的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆