問題タブ [combinatorics]

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.

0 投票する
2 に答える
650 参照

java - 組み合わせ論へのアルゴリズム

組み合わせ論の問題を解決しようとしています。簡単そうに見えますが、問題が発生しています。

最大でX台のテーブルがあり、テーブルにN人が座る場合、各テーブルには1〜Nの座席があり、長方形のテーブルの片側にしか座ることができません(したがって、人の座る順序が重要です)。

1からKテーブルまでの座席のすべての分布を計算できるコードを作成したいと思います。

たとえば、12人と1つのテーブルがある場合、479001600の座席の方法があります(計算は簡単ですが、Factorial of 12を使用しました)。

しかし、私が12人と3つのテーブルを持っている場合、私は4390848000の座席の方法を持っています。さまざまな解決策を試しましたが、正しい解決策を見つけることができませんでした。

私は12を3に分割しようとしました、そしてo結果の階乗を使用します(それは機能しませんでした)、私は12を使用しようとしました!* 3(それも機能しませんでした)。

誰かが私が使用できるアルゴリズムのヒントを教えてもらえますか?

0 投票する
2 に答える
1311 参照

algorithm - オープンスペースシッティング最適化アルゴリズム

会社の変更の結果として、私たちは座席表を再調整する必要があります。1つの部屋に10台の机があります。いくつかの理由で他の机より人気があります。1つの解決策は、帽子からデスク番号を引き出すことです。私たちはそれを行うためのより良い方法があると思います。

私たちは10の机と10人を持っています。このコンテストのすべての人に、机に入札するための50個の仮想トークンを与えましょう。1つの机にいくら入札するかは制限がなく、「ここだけ座りたい、期間」と言って50個全部入れることができます。すべてのデスクに5トークンを与えることで、「私は気にしない」と言うこともできます。

重要な注意:他の人が何をしているのか誰も知りません。誰もが自分の最善の利益だけに基づいて決定する必要があります(おなじみのように聞こえますか?)

ここで、これらの架空の結果が得られたとしましょう。

さて、私たちが見つける必要があるのは、私たちに最大の満足を与える1つ(または複数)の構成です(つまり、人々はすべての入札を考慮し、グループ全体を最大化して、必要なデスクを手に入れます。当然のことながら、仮定は机の上に1つ以上の入札があれば、彼/彼女はそれをもっと欲しがる)。

人数が10人しかないので、考えられるすべての構成を総当たり攻撃で調べることができると思いますが、この種の問題を解決するためのより良いアルゴリズムがあるのではないかと思いました。

0 投票する
3 に答える
7061 参照

c++ - 文字列の繰り返しですべてのバリエーションを生成する方法は?

C++ で文字列の繰り返しを使用してすべてのバリエーションを生成したいのですが、非再帰アルゴリズムを強く希望します。過去に再帰アルゴリズムを思いついたことがありますが、複雑さ (r^n) のため、反復的なアプローチが必要です。

Web や StackOverflow のどこにも、この問題の解決策を見つけることができなかったことに非常に驚いています。

私も同様にやりたいことをするPythonスクリプトを思いつきました:

出力:

aaaa aaab aaba aabb abaa abab abba abbb baaa baab baba babb bbaa bbab bbba bbbb

理想的には、まったく同じパラメーターを使用して、正確な出力を生成できる C++ プログラムが必要です。

これは学習目的であり、宿題ではありません。宿題がこうだったらいいのに。

0 投票する
1 に答える
186 参照

combinatorics - 組み合わせ論についての質問

ここにタスクがあります

まず第一に、3つの数の合計は偶数です

そんなこと知ってる

誰でもこの問題を解決するのを手伝ってくれますか

0 投票する
1 に答える
593 参照

optimization - 多くのネストされたループの順列を減らす

これをよりよく説明するために画像を作成することにしました。自分の考えが正しいか、順列の合計を 75% 削減できるかを確認したいだけです。

代替テキスト http://www.freeimagehosting.net/uploads/45e5c6b05e.gif

0 投票する
2 に答える
1636 参照

partitioning - 2 つの要素が同じセットを 1 回だけ共有する、k サイズのサブセットを持つ n 要素のすべての可能な分割を見つける

xセットに分割する必要があるn個の要素があり、各セットは正確にk = 4個の要素を保持する必要があります。

要素の各ペアが同じセットを 1 回だけ共有するという制約を使用して、考えられるすべてのパーティションを見つける必要があります。

したがって、[1 2 3 4] [5 6 7 8] [...] で開始すると、連続するすべてのパーティションが [1 2 XX] や [XX 1 3] などを保持することはできません。セットは順不同です。

この問題に近いのは、第 2 種スターリング数です。ただし、それらは任意のサイズのセットの問題のみを解決します。

