Juan-Carlos Gandhi (
juan_gandhi) wrote2007-08-02 01:12 pm
![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
задача
На прямую высаживаются два робота с идентичной программой. Свои координаты они не знают. Как их запрограммировать так, чтобы они обязятельно встретились?
Кто-нибудь знает эту задачу? Или её решение? Мое решение было такое - случайные блуждания. Но мой коллега,
malaya_zemlya, заметил, что совершенно неочевидно, что роботы имеют доступ к датчику случайных чисел, а внутренний генератор... ну вы поняли, он их синхронизирует.
Есть идейки? Мне эту задачку задавали года три назад; я предложил случайные блуждания, но интервьюёры моё решение не поняли. Ну не учили их вероятности. Неважно, однако. Меня больше интересует наличие решения.
Кто-нибудь знает эту задачу? Или её решение? Мое решение было такое - случайные блуждания. Но мой коллега,
![[livejournal.com profile]](https://www.dreamwidth.org/img/external/lj-userinfo.gif)
Есть идейки? Мне эту задачку задавали года три назад; я предложил случайные блуждания, но интервьюёры моё решение не поняли. Ну не учили их вероятности. Неважно, однако. Меня больше интересует наличие решения.
no subject
no subject
Я утверждаю, что если расстояние между роботами достаточно велико, то они все равно друг друга найдут с вероятностью <=1/2
no subject
Ну как хозяин журнала кажется и предполагал – скармливаем этот бит в качестве затравки генератору случайных чисел (конгруэнтные и мультипликативные не предлагать, а shift-register, например, сойдёт) и устраиваем 1D случайное блуждание (алгоритм будет эффективнее, если шаг небыстро растёт со временем, но не будем лезть в такие детали). 1D случайное блуждание – возвратно, т.ч. они встретятся с вероятностью 1, если проживут достаточное время. Дальше детали – можно, например, оценить вероятность p(L, T), того, что они сумеют встретиться, если расстояние между ними L, а время жизни робота – T. Ну и т.п.
А если расстояние – световой год, то они не встретятся вобще – сломаются раньше.
no subject
Что важнее, дело вкуса, конечно
Гы. если уж начать учитывать физику, то совсем все просто становится. Если можно кидаться предметами, то все просто, если нельзя - то сдвинуться с места никак не получится.
no subject
Ну или, как я уже говорил, можно медленно растить шаг по времени, log(t) точно подойдёт, можно, наверное, и степень подобрать.
no subject
А доказывается, что вероятность меньше 1/2 так:
Роботы в паре образуют конечный автомат (на 2*x битов). Автомат начинает путешествовать в неизвестной точке d (где d - исходное расстояние между роботами) и ему надо найти 0. Поскольку число доступных битов ограничено, то в какой-то момент состояния обеих роботов зациклятся, при этом они могут оказаться ближе, чем сначала (и тогда в конце концов встречаются), либо нет (тогда встреча им не светит). Для каждого варианта, когда они сближаются, существует вариант, когда они удаляются (роботов меняем местами и запускаем с теми же исходными данными), отсюда вероятность успеха никак не может быть больше 1/2
no subject
Не спорю. Если вся память робота не достаточна для того, чтобы вместить исходное расстояние между роботами, измеренное в шагах робота, то роботу будет трудно. Это правда, но это такое слабое ограничение, что оно не интересно.
Вы не очень прочли, что я написал. ОК, подробнее: перейдя в систему координат одного из роботов, мы получаем процесс случайных блужданий статистически эквивалентный случайным блужданиям, с шагом 2 и частотой 1/2. Давайте забудем про эти двойки для простоты – такие мелочи нас сейчас не волнуют. Период генератора двух роботов всё равно L (а не L2, кстати). Допустим, что исходное расстояние между роботами d = 1. Какова вероятность того, что они разминутся? При L >> 1 это просто вероятность невозврата в начало координат, т.е., кажется, exp(-L1/2) (тут я мог слегка наврать – нет учебника под рукой, а искать в сети лень). Это не ноль, но это фантастически маленькое число для любого разумного L. А если d > 1 то вероятность всё равно такая же, поскольку по исчерпании цикла я удваиваю шаг. Всё.