2012-05-03 23 views
-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... 

これを行うにはどのように任意のアイデア? もちろん、私はある数の組み合わせを生成したいと思います。

+0

単純な順列を生成するコードはありますか?もしそうなら、どのような変更を試みましたか?そうでない場合は、それを行い、質問を更新してください。 – Jon

+0

擬似コード全体アルゴリズムを作成しようとしたのでコードがありません – galica

+0

何をしたいですか?これはまったく明らかではありません。私は '1、3、2'はソートされた元の数字だと思います。優先?しかし、「1 3」とは何ですか?あなたは本当に組合せではなく、順列ではないのですか? – Henrik

答えて

1

私は答えを例のコードに変更しました。この方法では、再帰は必要ありません。要素を優先順位でソートする必要があります。この例は、Pseudocodeからあまり離れていないPerlにあります。

@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); 
1

すべての組み合わせを探すわけではありません(番号のセットのみを気にするので、セット内の順序は気にしません)。

ここではヒントを紹介します。まず、数字1〜nのすべての組み合わせを生成するコードを書き留めてから、それらの数字と重みを考慮して与えられた数字との間で簡単なバイアスをかけます。

+0

彼の例では、(1 3)及び(3が含まれています1)ので、彼は明らかに数列の順序を区別しています。最初の数字はnで、2番目の数字は優先順位だと主張することもできますが、(1 1)と(3 1)はないでしょう。 Imhoは質問が不明であり、現状では答えられない。 –

関連する問題