Я задал эту проблему в MathOverflow , без какого-либо удовлетворительного ответа.
Рассмотрим следующую игру для двух игроков, которая является упрощением карточной игры Winner . (Следующая формулировка была взята из комментария Гийома Брунери о MathOverflow.)
Есть два игрока A и B. У каждого игрока есть набор карт (подмножество ), видимых от обоих игроков. Цель игры - избавиться от собственных карт. Первый игрок разыгрывает любую карту на столе, затем другой игрок должен разыгрывать (строго) большую карту, и так далее, пока один из игроков не сможет сыграть или не решит пройти. Затем карты на столе сбрасываются, и другой игрок начинает заново, разыгрывая любую карту (за которой последует карта большего размера). И так до тех пор, пока у одного из двух игроков не закончатся карты и они не выиграют игру.
Я хочу знать лучшую стратегию для игроков (если он может победить).
Формальное определение
Обозначим через конфигурацию игры, в которой набор карт первого игрока равен , набор карт второго игрока - , а самая большая карта на столе - , где означает, что на столе нет карты. Я хотел бы, чтобы алгоритм вычислял, учитывая , есть ли у первого игрока выигрышная стратегия в конфигурации .
Формально я хотел бы, чтобы алгоритм вычислял функцию определенную следующим образом:
Пусть , ,
Функция
где
Неправильные стратегии
Вот некоторые неправильные стратегии:
- Всегда разыгрывайте самую маленькую карту. Пусть , выигрышная стратегия для игрока A в конфигурации - сыграть карту . Если игрок А сыграет карту 1, он проиграет.
- Играйте наименьшую карту, если у другого игрока нет только одной карты. Это более сильная стратегия, чем стратегия 1, но она также неверна. Подумайте только о конфигурации . Если игрок А использует стратегию 2, он проиграет: , таким образом, игрок A проиграет.