2012-04-05 3 views
1

数字1,2,3があるとします。すべての可能なサイズで可能なすべての順列を取るために、アルゴリズムはどのように見えますか?出力:可能なすべてのサイズのJavaでの可能なすべての置換

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

は、あなただけのサブ問題として、通常の順列アルゴリズムおよび入力に文字の各量をしますか?

+0

それはそれが何であるかだ場合は、それを自分で試してみて、あなたが試したものを私たちに示し、その後、宿題としてこれをタグ付けしてください。ループまたは再帰を使用するかどうかによって、アルゴリズムを記述する方法はいくつかあります。再帰的なサブ問題に分解するあなたの提案は良いスタートです。 –

+0

申し訳ありませんが、これは宿題ではありません。私はコンテストの質問を解決しようとしていましたが、その基本的な前提はこれでしたが、それを解決する方法は全く分かりませんでした。 – Tom

+1

あなたはまだそれに亀裂を乗り越え、あなたが立ち往生しているところで助けを求めるべきです。 IMHOコンテストの質問のポイントは、Stackoverflowの答えを見つけることではなく、Stackoverflowのポイントは人々のコンテストの質問に答えることではありません。 – rfeak

答えて

0

可能なすべてのサブセットを生成して置換する必要があります。

擬似コード(C++を以下の)

generate (a[]) { 
    int size = a.size; 
    sort(a) 
    for (i = 1; i < (1<<size); i++) { 
     b[]; 
     for (j = 0; j < size; j++) { 
      if (i&(1<<j)) { 
       add a[j] to b; 
      } 
     } 

     do { 
      for (i=0 to b.size) { 
       print b[i]; 
      } 
     }while(next_permutation(b.begin(), b.end()); 
    } 
} 
+0

'a'を一度ソートすると。 'b'を繰り返しソートする必要はありません。 – st0le

+0

@ st0le、はい。ありがとう。 –

関連する問題