例: 32 匹のマウスを 8 つのケージ (1 つのケージに 4 匹) に入れることができます。マウスは、別のマウスに 2 回会わないようにケージ間で回転させる必要があります。どのくらいの頻度でこれを行うことができますか?また、構成はどのようなものですか?

0 投票する
2 に答える
871 参照

algorithm - ボックスでのボールの生成

a2つのソートされたベクトルとが与えられた場合、の合計といくつかの順列であり、一度ソートされると一意でbあるすべてのベクトルを見つけます。ab

次の方法で、求めるベクトルの1つを作成できます。

  • ベクトルaとベクトルの順列を取りbます。
  • それらを合計してくださいc[i]=a[i]+b[i]
  • 並べ替えc

一意のベクトルbのセット全体を生成する-順列のセットを見つけることに興味があります。c

例0a='ccdd'および合計されたベクトルをb='xxyy'
与えます: 'cycydxdx'、、。:と の順列が等しいことに注意してください。どちらの場合も、「ボックスc」と「ボックスd」の両方が正確に1つと1つを取得するためです。'cxcxdydy''cxcydxdy'
b'xyxy''yxyx''x''y'

これは、ボールとボックスのいくつかのグループが同一であるボックス(それぞれに1つ)にMボールを入れることに似ていると思います。更新:文字列が与えられた場合、問題は4つのボックスに10個のボールになります。サイズ2、3、1、4の4つの異なるボックスがあります。ボールはペアごとに区別できません。M
a='aabbbcdddd'b='xxyyzzttqq'

例1:与えられた文字列はとa='xyy'ですb='kkd'
考えられる解決策:'kkd''dkk'
理由:のすべての一意の順列は、、bおよび'kkd''kdk'あることがわかり'dkk'ます。'y'ただし、私たちの制約により、最初の2つの順列は、異なる文字列の同じ文字にマップされるインデックスと等しいと見なされますa

例2:与えられた文字列はとa='xyy'ですb='khd'。考えられる
解決策:'khd'、、'dkh''hkd'

例3:与えられた文字列はとa='xxxx'ですb='khhd'
考えられる解決策:'khhd'

Wikipedia / Permutationbで説明されているように、Narayana Panditaのアルゴリズムを使用して、一意の候補順列を生成する問題を解決できます。 2番目の部分はより硬く継ぎ目があります。私のベストショットは、2つの文字列をペアでリストに結合し、並べ替えて、ルックアップセットのキーとして使用することです。(+ join→<code>'xh'、'xd'sort→<code>'xd'、'xh')。
'xx''hd'

Mはしばしば非常に大きく、文字列の類似性が一般的であるため、現在b、実際にセットフィルターを通過するよりもはるかに多くの順列を生成します。正しいアルゴリズムを直接生成するアルゴリズムが欲しいです。どんな改善でも大歓迎です。

0 投票する
11 に答える
47138 参照

c# - すべての可能な組み合わせの生成

2 つの配列が与えられ、考えられるすべての組み合わせを文字列a(i) b(j) c(k) n(p) として生成するArray1 = {a,b,c...n}Array2 = {10,20,15....x}はどうすればよいですか?

そのような:

したがって、すべての組み合わせの総数 = の要素の積array2 = (10 X 20 X 15 X ..X x)

2 番目の配列が最初の配列の各要素の上限を定義するデカルト積に似ています。

固定数の例、

したがって、3*2*4 = 24 通りの組み合わせがあります。結果は次のようになります。

0 投票する
6 に答える
88812 参照

python - 繰り返しによる順列の生成

私はitertoolsについて知っていますが、繰り返しなしで順列しか生成できないようです。

たとえば、2 つのサイコロのすべての可能なサイコロを生成したいと思います。したがって、繰り返しを含む [1, 2, 3, 4, 5, 6] のサイズ 2 のすべての順列が必要です: (1, 1), (1, 2), (2, 1)... など

可能であれば、これを最初から実装したくありません

0 投票する
5 に答える
376 参照

asp.net - 再帰関数の変更を支援する

キャンバスが与えられ、たとえば10x10で、3つの長方形/正方形が与えられたとします。

キャンバス=10x10

長方形1=2x2長方形2=3x3長方形3=2x4

キャンバス上のすべての長方形のすべての位置をループする再帰関数を作成しましたが、これは正常に機能します。(誰かが見たいと思う場合に備えて、以下の関数を含めましたが、それは必要ではないと思います)。

長方形1と2は回転できません、つまり、どちらかを90度回転させると、基本的に同じ形状になります。ただし、長方形3は回転可能です。

可能なすべての回転とともに、すべての長方形のすべての位置をループするように、loop / recurisve関数を変更/構築するにはどうすればよいですか?

目的は、キャンバス上の形状の可能なすべてのフィッティングをループすることです。

助けてくれてありがとう!