0

コレクションのリストがあります:
{AB}
{CDE}
{FG}

行数は任意にすることができ、行内のアイテム数も任意にすることができます。

これを取得する必要があります:
{ACF ACG ADF ADG AEF AEG BCF BCG BDF BDG BEF BEG}

誰かがこれを行うことができるいくつかのアルゴリズム、または少なくとも問題の名前を指摘できますか?そのようなものがある場合。

4

3 に答える 3

0

実際には簡単です:

これがC++のソリューションです。最初のセットがA、2番目のセットがB、3番目のセットがCの場合。

cout << "{ ";
for( int i=0; i<a_size; ++i ) {
  for( int j=0; j<b_size; ++j ) {
    for( int k=0; k<c_size; ++k ) {
      cout << A[ i ] << B[ j ] << C[ k ] << " ";
    }
  }
}
cout << " }\n";
于 2012-09-26T18:01:45.103 に答える
0

リストの元のコレクションとコレクション内のリストの現在のインデックスを受け入れる再帰関数を作成できます。次に、リスト内のアイテムを反復処理し、すべてのアイテムでインデックスを増やして自分自身を呼び出します。

于 2012-09-04T18:44:21.923 に答える
0

あなたの例では、これだけが必要だと言いました:

{ACF ACG ADF ADG AEF AEG BCF BCG BDF BDG BEF BEG}

他のすべての組み合わせも必要な場合は、私が作成したクラスを使用して、問題が該当するタイプの問題である二項係数を操作するための一般的な関数を処理できる場合があります。次のタスクを実行します。

  1. 任意の N choose K について、すべての K-index を適切な形式でファイルに出力します。K インデックスは、よりわかりやすい文字列または文字で置き換えることができます。この方法により、この種の問題を簡単に解決できます。

  2. K インデックスを、並べ替えられた二項係数テーブル内のエントリの適切なインデックスに変換します。この手法は、反復に依存する以前に公開された手法よりもはるかに高速です。これは、パスカルの三角形に固有の数学的性質を使用して行われます。私の論文はこれについて語っています。この手法を発見して公開したのは私が最初だと思いますが、間違っている可能性があります。

  3. ソートされた二項係数テーブルのインデックスを対応する K インデックスに変換します。

  4. Mark Dominusメソッドを使用して二項係数を計算します。これは、オーバーフローする可能性がはるかに低く、より大きな数で機能します。

  5. このクラスは .NET C# で記述されており、一般的なリストを使用して、問題に関連するオブジェクト (存在する場合) を管理する方法を提供します。このクラスのコンストラクターは、InitTable と呼ばれる bool 値を受け取ります。これが true の場合、管理対象のオブジェクトを保持する汎用リストが作成されます。この値が false の場合、テーブルは作成されません。上記の 4 つの方法を実行するためにテーブルを作成する必要はありません。テーブルにアクセスするためのアクセサ メソッドが用意されています。

  6. クラスとそのメソッドの使用方法を示す関連するテスト クラスがあります。2 つのケースで広範囲にテストされており、既知のバグはありません。

このクラスについて読んでコードをダウンロードするには、二項係数の表化を参照してください。

このクラスを選択した言語に変換するのは難しくありません。

于 2012-09-26T17:55:45.043 に答える