Помогите разобраться с функцией Гранди... Не могу понять, в чем прикол ставить в соответстие состоянию игры какое-то число... и почему это число есть mex{m1,m2,m3...mk}(читал статью на e-maxx.ru)?
P.S. просьба ссылки на гугл не давать, там уже смотрел, написано формальным языком и мало что понятно...
Там в лемме о ниме с увеличениями есть такое предложение: "Если же текущее состояние проигрышно, то тем более наличие или отсутствие этого хода ничего не может изменить", - а мне вот кажется, что смысл делать такой ход таки есть - это может позволить зациклить игру вничью. Однако Макс пишет, что так быть не может, поскольку игра с увеличениями сама должна быть реализована как ациклический граф. Но какие конкретно ограничения это налагает на возможные ходы? Например, если в игре можно увеличивать только на y, а есть две кучки размера x, то это - не проигрышная позиция, а ничейная. Вот как, спрашивается, в терминах нима (камни, кучки...) сделать игру с увеличениями, чтобы она была ациклической? А ведь если мы этого не поймём, то дальнейшее доказательство тоже
рушитсястановится применимым для непонятно какого множества игр, и так-то вот неочевидно, что для непустого.Это было раз. Ну а два - ксоры и индукция могут поспособствовать вере в истинность доказательства, но не его пониманию - это всё как-то слишком неинтуитивно. Хотелось бы услышать какие-нибудь нестрогие наводящие соображения, "чтоб руками пощупать", если, конечно, я не единственный такой отсталый из тех, кто в рейтинге.
То, что игра закончится-это дано,и зачем задумываться как оно реализовано:)
Ну например тут приведен такой пример:
Player II may keep adding chips, but will eventually run out of them.То есть,сумма всех увеличивающих ходов ограничена.Возможно,я что-то не так понял:)
Автору топика:
Попробуйте почитать книгу,ссылка на которую дана внизу статьи на e-maxx.ru
Почему берем числа-объъясняется в главах 8,9
Почему mex-теорема 71..
Внешние условия, которые заставляют игру быть ациклической, могут быть весьма сложными, и к делу не относятся. Как написал iensen, может быть ограничена сумма увеличивающих ходов.
Стандартный пример из "реальных" задач - это "лестничный ним": т.е. есть n ступенек, в каждой a[i] камней (i=0..n-1), и за один ход мы можем переложить любое количество камней из какой-то k-ой кучки в k-1-ю. Тогда, если рассмотреть только ступеньки с нечётными номерами, т.е. числа a[1], a[3], a[5], и т.д., то получится ним с увеличениями: мы можем либо уменьшить какое-то число (что соответствует перекладыванию из нечётной в чётную), либо увеличить (а это - из чётную в нечётную). Понятно, что увеличения здесь вполне ограничены: хотя бы даже из того факта, что камни всегда передвигаются в сторону к первой ступеньке, т.е. игра не может длиться бесконечно.
Здесь надо понимать этот фокус: у нас была сложная игра с состоянием-массивом чисел, а мы переходим от ней к ниму с увеличениями, и говорим - да, мы можем производить увеличения, и эти увеличения имеют сложную природу, не описываемую в терминах нима, однако лемма показывает, что эти увеличения нам не нужны вовсе. Значит, мы можем забыть про эти увеличения, и сказать, что теперь у нас - самый обычный ним.
Если проще соображать в терминах лестничного нима - то эту лемму можно понять так. Если мы рассмотрим только числа a[1], a[3], a[5], ..., то да, по условию мы можем увеличить какое-то из чисел - но зачем, если у противника на этот случай есть симметричная стратегия? Мы увеличили какое-то число, а противник уменьшит его обратно, при этом мы придём к тому же набору чисел a[1], a[3], a[5], ..., но уже окажемся ближе к концовке игры. Значит, увеличение - это глупый ход, он нам никак не улучшит ситуацию, не позволит достигнуть даже ничьи.
P.S. а про ксоры и мексы хорошо написал kuniavski.
P.P.S. конвей, конечно, крутая книжка, но сказать откровенно - очень тяжело написанная, так что я не уверен, что с её помощью разобраться будет проще.
а как можно узнать по числу m, сопоставленное состоянию, выигрышное это или проигрышное состояния?
P.S наверное если m отлично от нуля, то выигрышное, иначе нет?
ну вот есть небольшая подборка (если что-то получится понять из этого конспекта):
http://e-maxx.ru/upload/lections/lection_games.pdf
ну вот у меня кратко и написано там - это то, что набрано из чужих лекций и задач с проблемсетов.
а с материалом по этой теме вообще проблемы, и именно анализа задач я нигде не видел - сам рад бы был почитать
Или ещё проще - просто сделаем числовой used.
Только хотелось, видимо, совсем арифметического решения без массивов - имхо, маловероятно, что такое решение есть.
O(NM)O(N2) памяти юзается, так что выигрыша никакого нет.P.S. Вот только понять это заранее в некоторых задачах, возможно, вовсе не получится.
===============
Ну почему, кажется, можно и для любой ленивой динамики написать это. Просто надо сначала вызвать вычисление функции Гранди по всем переходам, а только затем, когда все вызовы уже сделаны, найти mex. Тогда глобальный массив будет в каждый момент времени использоваться только одним вызовом динамики, и проблем никаких быть не должно.
Что делает U?
Объединение
"Крестики-крестики"
Условие. Рассмотрим клетчатую полоску размера 1xN клеток. За один ход игроку надо поставить один крестик, но при этом запрещено ставить два крестика рядом (в соседние клетки). Проигрывает тот, кто не может сделать ход. Сказать, кто выиграет при оптимальной игре. (c) e-maxx.ru
Плз, сможете скинуть код от этой задачи используя Grandy?
при оптимальной игре ничья.
UPD бред написал. не прочитал внимательно задачу.