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

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]dimrub@lj
2005-04-21 17:36 (ссылка)
Понял, как установить, в каком мы положении, за 3 хода (вместо четырех): далее таблица того, что мы передаем в зависимости от того, что у нас есть:

AAAA - A, A, A
AAAB - A, A, B
AABB - A, B, B
AABC - A, B, C

В третьем случае выбор между A и B производится либо случайным образом, либо лексиграфической сортировкой. Очевидно, что тот, кому мы передаем, в состоянии добавить первое A и понять, с чем мы начали игру.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]garvej@lj
2005-04-22 11:54 (ссылка)
Если знать полный расклад карт, то до правильного состояния можно дойти за 3 хода. То есть всего получается 6 ходов.

Допустим, мы знаем полный расклад карт. У всех не может быть одинаковый расклад (как это было для четырёх роботов). Мы можем присвоить роботам номера. Один назначается первым, а остальные номера идут по часовой стрелке (в том порядке, как передаются карты). То есть на данном этапе игры каждый робот может ввести эту нумерацию, и она будет одинакова у всех!

Всего есть 120 вариантов расклада карт. (Если учесть симметрию относительно обхода по часовой стрелке, то 40).
3 хода достаточно, чтобы дойти до одного из правильных состояний.
Для всех 120 раскладов получается такая картина. Минимальное количество ходов и кол-во раскладов:
0 - 6
1 - 6
2 - 48
3 - 60
Посчитал на компе. Вариантов немного, в общем-то можно и руками перебрать, а если исхитриться, то и кратко записать.

Для улучшения можно пытаться узнать полный расклад за 2 хода.
Но из двух ходов выжать всю информацию что-то не получается, чуть-чуть не хватает :)
Или действовать хитро: пробовать узнавать расклад, при этом одновременно продвигаясь к финишу.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[info]dimrub@lj
2005-04-22 16:16 (ссылка)
Если знать полный расклад карт, то до правильного состояния можно дойти за 3 хода. То есть всего получается 6 ходов.

На самом деле - 7, так как последний ход - это положить карты на стол. Итого - коллективными усилиями мы задачу решили :)

Всего есть 120 вариантов расклада карт. (Если учесть симметрию относительно обхода по часовой стрелке, то 40).

Если учесть еще и симметрию относительно видов карт, которых три, то раскладов остается еще меньше (хотя первоначальное число - 120 - мне кажется неверным, потому как 40 на 3 не делится). Я насчитал 12, хотя не уверен, что это верно (но особо и не старался :)).

Посчитал на компе.

Круто! Я тоже хотел было, но поленился, намалевал что-то на бумажке.

(Ответить) (Уровень выше) (Ветвь дискуссии)


[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.
Поэтому подсчитывать орбиты сложнее. Я тоже хотел сначала использовать большую степень симметрии, но надо чтобы решение было инвариантно относительно этой симметрии. Относительно сдвига по часовой стрелке - очевидно, инвариантно. Относительно большей группы, с учетом симметрии видов карт, вроде бы уже нет, но детально не проверял.

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

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

поправка
[info]garvej@lj
2005-04-24 22:59 (ссылка)
Расклад {{4,0,0},{0,2,2},{0,2,2}} имеет орбиту длины 9.

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


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