2

だから私は暇な時間に問題に取り組んでいて、立ち往生しています。ここが私がいるところです。私は 40 という数字を持っています。これはプレイヤーを表しています。他の数字 39、38、....10 が与えられました。これらは、最初の 30 人のプレーヤーのスコア (1 -30) を表しています。残りのプレーヤー (31 ~ 40) のスコアは不明です。私がやりたいことは、与えられたデータと一致するスコアの組み合わせがいくつあるかを見つけることです。

より簡単な例: 3 人のプレイヤーがいる場合。1 人のスコアは 1 です。この場合、スコアの可能な組み合わせの数は 3 (0,2; 2,0; 1,1) です。ここで、(a,b) はプレーヤー 1 とプレーヤー 2 の勝利数を表します。 、 それぞれ。(3,0) の組み合わせは機能しません。3 勝できる人はいないからです。合計 3 勝する必要があるため (0,0) も機能しません (0,0 では得られません)。

可能な合計ゲーム数を見つけました。これは、プレイされたゲームの総数、つまり、勝利の総数です。(引き分けはありません。) 最後に、プレイヤーごとの最大勝利数の変数があります (これは、プレイヤーの総数よりも 1 少ない数です。それ以上のプレイヤーは獲得できません)。

各プレイヤーに N 回の勝利を分配し、基準に合わない組み合わせを差し引いて、ユニークな組み合わせの数を見つけようとしました。たとえば、5 人に 10 回の勝利を与え、各人が 4 回を超えないようにするには、次のようにします。 C(14,4) - C(5,1)*C(9,4) + C (5,2)*C(4,4) = 381. C(14,4) は、式 C(n+k-1, k-1) から得られます (Google のバーとストリップだと思います)。次は、5 (許可されていません) のものを選択しますが、2 回減算したものを追加します。

ええ、もっと簡単な方法があるはずです。最後に、数値が非常に大きくなりすぎて、コンピューターがそれらを適切に処理できるかどうか確信が持てなくなります。1.15495183 × 10^66 である C(780, 39) について話しています。とにかく、これを行うためのより良い方法があるはずです。

要約すると、40人います。最初の 30 人のスコアは 10 ~ 39 です。最後の 10 人のスコアは不明です。基準を満たすスコアをいくつ生成できますか: すべてのスコアを合計すると、可能な勝利の合計となり、各プレイヤーは 39 勝しなくなります。

考え?

4

1 に答える 1

2

生成関数:

質問は数学に関するものですが、まだプログラミング QA サイトにあるため、記号代数 (Mathematica の Maple など) を使用して、これらの問題の多くに有効な部分的な解決策を示しましょう。入門的な組み合わせ論の本を手に入れることを強くお勧めします。この種の質問はそこで答えられます。

まず、スコアが 10 ~ 39 の最初の 30 人のプレーヤー (合計スコア 735) は、ちょっとしたニシンです。私たちがやりたいことは、もう 1 つの問題を解決することです。 (0...39) の範囲。

プレーヤーの可能なスコアを多項式と考えると、次のようになります。

f(x) = x^0 + x^1 + x^2 + ... x^39

たとえば、x^2 の値が 2 のスコアである場合、これがどのように見えるかを考えてみましょう

f(x)^10    

これは、10 人のプレイヤー全員の合計スコアを表します。の係数x^385は 2002 で、これは 10 人のプレイヤーが 385 点を獲得する方法が 2002 通りあるという事実を表しています。Wolfram Alpha (IMO のプログラミング言語)でこれを評価できます。

これを行う方法がいくつあるか知りたい場合は、x=18,140,​​406,085,191,601 を与える式に代入するだけで、たまたま 39^10 になります (驚くことではありません!)。

なぜこれが役立つのですか?

紙の上で解決できる単純な問題に対して、このすべての機械を設定するのはばかげているように思えるかもしれませんが、関数を生成するアプローチは、問題が厄介になったときに役立ちます (そして漸近解析が可能です)。同じ問題を考えてみましょう。ここでは、プレーヤーが素数 (2、3、5、7、11、...) のみを獲得するように制限します。そのうちの 10 人が特定の数字、たとえば 344 を獲得できる方法はいくつありますか? あなたのを変更するだけf(x)です:

f(x) = x^2 + x^3 + x^5 + x^7 + x^11 ...

プロセスを繰り返します!(私は得る [x^344]f(x)^10 = 1390)。

于 2012-03-16T13:58:39.763 に答える