-1

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

我需要一种生成所有数字组合的算法,但从最重要的数字开始。

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...

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

4

2 回答 2

1

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

这是给您的提示 - 首先写下将产生数字 1 到 n 的所有可能组合的代码,然后在这些数字和您给出的考虑权重的数字之间进行简单的双射。

于 2012-05-03T11:57:55.030 回答
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);
于 2012-05-03T12:00:23.937 回答