Войти в систему

Home
    - Создать дневник
    - Написать в дневник
       - Подробный режим

LJ.Rossia.org
    - Новости сайта
    - Общие настройки
    - Sitemap
    - Оплата
    - ljr-fif

Редактировать...
    - Настройки
    - Список друзей
    - Дневник
    - Картинки
    - Пароль
    - Вид дневника

Сообщества

Настроить S2

Помощь
    - Забыли пароль?
    - FAQ
    - Тех. поддержка



Пишет flaass ([info]flaass)
@ 2005-04-20 18:40:00


Previous Entry  Add to memories!  Tell a Friend!  Next Entry
задачка о консенсусе
Когда-то давно я слышал байку про космонавтов: воду в душ им подают под уменьшенным напором, чтобы на всех одновременно моющихся не хватало. Якобы, слаженная команда, даже не общаясь, а только крутя ручки гор-хол, может прийти к подходящему для всех решению: чтоб никто не обжигался и не замерзал.
Тогда же я придумал дискретный вариант, потом его сообща решали, а потом я решение забыл.

Колоду в 12 карт - по 4 пиковых валета, дамы и короля - раздают трем игрокам-роботам. Каждую секунду каждый игрок делает ход (все трое одновременно): либо передает одну карту соседу слева, либо бросает свои карты на стол. Команда выигрывает, если все трое одновременно бросили карты, и у каждого оказалались 4 одинаковые. Если кто-то бросил, а кто-то нет, или если кто-то бросил неодинаковые, то команда проигрывает.
Робот знает свои карты и помнит, какие карты передавались ему справа в предыдущие ходы. Что делать, он вычисляет из этого по некоторому детерминированному алгоритму, абсолютно одинаковому для всех троих.
Задача: придумать такой алгоритм, гарантирующий выигрыш. Желательно - поскорее. Смутно помню, что рекордный алгоритм у нас в любой ситуации приводил к выигрышу за не более чем 7 ходов.

Для проверки, что условия поняты правильно, задачка попроще: доказать, что если роботов 4 (а в колоду добавлены 4 пиковых туза), то эта задача неразрешима.
А вот если разрешить 4м роботам еще один способ победы: все бросили карты, и у всех одинаковый набор, - то, вроде, должна снова стать разрешимой. Не проверял, придумал только что.


Это, конечно, не про выборы папы, но навеяно.


(Читать комментарии) - (Добавить комментарий)


[info]garvej@lj
2005-04-24 22:47 (ссылка)
120 - мне кажется неверным, потому как 40 на 3 не делится

Здесь противоречия нет.
Дальше нельзя просто так делить 40 на 3, дело обстоит сложнее.
На подсчеты лучше всего посмотреть с точки зрения действия групп на множестве. Множество - 120 различных вариантов расклада. "Варианты с учётом симметрии" - называются орбитами группы преобразований, действующей на этом множестве. У меня использовалась циклическая группа порядка 3. Для неё орбита может состоять из одного или трёх элементов. Слова "у всех не может быть одинаковый расклад" указывают на то, что орбита не может иметь длину 1. Следовательно получается, что все орбиты имеют длину 3, поэтому для подсчёта их количества мы можем просто 120 разделить на 3.

Но если взять большую группу (учесть симметрию видов карт), то свойство, что орбиты имеют равную длину, уже не будет выполняться. Например, для расклада {{4,0,0},{0,4,0},{0,0,4}} орбита имеет длину 6 (это все "правильные состояния"). А расклад {{4,0,0},{0,2,2},{0,2,2}} имеет орбиту длины 12.
Поэтому подсчитывать орбиты сложнее. Я тоже хотел сначала использовать большую степень симметрии, но надо чтобы решение было инвариантно относительно этой симметрии. Относительно сдвига по часовой стрелке - очевидно, инвариантно. Относительно большей группы, с учетом симметрии видов карт, вроде бы уже нет, но детально не проверял.

Решили, но вопрос об оптимальности остался. И скорее всего так и останется ;) - фиг докажешь.
Оказывается, задача неразрешима для любого чётного числа роботов. А для нечётного вроде бы нет препятствий, и скорее всего подойдёт обобщение алгоритма: сначала узнаём расклад, а потом собираем.

(Ответить) (Уровень выше)


(Читать комментарии) -