1

Delphi (Object Pascal) で次のアルゴリズムを次のように実装する方法:

  • 各英数字項目は単一のオブジェクトになります (私の場合はファイル文字列への参照)。
  • 各ピック状態/組み合わせを列挙 (出力) できるようにします。
  • そろばんの柱を想像してみてください。すべて同じサイズです (ベースに応じて)。サイズの異なる列が必要です。(私の場合、サイズの異なるファイル文字列のセット)

最終編集: Python intertools implementationを参照してください。

他の言語の同様のアルゴリズム: c#ruby​​ 、javaphp

アルゴリズム

次のセットとそのメンバーを検討してください。

S1 = {a1, a2, a3, a4, a5}

S2 = {b1、b2、b3、b4}

S3 = {c1, c2, c3, c4, c5}

各セットの最初のメンバーを選択します (P = Pick States):

P1 = {a1, b1, c1}

次に、最初の値を限界までインクリメントします。

P2 = {a2, b1, c1} P3 = {a3, b1, c1} P4 = {a4, b1, c1} P5 = {a5, b1, c1}

次に、最初のセットをリセットし、2 番目のセットを「1」インクリメントします。

P6 = {a1, b2, c1}

最初のセットを再びインクリメントします... など... 3 番目のセットの「プラス 1」ごとに 1 番目と 2 番目のセットをリセットします。

P7 = {a2、b2、c1}

カウントの基本原理または乗算の原理に関して、このアルゴリズムは 100 の選択状態/組み合わせを生成します。

P100 = {a5、b4、c5}

4

2 に答える 2

1

あなたは数えています。

各ビーズは数字であり、各ビーズは 5 つの位置のいずれかを持つことができるため、この例では基数 5 で作業しています。

与えられた整数に対応するビーズの位置を決定するには、関連する基数にその整数を書き込むだけで十分です。ルビーで行う方法は次の17とおりです。

>> 17.to_s(5).rjust(3, '0')
=> "032"

ここでは、それぞれがどこにあるかを明確にするために 3 つのビーズに左パディングしました。また、ビーズが位置 1 ではなく位置 0 から始まるという規則を使用しています。

于 2013-04-10T06:20:35.667 に答える