Search
Write a publication
Pull to refresh

Comments 8

Алгоритм пожалуй элегантный, но ассимптотическая сложность пугает. O((V**2)*E)) где E количество ребер, то есть может быть V!, в википедии подсмотрел)) А задача то из реального мира. Неужели не было придумано оптимизаций или эвристик?

Алгоритм Диница + capacity scaling даёт O(V^3\log U), U - максимальная пропускная способность.Вроде как есть варианты сделать O(V^3). В любом случае интереснее кто быстрее номинально, а не асимптотически. Лет 10 назад когда плотно изучал вопрос хороши были как раз Диница и Preflow, последний как раз был хорош благодаря двум эвристикам (max height и global relabeling), благодаря которым становился очень быстр. У Эндрю Гольдберга в личной библиотеке были реализации обоих и вроде как они были сопоставимы по скорости. К сожалению эта библиотека скорее всего канула в лету. Префлоу я недавно видел в лимоне, в networkx реализованы оба, можно попробовать замерить, но учитывая что они там на питоне реализованы это будет очень условно. На алгоритм Бойкова-Колмогорова можно обратить внимание, он по асимптотике не очень, но вроде как зарекомендовал себя на практике для выделения границ в изображении.

P. S. @csharpminor0 алгоритм Диница не для начинающих ...

P. S. @csharpminor0 алгоритм Диница не для начинающих ...

Статья посвящена простой передачи сути алгоритма, словами типа "от старого дуба 10 шагов налево и ставишь ведро здесь" а не замерам сложности алгоритма и не сравнению сложности. Для начального решения задачи сложность не важна. Преждевременная оптимизация - самое зло. Но отпугивание начинающих словами "это покамест не для тебя..." - еще большее зло.

Если сложность не важна, почему для начинающих Вы решили рассказывать алгоритм Диницы, а не алгоритм Форда-Фалкерсона?

Потому что изначально не планировал выпускать цикл статей или учебных курсов в какой-то определенной последовательности с градацией уровней от простого к сложному, а просто захотелось рассказать про алгоритм Диница

Интересный алгоритм. Получается, это взвешенный направленный (движение бывает односторонним, файрволлы разрешают передачу данных только в одну сторону и т.д.) граф с динамически изменяемыми весами рёбер во время выполнения задачи.

Sign up to leave a comment.

Articles