問題タブ [combinations]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - Aボックス内のN個のボールの組み合わせの列挙?
AボックスにN個のボールの可能な組み合わせをすべて列挙したいと思います。
例: 3 つのボックスで8 つのボールを処理する必要があります。
私の最初の問題は、これを実行するにはAループが必要ですが、 AとNをユーザーの入力にしたいということです。では、ユーザーが必要とする可能性のあるすべての可能なループ数を書かずにどうすればよいでしょうか?
aとNは 2 から ~800 の間の値になるため、計算時間が非常に長くなります。そのアルゴリズムを最適化する方法は?
Python言語を使用して私に答えていただければ幸いです。すべての貢献に感謝します!
php - PHP で任意の長さの順序付けられた (重み付けされた) 組み合わせを生成する
使用頻度の高い順にソートされた一般的な単語のリストが与えられた場合、「最も一般的な」シーケンスの順序で、任意の長さ (任意の数の単語) の単語の組み合わせを形成することが可能です。たとえば、最も一般的な単語が「a、b、c」である場合、長さ 2 の組み合わせについては、次のように生成されます。
長さ 3 の正しいリストは次のとおりです。
これは、任意の数の要素に対して 2 つまたは 3 つの単語 (長さを設定) の組み合わせに対して実装するのは簡単ですが、これは任意の長さに対して実行できますか? これを PHP で実装したいのですが、疑似コードやアルゴリズムの要約さえあれば大歓迎です!
python - KenKen パズルの補遺: REDUX A (修正済み) 非再帰アルゴリズム
この質問は、1 <= x <= maxval および x(1) + ... + x(ncells) =目標合計。いくつかのより有望な回答をテストしたので、回答賞を Lennart Regebro に授与します。理由は次のとおりです。
彼のルーティンは私のものと同じくらい速い (+-5%)。
彼は、私の元のルーチンのどこかにバグがあることを指摘しました。ありがとう、レナート。
chrispy は、Lennart のものと同等と思われるアルゴリズムを提供しましたが、5 時間後、すっごく、最初にネットワークに到達しました。
備考: Alex Martelli の必要最小限の再帰アルゴリズムは、考えられるすべての組み合わせを作成し、それらすべてをふるいにかけ、どれが穴を通過するかを確認する例です。このアプローチは、Lennart や私のアプローチよりも 20 倍以上時間がかかります。(入力を max_val = 100、n_cells = 5、target_sum = 250 に上げます。私のボックスでは 18 秒対 8+ 分です。) 道徳: 考えられるすべての組み合わせを生成しないのは良いことです。
別の注意: Lennart のルーチンと私のルーチンは、同じ順序で同じ回答を生成します。実際、それらは異なる角度から見た同じアルゴリズムですか? 知らない。
何かが思い浮かびます。たとえば、(8,8,2,1,1) で始まり (4,4,4,4,4) で終わるように回答を並べ替えると (max_val=8, n_cells=5, target_sum で得られるもの) =20)、シリーズは一種の「最も遅い降下」を形成し、最初のものは「ホット」で、最後のものは「コールド」であり、その間に可能な最大数のステージがあります. これは「情報エントロピー」に関連していますか?それを見るための適切な指標は何ですか?熱の降順 (または昇順) で組み合わせを生成するアルゴリズムはありますか? (これは、正規化された std.dev を見ると、短いストレッチで近いですが、私が見る限りではありません。)
Python ルーチンは次のとおりです。
vb.net - リストの要素の組み合わせを生成する方法.NET4.0で
ここで回答した質問と似ていますが、同じではない質問があります。
n個の要素のリストから要素のk個の組み合わせをすべて生成する関数が欲しいのですが。私は順列ではなく組み合わせを探していることに注意してください。また、kを変化させるための解決策が必要です(つまり、ループをハードコーディングすることはノーノーです)。
a)エレガントで、b)VB10 /.Net4.0でコーディングできるソリューションを探しています。
これは、a)LINQを必要とするソリューションは問題ない、b)C#の「yield」コマンドを使用するソリューションは問題ないことを意味します。
組み合わせの順序は重要ではなく(つまり、辞書式順序、グレイコード、何を持っているか)、2つが競合している場合は、パフォーマンスよりも優雅さが優先されます。
(ここでのOCamlおよびC#ソリューションは、VB10でコーディングできれば、完璧です。)
algorithm - configuratorの組み合わせの数
製品コンフィギュレータで可能な組み合わせの数を決定するためのルーチンをプログラムするように依頼されました。
設定は本当に簡単です。これよりも多くの機能がありますが、n個のオプションの1つを選択する必要があるいくつかの「ラジオグループ」(UIコントロールなど)としてモデル化できます。
使用できる制約の種類は、あるオプションが選択されている場合は別のオプションを選択できないというルールだけです。
したがって、私がやりたいのは、一連のオプショングループと制約を前提として、構成できるさまざまな製品の数を計算することです。
私は、包除原理を使用してこれを解決するための素朴なアプローチを行いました。ただし、私が見る限り、このメソッドに基づくアルゴリズムはすべてO(2 ^ n)で実行する必要があり、機能しません。もちろん、適切なランタイムを提供する可能性のある最適化はいくつかありますが、それでも簡単に構築できる最悪のシナリオがあります。
それは私が今いるところです。助言がありますか?
アップデート
ルールがどのように適用されるかを十分に説明していないことに気づきました。
オプション付きのグループがいくつかあります。各グループで選択する必要があるオプションは1つだけです。グループには1つ以上のオプションがあります。
制約のタイプは1つだけです。あるグループのオプションAが選択されている場合、他のグループのオプションBは選択できません。制約はいくつでもかまいません。オプショングループまたはオプション自体に適用される制約/ルールの数に制限はありません。
したがって、例は次のようになります。
グループ1:
x1 x2 x3 x4 x5
グループ2:
y1 y2 y3
グループ3:
z1 z2 z3 z4
制約:
x1 <-> y2 *
x1 <-> z4
y2 <-> z2
*
group1でオプションx1が選択されている場合、グループ2のオプションy2は選択できません。
包含-除外を使用して、組み合わせの数を次のように計算します
組み合わせ=Cルールなし--Cr -- C r [2] --C r [3] + C r [1,2] + C r [1,3] + C r [2,3] --C r [1、 2,3][1]
どこ
Cルールなし=5* 3 * 4
C r [a、b、c] =ルールa、b、およびcに違反する組み合わせの数。
残念ながら、この方法には2^|ルール|が必要です。計算。
list - F#の要素の最もエレガントな組み合わせ
F#での要素の組み合わせの最もエレガントでシンプルな実装に関するもう1つの質問。
入力要素のすべての組み合わせ(リストまたはシーケンス)を返す必要があります。最初の引数は、組み合わせの要素の数です。
例えば:
design-patterns - バイナリビットパターンの組み合わせを数える
n-bit
。未満の任意の制限以下のワード内のバイナリビットパターンの数をカウントするアルゴリズムを探しています2^n
。1-bit
さらに、すべての組み合わせ、組み合わせなどのカウントを生成したいと思います2-bit
。明らかに、制限がの場合、組み合わせ2^n
があります。ただし、制限が課せられた場合、それらの可能な組み合わせのすべてが有効であるとは限りません(課された制限よりも少ない)。2^n
(C(n,1) 1-bit combinations plus C(n,2) 2-bit plus C(n,3) 3-bit and so on)
たとえば、と言いn=4
ます。16の可能なビットパターンがあり、そのうち15は1つ以上を含みます1-bits
。10の制限が課された場合、10を超えるパターンはカウントに含まれません。したがって、シングルビットパターンの場合、有効なパターンは0001
、、、、0010
および0100
です1000
。2ビットパターンは、、、、0011
に0101
なり0110
ます1001
。パターン1010
と1100
は10を超えるため、カウントされません。唯一の3ビットビットは0111
、唯一の4ビットパターン1111
が制限を超えている間です。
F
が私のカウント関数である場合、10未満の1ビットF(4,10,1)
のパターンの数は4を返しますが、6の場合は4を返します。の実際の値は大きくなる可能性があるため(40またはビット)、可能なパターンを列挙します。制限に対してテストし、有効なものを数えることは実用的ではありません。4-bit
F(4,10,2)
C(4,2)
n
これを効率的に行う方法について何かアイデアはありますか?
algorithm - 可能なすべての組み合わせを作成するための効率的なアルゴリズムは何ですか?
n個のエントリがあり、それぞれが0または1の値を取ることができるとしましょう。つまり、これらのエントリの可能な組み合わせは2^n個あります。エントリの数は1から6まで変化する可能性があります。
1000個のIFに頼ることなく、可能な各組み合わせを数列として(つまり、n = 2:00、01、10、11の場合)どのように作成できますか?
c# - 2つのリストから可能なすべてのアイテムのペアを計算しますか?
私は2つの配列を持っています:
次のようなすべての可能な組み合わせを返したいと思います。
nullは無視する必要があります。