あなたは試合スケジュールのある1対1のバスケットボールリーグを主催しています。リーグの最後に、各プレーヤーにそれぞれの勝敗記録を報告させます(同点はありません)が、予定された順位表が実際に可能かどうかを確認したいとします。
たとえば、4人のプレーヤー(Alice + Bob + Carol + Dave)がいて、スケジュールは単純なラウンドロビンです。報告された順位[ A: 3-0 B: 1-2 C: 1-2 D: 1-2]および[ A: 2-1 B: 1-2 C: 1-2 D: 2-1]は可能ですが、スタンディング[ A: 3-0 B: 0-3 C: 0-3 D: 3-0]はできません。
代わりに、スケジュールがアリス+ボブとキャロル+デイブの3対1の対戦であるとします。報告された順位[ A: 3-0 B: 0-3 C: 0-3 D: 3-0]が可能になりましたが、[ A: 3-0 B: 1-2 C: 1-2 D: 1- 2]はなくなります。
(スケジュールは対称的である必要はありません。アリスにボブとの対戦を10回だけさせ、その後ボブ+キャロル+デイブに58ラウンドロビンの対戦をさせることができます。)
問題:参加者がk人、合計nゲームのスケジュールが与えられた場合、提案された勝敗の順位がそのスケジュールから実際に発生するかどうかを効率的に確認します。
O()総当たりの方法は明白であり、可能なすべてのゲーム結果を列挙し、提案された順位と一致するものがあるかどうかを確認します。そして、kが小さい場合、nを増やしてもそれほど複雑にはなりません。2人のリーグの順位をチェックするのは、彼らが10ゲームまたは100億ゲームをプレイしているかどうかに関係なく非常に簡単です。それを超えて、私はより良い方法を見つけるのにそれほど進んでおらず、誰かが以前に同様の問題を見たことがあるかどうか知りたいと思っていました。