Проверить список на зацикленность
Добавлено: 31 мар 2007, 08:17
Дан кортеж, где каждый элемент ссылается на следующий. Проверить самым быстрым способом, что список не зациклен. ANSI C.
.
.
Спасибо. Я так и ответил. Единственно, я думал, что этот алгоритм называется Ахиллес и черепаха -- может, поэтому интервьювер и сказал "almost correct"?Tony писал(а):Easy, it involves a "Turtle and Rabbit" algorithm
вряд ли. это настолько элементарный алгоритм, что никакогоnemiga писал(а):может, поэтому интервьювер и сказал "almost correct"?
Вот интересно. Алгоритм этот все знают и на интервью регулярно спрашивают.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.
На интервю, вообще, по-моему, часто задают искусственные вопросы. Кое-где это объяснимо тем, что, допустим, не хотят рассказывать, чем именно занимаются. Но кое-где, похоже, просто от того, что реальные задачи слишком просты и тривиальны.sz писал(а):Вот интересно. Алгоритм этот все знают и на интервью регулярно спрашивают.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
я его первый раз у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.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
Ntdsutil.exeStanislav писал(а):Вы это серьезно? Прямо в субботу утром?
У меня к вам встречная задача: случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.
Это алгоритм ловит все зацикления, а в реальной жизни тупое сравнивание ссылки на следующий элемент с запомненной ссылкой на 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.
Но лично я ни разу не видел его в реальной программе. По моему, он реально, по жизни, нафиг не нужен.
Ответ неправльный, но вопрос был не про этоAnry писал(а):Ntdsutil.exeStanislav писал(а):Вы это серьезно? Прямо в субботу утром?
У меня к вам встречная задача: случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.
Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.
SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?
Восстановление - это чтобы все работало так же, как и прежде! Не надо усложнять!Аман Ванкуверский писал(а):Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?
"Как прежде" оно работать не будет, в чем Вы убедитесь при первой попытке этого юзера открыть какой-нибудь файл с соответственно настроенными permissonsStanislav писал(а):Восстановление - это чтобы все работало так же, как и прежде! Не надо усложнять!Аман Ванкуверский писал(а):Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?![]()
Со специально настроенными - вы хотели сказать - Creator/Owner и конкретный аккаунт. А обычно филеи на компе имеют установленные права для Users, куда по умолчанию входят все пользователи домена.Аман Ванкуверский писал(а):"Как прежде" оно работать не будет, в чем Вы убедитесь при первой попытке этого юзера открыть какой-нибудь файл с соответственно настроенными permissonsStanislav писал(а):Восстановление - это чтобы все работало так же, как и прежде! Не надо усложнять!Аман Ванкуверский писал(а):Stanislav писал(а):случайно был удален OU из AD - предложите самый быстрый способ восстановления OU.SID-то будет другой, так что формально это не восстановлениеStanislav писал(а):В частности, если в OU только один пользователь, то может проще заново его создать ... ?![]()
BMHATK. Не вижу смысла продолжать разговорStanislav писал(а):Со специально настроенными - вы хотели сказать - Creator/Owner и конкретный аккаунт. А обычно филеи на компе имеют установленные права для Users, куда по умолчанию входят все пользователи домена.Аман Ванкуверский писал(а): "Как прежде" оно работать не будет, в чем Вы убедитесь при первой попытке этого юзера открыть какой-нибудь файл с соответственно настроенными permissons