Pull to refresh

Comments 20

Пример с аудиторией — это скорее live lock.
Хм, если я не ошибаюсь, в LiveLock процессы просто делают бесполезную работу, я имел ввиду что каждый просто будет стоять на месте и ждать, пока пройдет другой.
мне кажется код тут не помешал бы.
слишком сухо получилось.
>> однопоточное java приложение с выходом в интернет

Любое j2me-приложение, устанавливающее connect, будет отличным примером.
>> В следующий раз (с моей стороны) – алгоритм топологической сортировки, который, в том числе, может быть применен при компиляции и анализе цепи активаций нейронов в нейросети.

Какие-нибудь бы попроще примеры на первый раз — например, определение порядка, в котором строить артефакты при помощи make-файла :)
Если вы имеете ввиду алгоритм ДеМукрона, то это и есть топологическая сортировка сети.
Меня смутило «в том числе», потому что основного примера я не увидел, был только пример " в том числе" :)
Не совсем понят практическую ценность.

Можете практических примеров привести поболее?

И желательно, чтобы они были описаны в формате:
1. Система делает А.
2. Пользователь делает Б.
3. Система делает В.
4.…

И где-то там в середке уже вплетается этот алгоритм, но что именно он делает для внешнего мира? Снутри то одной картинки хватило.
В том же примере с java2me, виртуальная машина могла бы определить deadlock, и запустить запрос разрешения у пользователя в отдельном потоке.
Главная практическая польза — реализация алгоритма на уровне ОС.
Позволю себе отметить, что это скорее академический интерес, нежели практическая польза.

Что для конкретного пользователя это даёт в конкретной системе?
Это, прежде всего, представляет интерес для разработчиков, упрощая решение каких-либо проблем.
Плюс для конечного пользователя такой же как от использования рекурсии или ООП, т.е. слабо поддаётся оценке.
Вот потому у нас и есть проблема коммерциализации изобретений — наизобретают тонны, а как до практики дойдет, то сразу «интерес для разработчиков».

Посмотрите в заголовок статьи!

:)
Алгоритм поиска в глубину является вспомогательным в других более практических алгоритмах: тут. Думаю, потом эти алгоритмы появятся в след. статьях, с указанием практического применения.

И так просто вспомнилось, когда мне нужно было C# загрузить файлы по некоторой маске (*.pdf) в БД из некоторой директории (в которой есть поддиректории), то я незадумываясь писал рекурсивную процедуру обхода директорий. Порядок в котором они обходились — и есть Поиск в глубину. В первую попавшуюся до упора, чуть назад в следующую… и.т.д.
Как раз вчера столкнулся с необходимостью поиска в глубину во время решения одной олимпиадной задачи. Тоже первым делом написал рекурсивную процедуру, но по быстродействию не проходило.
Посмотрел у другого участника его реализацию — вместо рекурсии используется очередь. То есть вместо вызова новой функции новое состояние ставится в очередь на обработку и по одному последовательно обрабатывается. Разница в быстродействии оказалась в 3-4 раза в пользу очереди. Количество состояний было ~50к, глубина рекурсии около 20 шагов.
Да. Согласен, что быстродействие и прожорливость по памяти ощутимо улучшается. =)

Позволю себе подправить Вашу опечатку, чтоб других не смущало: не «очередь», а «стэк» (рекурсия создает стэк вызовов функций).
Если там будет очередь, то получится BFS (поиск в ширину). =)
Спасибо, за поправку. Я тонкостей таких не знал. Вообще использование коллекции для хранения будущих обрабатываемых состояний увидел вчера впервые. Со стеком намного понятней осознать принцип алгоритма :)
«По сути deadlock – это взаимоблокировка, в результате которой система, или какие-то отдельные процессы начинают конкурировать за один ресурс»
Ой, рано отправил.
«По сути deadlock – это взаимоблокировка, в результате которой система, или какие-то отдельные процессы начинают конкурировать за один ресурс» — не совсем верно. Для взаимной блокировки нужна минимум пара ресурсов. Взаимной блокировки при споре об одном ресурсе быть не может. Пример: процесс A требует ресурс X и использует ресурс Y, а процесс B требует ресурс Y и использует ресурс X.
В примере с людьми в проходе тоже есть два ресурса — входы в этот проход с двух сторон. «Петя» стоит на входе в проход и ему нужен чтоб был свободен и выход чтоб пройти. Та же ситуация у «Васи» с другой стороны двери.
Контур и цикл в графе стало быть одно и то же? Никогда не встречал термин «контур» в этом контексте.
не совсем одно и то же, «цикл» принято говорить в неориентированных графах. в ориентированных — «контур».
Sign up to leave a comment.

Articles