Di klub squash lokal saya, ada tangga yang berfungsi sebagai berikut.
- Di awal musim kami membuat tabel dengan nama masing-masing anggota klub pada baris yang berbeda.
- Kami kemudian menulis jumlah permainan yang dimenangkan dan jumlah permainan yang dimainkan di sebelah setiap nama (dalam bentuk: pemain menang / permainan).
Jadi pada awal musim tabelnya terlihat seperti ini:
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
Dua pemain mana saja dapat memainkan pertandingan, dengan satu pemain menang. Jika pemain terdekat dari bawah tabel menang, maka posisi para pemain berubah. Kami kemudian ulangi langkah 2., memperbarui jumlah kemenangan dan permainan di sebelah masing-masing pemain. Misalnya, jika Alice mengalahkan Billy, kami punya
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
Pertandingan-pertandingan ini berlangsung sepanjang musim dan akhirnya menghasilkan pemain yang terdaftar dalam urutan kekuatan perkiraan.
Sayangnya, pembaruan terjadi dengan cara yang agak serampangan, sehingga terjadi kesalahan. Di bawah ini adalah beberapa contoh tabel tidak valid, yaitu, tabel yang tidak dapat diproduksi dengan mengikuti langkah-langkah di atas untuk beberapa urutan awal dengan benar (kami telah lupa urutan yang kami gunakan di awal musim) dan urutan pertandingan dan hasil:
Alice 0/1
Billy 1/1
Carol 0/1
Daffyd 0/0
Alice 2/3
Billy 0/1
Carol 0/0
Daffyd 0/0
Alice 1/1
Billy 0/2
Carol 2/2
Daffyd 0/1
Diberikan tabel, bagaimana kita dapat secara efisien menentukan apakah itu valid? Kita bisa mulai dengan memperhatikan hal berikut:
Urutan nama tidak masalah, karena kami lupa urutan awal yang asli.
Jumlah total kemenangan harus setengah dari jumlah permainan yang dimainkan. (Ini menunjukkan bahwa contoh pertama di atas tidak valid.)
- Misalkan tabel tersebut valid. Lalu ada multigraf - grafik yang mengakui banyak sisi tetapi tidak ada loop - dengan masing-masing simpul terkait dengan pemain dan setiap tepi untuk pertandingan dimainkan. Kemudian jumlah total permainan yang dimainkan oleh setiap pemain sesuai dengan tingkat verteks pemain dalam multigraf. Jadi jika tidak ada multigraf dengan derajat titik yang sesuai, maka tabel harus tidak valid. Misalnya, tidak ada multigraf dengan satu simpul derajat satu dan satu derajat tiga, sehingga contoh kedua tidak valid. [Kami dapat memeriksa keberadaan multigraf dengan efisien.]
Jadi kami memiliki dua pemeriksaan yang dapat kami terapkan untuk memulai, tetapi ini masih memungkinkan tabel tidak valid, seperti contoh ketiga. Untuk melihat bahwa tabel ini tidak valid, kita dapat bekerja mundur, melelahkan semua kemungkinan cara tabel bisa muncul.
Saya bertanya-tanya apakah ada yang bisa memikirkan waktu polinomial (dalam jumlah pemain dan jumlah game) yang memecahkan masalah keputusan ini?