2016-06-27 2 views
0

長さが1からnまでのn文字の可能な組み合わせをすべてどのように長さの順に生成できますか?例について長さがnまでのすべての組み合わせ(すべての順列ではない)をnまで生成する

:N = 4及び文字は、我々がここで配列

1,2,3,4 
12,13,14,23,24,34 
123, 124, 134, 234 
1234 

を生成する必要がN変数と、ユーザは、n個の文字を供給することができるである1,2,3,4- ある場合。

+2

いつでも 'kにループで' nchoosek( '1234'、k) 'を使うことができます –

+0

Luis、ありがとう!!それはmatlabで動作しますが、私はcppでコーディングするためのアルゴリズムも必要でした。私はmatlabの初心者ですので、関数のためのmatlabのソースコードから十分に得ることができませんでした。 – amanized

+4

C++で必要な場合は、別の質問です。 'C++'タグを付けて新しい投稿をすることをお勧めします。また、人々はおそらくあなたが試したことを尋ねるでしょう。あなたはあなたのコードを表示しなければなりません。なぜあなたは立ち往生したのか、なぜ動かないのですか? –

答えて

0

n個までの要素の組み合わせと長さがnのビットマスクの間に双射性が存在します。あなたの問題を解決する方法は、長さnのすべてのビットセットを生成し、それらのビット数で並べ替えることです。これにはbucket sortを使用できます。

0からnまでの数字に対応するn+1リストを作成します。次に、すべてのビットマスクを繰り返し、各ビットマスクについて、その中に1というビット数を計算し、対応するリストにビットマスクを追加します。これらのリストを使用すると、問題を解決するのがかなり簡単になるはずです。

関連する問題