Anda menjamu liga basket 1 v 1 dengan jadwal pertandingan. Di akhir liga, Anda meminta setiap pemain untuk melaporkan rekor menang-kalah (tidak ada ikatan), tetapi Anda ingin memeriksa apakah kedudukan yang diusulkan benar-benar dimungkinkan berdasarkan jadwal.
Misalnya: Anda memiliki empat pemain (Alice + Bob + Carol + Dave) dan jadwal Anda adalah round robin sederhana. Klasemen yang dilaporkan [ A: 3-0 B: 1-2 C: 1-2 D: 1-2] dan [ A: 2-1 B: 1-2 C: 1-2 D: 2-1] adalah mungkin, tetapi kedudukan [ A: 3-0 B: 0-3 C: 0-3 D: 3-0] tidak akan terjadi.
Sekarang anggaplah jadwalnya adalah pertandingan 3 head to head antara Alice + Bob dan Carol + Dave. Posisi yang dilaporkan [ A: 3-0 B: 0-3 C: 0-3 D: 3-0] sekarang dimungkinkan, tetapi [ A: 3-0 B: 1-2 C: 1-2 D: 1- 2] tidak akan lagi.
(Jadwal tidak perlu simetris dengan cara apa pun. Anda bisa membuat Alice hanya bermain melawan Bob 10 kali, lalu membuat Bob + Carol + Dave bermain 58 round robins satu sama lain.)
Soal : Mengingat jadwal dengan k peserta dan n jumlah game, efisien memeriksa apakah klasemen menang-kalah yang diusulkan benar-benar bisa terjadi dari jadwal itu.
Metode brute force O ( ) jelas, menyebutkan semua kemungkinan hasil pertandingan dan melihat apakah ada yang cocok dengan kedudukan yang diajukan. Dan jika k bertambah kecil dan tidak menambah kerumitan - sangat mudah untuk memeriksa kedudukan liga dua orang terlepas dari apakah mereka bermain sepuluh pertandingan atau sepuluh miliar pertandingan. Selain itu saya belum membuat banyak kemajuan dalam menemukan metode yang lebih baik, dan ingin tahu apakah ada yang melihat masalah yang sama sebelumnya.
sumber