3

ブラケットが mod 4 に基づいているダブル エリミネーション トーナメントをコーディングしようとしています。最初のラウンドではすべての不戦勝を処理して、ラウンド 2 の後に不戦勝がなくなるようにする必要があります。必要な bye の量を決定するための実際の計算を理解するのに苦労しています。誰かがこの背後にある数学で私を助けることができれば、それは大歓迎です.

mod 4 (0,1,2,3) には 4 つの可能な答えがあります。1,2,3 の bye を処理する必要があります。

たとえば、13 人のプレイヤー (13%4=1) の場合、ラウンド 1 のブラケットは 1vs2 2vs3 3vs4 4vs5 5vs6 のようになります。

ラウンド 2 は 7 対 勝者 8 対 勝者 9 対 勝者 勝者 対 勝者 そして敗者のブラケットがあります

基本的に、ウェブサイトのチャレンジに精通している場合、それらに似たブラケットを生成したいのですが、bye の決定の背後にある数学を理解できません。

誰かがこれに似たようなことをしたことがあるなら、彼の助けに大いに感謝します.

4

3 に答える 3

3

N競技者の数はどこにありますか、ラウンドの数は次のようになります:

nRounds = Math.Ceiling( Math.Log( N, 2 ) );

最初のラウンドのスロット数は次のようになります。

firstRoundSlots = Math.Pow( 2, nRounds );

上位の競技者は別れを告げます。したがって、あなたの例では、16ラウンドに13人の競技者がいるため、上位3人の競技者が別れを告げます。言い換えれば、さようならの数はfirstRoundSlots - Nです。

試合の順序はもう少し複雑です。基本的には、決勝戦は最高の競争相手であるのに対し、2番目に良い競争相手であるという考え方です。準決勝では、最高の競技者が3番目に優れた競技者と対戦し、2番目に優れた競技者が4番目に優れた競技者と対戦します。などなど。したがって、ファイナルから逆方向に作業して順序を生成するのが最も簡単です。

ただし、試合の順序を逆に生成するためのアルゴリズムを知りたい場合(つまり、ラウンド1から開始して決勝に向かって進む場合)、私はそれについてブログ投稿をここに書きました:

http://blogs.popart.com/2012/02/things-only-mathematicians-can-get-excited-about/

于 2012-05-04T21:45:57.587 に答える
0

これをどのように解決したかを説明します。
ラウンド2には、2の累乗である数のプレーヤーが必要です。

ラウンド2のプレーヤー数は次のとおりです(matches in round 1)/2 + byes)
。Pをプレーヤー数とします。

2^n = (P-byes)/2 + byes
2^(n+1) = P-byes + 2*byes
2^(u) = P + byes

だから、最小のust2^u >= Pを見つけて、さようならがあり2^u-Pます。

例:7-> 2 ^ u = 8->(8-7)-> 1さようなら
1さようなら、3試合->ラウンド2で4人のプレーヤー

mod 4ではありません。9人のプレイヤーを13人と比較してください:9-> 2 ^ u = 16->(16-9)->7バイ13->2 ^ u = 16->(16-13)->3バイ

より興味深い質問は、最初のラウンド以外のラウンドでいくつかを考慮して、最小数のバイをどのように調整するかです。

于 2012-05-04T21:46:42.563 に答える
0

私が考えることができる最も単純なアルゴリズム:

  1. プレイヤーをシードします (実際の情報またはランダムなものを使用)
  2. プレイヤーのランクは現在のポイントに依存し、それが同点の場合はシードに依存します
  3. トーナメントのすべての段階で、トップ ランクのプレーヤーからランクの低いプレーヤーまで、各プレーヤーを、対戦したことのない次のランクのプレーヤーとペアにします。
  4. 最下位のプレイヤーが通常さようならを得る
  5. 1 人が合計 2 ゲーム (引き分けの場合は 2 敗に相当) 負けた場合、その人はトーナメントから除外されます。
  6. トーナメントに残るプレイヤーが 1 人になるまで、これを繰り返します。
于 2012-05-04T22:24:04.160 に答える