問題タブ [sports-league-scheduling-problem]
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.
java - ラウンド ロビン アルゴリズムの実装 Java
私の問題はかなり単純だと思いますが、このアルゴリズムをコードに変換できないように見えるため、いくつかの異なる視点が必要だと感じています。
n チーム (この場合は 10 チーム) がラウンド ロビン形式でプレーするスポーツ チームのスケジュールを作成する必要があります。ルールは基本的なラウンドロビン形式に従います。この形式では、1 つのチームが特定の時間に他の 1 つのチームとしか対戦できず、すべてのチームが他のすべてのチームと 1 回対戦する必要があります。
アルゴリズムは、チーム 1 をその場で保持し、残りを時計回りに回転させることであることがわかりました。ダミーチームを使用して、n の奇数を処理できます。この問題は、アルゴリズムの「時計回り」の部分で発生します。時計回りに回転するという概念をチームにどのように翻訳できるかわかりません。たとえば、配列 TeamArray に分割し、TeamArray[0] が TeamArray[10] などを第 1 週にプレイする場合、第 2 週にそれらを時計回りに移動させるにはどうすればよいでしょうか?
私は配付資料の答えを探しているのではなく、このアルゴリズムを創造的な方法で見て、チームを時計回りに動かすという概念を翻訳できるようにするための助けを求めています.
私はすべての助けに感謝し、私の最初の質問で混乱を招く可能性のあるものは何でも喜んで答えます. ありがとう!
python - スイスのトーナメント - ペアリング アルゴリズム
私は Python でスイス トーナメント システムに取り組んでおり、最適なペアリング アルゴリズムを見つけようとしています。
私の最大の問題は、私が持ってきたすべてのアルゴリズムがいくつかのシーケンスでエラーを生成したことです。そこでは、選択される最後のペアがすでに互いにプレイされており、ペアリングが無効であると判断されています.
私が取り組んでいるスイスのシステムは単純です: プレイヤーでさえ、誰もが各ラウンドでプレイし、ペアリングは勝利の近さに基づいて行われます (つまり、強いプレーヤーは強いプレーヤーと対戦し、弱いプレーヤーは弱いプレーヤーと対戦します)。
No Bye、勝ち負けのみ(引き分けなし)、対戦相手は2回対戦できません。
私が行った現在のアルゴリズムは次のように機能します。
- ランキング順 (勝数の多い順) でプレイヤー リストを作成します。
- 勝利数の多いプレイヤーから順に選ぶ
- 最も近いランクのプレーヤーと彼を一致させます。彼らがすでにプレーしている場合は、一致が見つかるまで、彼を次の人と一致させます
- リストからペアを取り出して 1 に戻す
例:
2 ラウンド後のランキング:
最初のピックは P1 で、最初の試合は P5 です。リストから (P1,P5) を取り出します。
最初のピックは P3 で、すでに P4 でプレイされているため、試合は P2 になります。リストから (P3,P2) を取り出します。
このシーケンスでは、互いに対戦したペアで終了し、ペアリングは無効です。
質問: お互いにプレイした 2 人のプレイヤーで最後に「スタック」しないことを確認しながら、最適なペアリング モジュールを保証するアルゴリズムはありますか?
java - 重複することなくチームを割り当てるプログラムを作成しますか?
six
チームを毎日 1 回対戦するように割り当てるプログラムを作成しようとしていますthree
。でも、各チームにはtwo
毎日試合をしてもらいたいです。同じ期間に同じ人物を 2 回プレイしてほしくありませんthree
。
各ゲームをグループ化しtwo
てランダム化する必要があります。一度に2つのゲームがプレイされます。
目的の出力は次のとおりです。
このように正確にフォーマットする必要はありませんが、これは単なる一般的な考え方です。
まず、3回ループするようにしたいのですが、この一連のループで既に番号が使用されている場合は、その番号を割り当てないようにしたいと考えています。
コードは次のようになると思います。
このコードで得られる出力は次のとおりです。
これに関する問題は次のとおりです。
- 3 番がチーム 5 に割り当てられた場合、5 番は後で 3 番に割り当てられるべきではありません。
・チーム1に背番号1を割り当てることはできません。
- チーム 4 が 1 日目に 5 番を割り当てられた場合、2 日目または 3 日目に同じ番号が割り当てられるべきではありません。
-チームのリストは、ランダム化して 2 つにグループ化する必要があります。
これらの問題を解決する方法がよくわかりません。どんな助けでも大歓迎です。
javascript - ラウンド ロビン マッチ ロケーション アルゴリズム
ラウンド ロビン トーナメントの試合場所を設定するためのアルゴリズムを理解しようとしています。
- 各チームは、ホームで 1 回、アウェイで 1 回の計 2 回、他のチームと対戦します。
- 各チームにはホーム ロケーションがあります。
- トーナメントには、同じ本拠地を共有する多くのチームがあります。
私はすでにすべての一致の配列を持っています。一致は次のようになります。
すべての一致をループして、location
. さまざまな解決策を試しましたが、まだ完全に機能するものはありません。
- もちろん、ボブの自宅の場所が で利用できる場合は、
date
それをそのまま使用できます。 - ボブとフランクが対戦するもう 1 つの試合を考慮する必要があります。ホームチームとアウェーチームを切り替えることは問題ありませんが、バランスが取れていることを確認する必要があります。(つまり、ボブとフランクは家でそれぞれ 1 回ずつ遊びます)
- ホーム/アウェイを切り替えようとしても場所を割り当てることができない場合は、場所の分割を試みる必要があります。
ロケーション分割
複数の試合が 1 つの場所で同時に行われるように、試合場所を分割することができます。場所を分割できるかどうかを判断する方法は、この質問の範囲外ですが、 true または falsecanLocationBeSplit(location)
を返す関数が呼び出されたとしましょう。bool
2 チーム間のいずれかの試合で、ホームまたはアウェーの両方の場所を分割できます。ただし、絶対に必要でない限り、場所の分割のみを開始したいと考えています。繰り返しになりますが、各チームはホームで 1 回、アウェイで 1 回プレーする必要があります。
試合に利用できる場所がまだない場合は、そのままにしておきますnull
。
質問
私の質問は、この問題を解決する適切な再帰アルゴリズムの提案はありますか? 御時間ありがとうございます。
algorithm - 繰り返しのないチームのペアの並べ替え | 総当たり戦
大会のスケジュールを作成中です。各チームは正確に 8 ゲームをプレイする必要があります。チーム数 2 < n < 36
チームをペアにソートするために、ラウンドロビンアルゴリズムを使用してテーブルを取得しています.6チームの例:
次に、それをペアのセットに変換します。
問題は、このセットをどのように並べ替えて、同じチームが 2 試合連続でプレーできないスケジュールを取得するかです。ただし、それが不可能な場合は、例外の数を最小限に抑えてください。
新しいアルゴリズムの例:
php - RoundRobin を使用しないリーグ スケジューリング
現在、私は実際に私の問題に固有の用語を探しています:
4 チームを超えるリーグを作成しました リーグは 3 ラウンド続きます (数字は簡単にするためです) マッチアップは、チームがまだ対戦していないチームからランダムに割り当てられます。
現在のコードをフリンジ ケースごとに実行するのに苦労しているので、そのようなケース用に開発された「標準」アルゴリズムを調べたいのですが、探している用語が見つかりません。
1 つのスケジュールの例は次のとおりです。
リーグ/トーナメントで使用される可能性は非常に低いように思われるため、その点については何も見つかりませんでしたが、それが私の要件です.
これは、ONE Round を作成する現在のコードです。このコードでは、ラウンド 3 で各チームに対戦相手が割り当てられない可能性があります (6 チームでテスト済み、ラウンド 3 で発生する可能性があります)。
私がグーグルするものについての助けをいただければ幸いです