Задачка.

Nov 17, 2006 20:36

Сегодня к нам на собеседование привели паренька. Мы побеседовали и в процессе он задал нам задачку: ножество (от одной и больше) одинаковых комнат соединены в кольцо одинаковыми коридорами. В самом начале в комнатах свет или зажжён или потушен, это единственное их отличие. Свет можно гасить и включать по желанию. Как определить количество комнат ( Read more... )

собеседование, задачки, умное

Leave a comment

Comments 18

Ня. _winnie November 17 2006, 17:55:41 UTC
1) отходит вправо(условное название направления) на Ni, запоминая состояние всех комнат.

2) возвращается налево обратно в ту же комнату на Ni команта, меняет в ней состояние света на противоположное.

3) отходит вправо(условное название направления) на 2*Ni, отмечая не изменился ли в какой-то комнате свет, через который отошёл на шаге. Этот шаг одновременно является шагом 1) с N(i+1) == 2*Ni.

Reply

Re: Ня. thesz November 17 2006, 18:07:41 UTC
Да, похоже, работает и логарифмический по времени.

У меня был тупее и квадратичный по времени, но всего с одним битом памяти комнат. ;)

Reply

Re: Ня. _winnie November 17 2006, 18:15:14 UTC
Ага. Не совсем логарифмический. LogN мотаний туда-сюда, линейное время (N + N/2 + N/4 + ...)

Reply

Re: Ня. _winnie November 17 2006, 18:21:27 UTC
>но всего с одним битом памяти
С учетом того, что на хранение числа N надо log N битов? ^_^

Reply


dizzy57 November 17 2006, 18:46:58 UTC
Можно за 4*(N*(N+1)/2) переходов между комнатами. Гася и зажигая свет в начальной, проверять, изменилось ли освещение в комнате, которая через i++ шагов по кольцу.
Стандартный алгоритм вычисления числа элементов дека, пользуясь только push_(front|back) и pop_(front|back).

Reply

thesz November 17 2006, 18:51:03 UTC
Угум. Это как раз предложенный мной вариант. ;)

Reply


zhurs November 17 2006, 20:11:47 UTC
в первой комнате включить свет.
Пройти во 2-ю, выключить, вернуться в первую и проверить, изменилась ли там ситуация.
Пройти в 4-ю выключая по пути свет и запоминая номер последней комнаты, где свет горел. Вернуться в первую - если там свет погас - запомненный номер и есть число комнат, если нет - идти до 8-й комнаты.

по памяти константа, по времени n

а логарифмический алгоритм принципиально не возможен

Reply

thesz November 17 2006, 20:27:05 UTC
Там да, NlogN. Как и у тебя.

Свет может гореть в любой комнате, поэтому явно не константа по памяти.

Reply

zhurs November 17 2006, 20:35:48 UTC
всего получается переходов :
4n, если сильно не повезёт - дойти до последней комнаты и обратно
2n - предыдущая итерация
n - перед этим
n/2 - ещё раньше
...

количество итераций - логарифм, а суммарная сложность 8n

а по памяти - нужно помнить на сколько комнат вперёд мы прошли, и номер *последней* освещённой комнати.
Если точно считать, то действительно не константа, а 2*log(2n) бит

Reply


pinkbagheera November 17 2006, 20:50:59 UTC
Вы явно были не квестеры. Надо было оставить в первой комнате шляпу и идти их считать по кругу :)))

Reply

thesz November 17 2006, 21:20:06 UTC
Ну, из квестов - только Space Quest N (N<=5) и Leisure Suit Larry, тоже не очень великие.

А! Ещё Full Throttle.

В общем, да, не квестовик. Но про шляпу в задании не было. Но идея хорошая. ;)

Reply

mjr_blayne November 17 2006, 21:31:59 UTC
Можно глаз оставить. Если глаза нет, то задачу всё равно не решить.

Reply

thesz November 17 2006, 21:40:56 UTC
А как тогда комнаты считать?

Reply


black_wolf_ltd November 18 2006, 10:09:12 UTC
> Сегодня к нам на собеседование привели паренька. Мы побеседовали и в процессе он задал нам > задачку

Кто к кому ходил на собеседование ? =))))

Кстати, а вы это кто =) ? (контора т.е., конечно)

Reply

thesz November 18 2006, 11:19:08 UTC
http://www.ipmce.ru/research/hpc/

Мы обменивались вопросами. Мы ему про программирование задавали, а он (сперва с нашей подачи) про общее положение дел, а затем в конце задал вот про эту задачку. ;)

Reply


Leave a comment

Up