Проверить список на зацикленность
Правила форума
Пожалуйста, ознакомьтесь с правилами данного форума
Пожалуйста, ознакомьтесь с правилами данного форума
- nemiga
- Маньяк
- Сообщения: 2425
- Зарегистрирован: 02 сен 2006, 19:05
- Откуда: Minsk -> Seoul -> Ottawa
Проверить список на зацикленность
Дан кортеж, где каждый элемент ссылается на следующий. Проверить самым быстрым способом, что список не зациклен. ANSI C.
.
.
- Stanislav
- Mr. Minority Report
- Сообщения: 45211
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
- nemiga
- Маньяк
- Сообщения: 2425
- Зарегистрирован: 02 сен 2006, 19:05
- Откуда: Minsk -> Seoul -> Ottawa
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
вряд ли. это настолько элементарный алгоритм, что никакогоnemiga писал(а):может, поэтому интервьювер и сказал "almost correct"?
обшепринятого названия у него нету.
это из серии, что удаление элемента из бинарного tree - это
алгоритм вирта. ну да, в какой-то книжке так написано, но
по жизни он называетcя "удаление элемента из бинарного дерева" :)
- sz
- Маньяк
- Сообщения: 1266
- Зарегистрирован: 17 фев 2003, 19:34
Вот интересно. Алгоритм этот все знают и на интервью регулярно спрашивают.Tony писал(а):Easy, it involves a "Turtle and Rabbit" algorithm.
You have two pointers traversing the linked list - one fast (2 steps at a time), another slow (1 step). If the fast one reaches the end of the list, there is obviously no loop involved. If the fast one passes the slow, there must be a loop.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
- nemiga
- Маньяк
- Сообщения: 2425
- Зарегистрирован: 02 сен 2006, 19:05
- Откуда: Minsk -> Seoul -> Ottawa
На интервю, вообще, по-моему, часто задают искусственные вопросы. Кое-где это объяснимо тем, что, допустим, не хотят рассказывать, чем именно занимаются. Но кое-где, похоже, просто от того, что реальные задачи слишком просты и тривиальны.sz писал(а):Вот интересно. Алгоритм этот все знают и на интервью регулярно спрашивают.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
.
- ajkj3em
- Маньяк
- Сообщения: 2063
- Зарегистрирован: 12 ноя 2006, 06:53
я его первый раз уcлышал в немного другой форме на военнойsz писал(а):Вот интересно. Алгоритм этот все знают и на интервью регулярно спрашивают.Tony писал(а):Easy, it involves a "Turtle and Rabbit" algorithm.
You have two pointers traversing the linked list - one fast (2 steps at a time), another slow (1 step). If the fast one reaches the end of the list, there is obviously no loop involved. If the fast one passes the slow, there must be a loop.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
кафедре в универе - дана функция генератора псевдо-случайных
чисел x(n) = f( x(n-1) ), найти ее период для данного seed value.
кстати хороший вариант задавать местным на интервью. про список
с двумя поинтерами все ответ знают, а на генераторе - сыпятся :)
- Anry
- Маньяк
- Сообщения: 1616
- Зарегистрирован: 03 ноя 2004, 13:46
- Откуда: Волгоград-Coquitlam
- Stanislav
- Mr. Minority Report
- Сообщения: 45211
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Это алгоритм ловит все зацикления, а в реальной жизни тупое сравнивание ссылки на следующий элемент с запомненной ссылкой на 1 элемент эффективнее, поскольку использовать зацикленные списки с петлей на конце ни разу не приходилось.sz писал(а):Вот интересно. Алгоритм этот все знают и на интервью регулярно спрашивают.Tony писал(а):Easy, it involves a "Turtle and Rabbit" algorithm.
You have two pointers traversing the linked list - one fast (2 steps at a time), another slow (1 step). If the fast one reaches the end of the list, there is obviously no loop involved. If the fast one passes the slow, there must be a loop.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
А поскольку вопрос был о самом эффективном алгоритме, я голосую за соответствующую имплементацию метода add, которая всегда знает, будет ли список закольцован

Последний раз редактировалось Stanislav 31 мар 2007, 21:48, всего редактировалось 1 раз.
- Stanislav
- Mr. Minority Report
- Сообщения: 45211
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Ответ неправльный, но вопрос был не про этоAnry писал(а):Ntdsutil.exeStanislav писал(а):Вы это серьезно? Прямо в субботу утром?
У меня к вам встречная задача: случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.

- Аман Ванкуверский
- Маньяк
- Сообщения: 2759
- Зарегистрирован: 18 окт 2005, 01:10
- Stanislav
- Mr. Minority Report
- Сообщения: 45211
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Восстановление - это чтобы все работало так же, как и прежде! Не надо усложнять!Аман Ванкуверский писал(а):Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?


- Аман Ванкуверский
- Маньяк
- Сообщения: 2759
- Зарегистрирован: 18 окт 2005, 01:10
"Как прежде" оно работать не будет, в чем Вы убедитесь при первой попытке этого юзера открыть какой-нибудь файл с соответственно настроенными permissonsStanislav писал(а):Восстановление - это чтобы все работало так же, как и прежде! Не надо усложнять!Аман Ванкуверский писал(а):Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?![]()
- Stanislav
- Mr. Minority Report
- Сообщения: 45211
- Зарегистрирован: 19 окт 2005, 16:33
- Откуда: Moscow - Richmond - New Wesт - Burnaby - PoCo
Со специально настроенными - вы хотели сказать - Creator/Owner и конкретный аккаунт. А обычно филеи на компе имеют установленные права для Users, куда по умолчанию входят все пользователи домена.Аман Ванкуверский писал(а):"Как прежде" оно работать не будет, в чем Вы убедитесь при первой попытке этого юзера открыть какой-нибудь файл с соответственно настроенными permissonsStanislav писал(а):Восстановление - это чтобы все работало так же, как и прежде! Не надо усложнять!Аман Ванкуверский писал(а):Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?![]()
- Аман Ванкуверский
- Маньяк
- Сообщения: 2759
- Зарегистрирован: 18 окт 2005, 01:10
BMHATK. Не вижу смысла продолжать разговорStanislav писал(а):Со специально настроенными - вы хотели сказать - Creator/Owner и конкретный аккаунт. А обычно филеи на компе имеют установленные права для Users, куда по умолчанию входят все пользователи домена.Аман Ванкуверский писал(а): "Как прежде" оно работать не будет, в чем Вы убедитесь при первой попытке этого юзера открыть какой-нибудь файл с соответственно настроенными permissons