У моєму місцевому сквеш-клубі є драбина, яка працює наступним чином.
- На початку сезону ми будуємо таблицю з іменем кожного члена клубу на окремому рядку.
- Потім ми записуємо кількість виграних ігор та кількість ігор, що граються поруч із кожним іменем (у формі: перемоги гравця / ігри).
Таким чином, на початку сезону стіл виглядає приблизно так:
Carol 0/0
Billy 0/0
Alice 0/0
Daffyd 0/0
Будь-який два гравці можуть зіграти матч, причому один гравець виграє. Якщо гравець, що знаходиться найближче до нижньої частини таблиці, виграє, то положення гравців змінюється. Потім повторюємо крок 2., оновлюючи кількість виграшів та ігор поруч із кожним гравцем. Наприклад, якщо Еліса б’є Біллі, у нас є
Carol 0/0
Alice 1/1
Billy 0/1
Daffyd 0/0
Ці поєдинки тривають протягом усього сезону і в підсумку призводять до того, що гравці будуть перераховані приблизно в сильному порядку.
На жаль, оновлення відбувається досить випадково, тому допускаються помилки. Нижче наведено декілька прикладів недійсних таблиць, тобто таблиць, які неможливо було скласти, правильно виконавши наведені вище кроки для деякого початкового порядку (ми забули порядок, який ми використовували на початку сезону) та послідовність збігів та результатів:
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
Надавши таблицю, як можна ефективно визначити, чи справедлива вона? Ми можемо почати, зазначивши наступне:
Порядок імен не має значення, оскільки ми забули початковий початковий порядок.
Загальна кількість виграшів повинна бути половиною суми від кількості зіграних ігор. (Це показує, що перший приклад вище недійсний.)
- Припустимо, таблиця дійсна. Потім з'являється мультиграф - графік, що містить кілька ребер, але без циклів - з кожною вершиною, що відповідає гравцеві, а кожен край грає в матчі. Тоді загальна кількість ігор кожного гравця відповідає ступеню вершини гравця в мультиграфі. Отже, якщо немає мультиграфа з відповідними вершинними градусами, то таблиця повинна бути недійсною. Наприклад, не існує мультиграфа з однією вершиною ступеня першого і однією з третього ступеня, тому другий приклад є недійсним. [Ми можемо ефективно перевірити наявність такого мультиграфа.]
Таким чином, у нас є дві перевірки, з яких можна застосувати, для початку, але це все ще дозволяє недійсні таблиці, наприклад, третій приклад. Щоб побачити, що ця таблиця є недійсною, ми можемо працювати назад, вичерпуючи всі можливі способи виникнення таблиці.
Мені було цікаво, чи може хтось придумати поліноміальний час (за кількістю гравців та кількістю ігор) алгоритм вирішення цієї проблеми рішення?