数字与权重的组合

时间:2012-05-03 11:49:33

标签: algorithm combinations

我有一个数组/数字列表。每个号码都有一定的优先级/重要性。

我需要一种能够生成所有数字组合的算法,但需要开始最重要的表单编号。

e.g. [number, priority]: [1,1], [2,3], [3,2]. Highest priority is 1.

组合:

1, 3, 2, 1 1, 1 3, 3 3, 3 1, 1 2, 3 2, 2 1, 2 2, 1 1 1, 1 1 3, 1 3 1...

知道怎么做吗? 当然,我想生成一定数量的组合。

2 个答案:

答案 0 :(得分:1)

您似乎正在寻找不是所有排列的所有组合(我没有看到任何数字组重复,因此您只关心数字集,而不关心该集合中的顺序)。

这里有一个提示 - 首先写下代码,它将产生数字1到n的所有可能组合,然后在考虑到权重的情况下,在这些数字和给定数字之间进行简单的双射。 / p>

答案 1 :(得分:1)

我将答案改为示例代码,这样你甚至不需要递归。您必须按优先级排序元素。这个例子是在Perl中,它离Pseudocode

不远
@numbers = (1, 3, 2, 4);

push(@result, @numbers);
push(@working_list, @numbers);
for ($i = 1; $i < @numbers; $i++) {  # We loop exactly for the length of the array (-1 because the first iteration is already inside)
    my @result_list;
    for $result (@working_list) { # get the result of the last iteration of $i
        for $number (@numbers) { # iterate the numbers
            push (@result_list, "$result $number");  # adding the numbers
        }
    }

    push(@result, @result_list); # push the last result to final result list
    undef @working_list;
    push(@working_list, @result_list); # use the last result as a start point for next $i iteration

}

print join(', ', @result);