W moim lokalnym klubie squasha jest drabina, która działa w następujący sposób.
- Na początku sezonu budujemy tabelę z nazwiskiem każdego członka klubu w osobnej linii.
- Następnie zapisujemy liczbę wygranych gier i liczbę gier rozegranych przy każdej nazwie (w formie: wygrywa gracz / gry).
Tak więc na początku sezonu stół wygląda następująco:
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
Dwoje graczy może rozegrać mecz, a jeden gracz wygra. Jeśli wygrywa gracz znajdujący się najbliżej dolnej krawędzi stołu, pozycja graczy jest zmieniana. Następnie powtarzamy krok 2., aktualizując liczbę wygranych i gier obok każdego gracza. Na przykład, jeśli Alice pokona Billy'ego, mamy
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
Mecze te trwają przez cały sezon i ostatecznie powodują, że gracze są umieszczani na liście w przybliżeniu według siły.
Niestety aktualizacja odbywa się w dość przypadkowy sposób, więc popełniane są błędy. Poniżej znajduje się kilka przykładów nieprawidłowych tabel, to znaczy tabel, których nie udało się utworzyć, wykonując powyższe kroki dla pewnej kolejności początkowej (zapomnieliśmy kolejności, którą zastosowaliśmy na początku sezonu) oraz sekwencji meczów i wyników:
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
Biorąc pod uwagę tabelę, w jaki sposób możemy skutecznie ustalić, czy jest poprawna? Możemy zacząć od odnotowania następujących kwestii:
Kolejność nazw nie ma znaczenia, ponieważ zapomnieliśmy o pierwotnej kolejności początkowej.
Całkowita liczba wygranych powinna wynosić połowę sumy rozegranych gier. (Pokazuje to, że pierwszy przykład powyżej jest nieprawidłowy).
- Załóżmy, że tabela jest poprawna. Następnie jest multigraf - wykres uwzględniający wiele krawędzi, ale bez pętli - z każdym wierzchołkiem odpowiadającym graczowi i każdą krawędzią rozegranego meczu. Następnie łączna liczba gier rozegranych przez każdego gracza odpowiada stopniowi wierzchołka gracza w multigrafii. Jeśli więc nie ma multigrafów o odpowiednich stopniach wierzchołków, tabela musi być niepoprawna. Na przykład nie ma multigrafów z jednym wierzchołkiem stopnia pierwszego i jednym stopnia trzeciego, więc drugi przykład jest nieprawidłowy. [Możemy skutecznie sprawdzić, czy istnieje taka multigraf.]
Mamy więc dwie kontrole, które możemy zastosować na początek, ale nadal pozwala to na nieprawidłowe tabele, takie jak trzeci przykład. Aby zobaczyć, że ta tabela jest nieprawidłowa, możemy pracować wstecz, wyczerpując wszystkie możliwe sposoby powstania tabeli.
Zastanawiałem się, czy ktoś może pomyśleć o algorytmie wielomianowym (w liczbie graczy i liczbie gier) rozwiązującym ten problem decyzyjny?