2012-02-27 4 views
0

私はRubyで作業していますが、この質問は言語には無関係です。基本的なリスト/配列関数、および「乱数」ジェネレータにアクセスできると仮定してもよい。ここで私が行うことができるようにしたいものです。すべてのチームが、正確に一つの一部であるようにさえ、ランダムペアを選択するアルゴリズム、マッチアップをスケジュールする

  1. がランダム対戦相手との各チームをペアnnチームの集合を、与えられた

    ペア。これをROUND 1と呼んでください。

  2. ランダム生成n-2その後のラウンド(ROUND n-1を介しROUND 2)ように:
    • 各ラウンドは、すべてのラウンドの後
    • (すべてのチームは、一組の メンバーである)、及び第一と同じ特性を有し、すべてのチームは他のすべてのチームに一度だけ直面しています。私はまさにこれを行うためのアルゴリズムはよく知らなければなりませんが、独学コーダとして、私はトラブルにそれらを見つける方法を考え出すを抱えていること。想像

答えて

2

私はround robin tournamentを記述しています。ウィキペディアのページにアルゴリズムがあります。

スケジュールをランダム化する方法が必要な場合は、チームオーダーをランダム化、丸いため、など

1

これが最も効率的なアルゴリズムですが、あればよくわからない:

  1. ランダムI = 0で開始し、同じ長さの2つのリストのn/2(List1を、LIST2)
  2. にNチームを割り当てる:
  3. ペアを作成します。リスト1 [i]は、LIST2 [i]はラウンドI = 1->(N/2-1)

    のチーム対

  4. リピート= 2-> N/2-1 :

  5. List2を回転させると、List2の最初のチームが最後になります。
  6. List2が一度循環されるまで、手順2〜5を繰り返します。
+0

これはうまくいくかもしれませんが、最初のラウンドが設定されるとプロセスは確定的に見えます。私はあらゆる段階でランダム性を(制約内で)欲しい。 (明らかに最終ラウンドは確定的になるでしょう) – hoffm

+0

また、各リスト内のチームはどのようにお互いにプレイしますか?おそらく私は誤解ですか? – hoffm

+0

いいえ、あなたは正しいホフムです。チームはこれまでと向き合うことはありません:(/ – Alan

1

このリンクは、ラウンドロビンスケジューリングアルゴリズムを最後に書き込んだときに非常に役に立ちました。これには、ラウンドロビンペアリングのための最初のフィットアルゴリズムのC実装が含まれています。アルゴリズムに加えて

http://www.devenezia.com/downloads/round-robin/

、彼はトーナメントスケジュールの他の側面にいくつかの有用なリンク(ホームとアウェイゲームのバランスをとるだけでなく、フィールド/裁判所全体のチームを回転)を持っています。

必ずしもすべてのケースでペアリングに「ランダム」な順序が必要なわけではありません。たとえば、6チームしか持たない8試合のラウンドロビンサッカーリーグを予定していた場合、各チームは2つの別のチームを2回プレーする必要があります。全員にとってもっと楽しいシーズンを作りたいなら、上位2チームが最後の2試合で2人の弱いチームをぶつけないようにシードすることを心配しなければなりません。同様の強さ/シードのチームと対戦するために余分なゲームを手配する方が良いでしょう。

+0

この[ニュースグループスレッド](http://www.devenezia.com/downloads/round-robin/sci.math.num-analysis.round-robin)は素晴らしいです! – hoffm

0

情報に基づいて、私は次のように行ってきました、Maniekのlinkで見つかった:

  1. A単純ラウンドロビンアルゴリズムその

    a。と[(n-1)/2 + 1,..., n-1]を圧縮してペアリングを開始します。

    B(だから、n==10場合、我々は0など、615とペアになっています)。すべてのチームがお互いにプレイするまで、1つのチームを除くすべてのチームを時計回りにn-2回回転させる。 (ラウンド2では1を6と、5を7と等しくする)

  2. [0,..., n-1]のいずれかを無作為に各チームに割り当てます。

関連する問題