Алгоритм Дініца — поліноміальний алгоритм для знаходження максимального потоку у транспортної мережі, запропонований 1970 року ізраїльським (колишнім радянським) ученим Юхимом Дініцем. І алгоритм Дініца, і (алгоритм Едмондса-Карпа) незалежно показують, що в алгоритмі Форда — Фалкерсона в разі найкоротшого доповнювального шляху його довжина доповнює шляху не зменшується. Часова складність алгоритму становить . Отримати таку оцінку дозволяє введення понять допоміжної мережі та блокуючого (псевдомаксимального) потоку. В мережах з одиничними пропускними здатностями існує сильніша оцінка часової складності: .
Опис
Нехай — транспортна мережа, в якій і — відповідно пропускна здатність і потік через ребро .
Залишкова пропускна здатність — відображення як: якщо , то:
- ,
- ,
інакше .
Залишкова мережа — граф , де .
Доповнювальний шлях — шлях у залишковому графі .
Нехай — довжина найкоротшого шляху з у у графі . Тоді допоміжною мережею графа є граф , де
- .
Блокувальний потік — потік такий, що граф , де не містить шляху .
Алгоритм
- Вхід: мережа .
- Вихід: потік максимальної величини .
- Встановити для кожного .
- Створити з графа . Якщо , то зупинитися і вивести .
- Знайти блокувальний потік у .
- Доповнити потік потоком і перейти до другого кроку.
Аналіз
Можна показати, що щоразу кількість ребер у блокувальному потоці збільшується принаймні на одне, тому в алгоритмі не більше блокувальних потоків, де — кількість вершин у мережі. Допоміжна мережа може бути побудована обходом у ширину за час , а блокувальний потік на кожному рівні графа може бути знайдений за час . Тому час роботи алгоритму Дініца дорівнює .
Використовуючи такі структури даних, як [en], можна знаходити блокувальний потік на кожній фазі за час , тоді час роботи алгоритму Дініца може бути покращено до .
Приклад
Нижче наведено симуляцію алгоритму Дініца. У допоміжній мережі вершини з червоними мітками — значення . Блокувальний потік позначено синім.
Крок | ||||
---|---|---|---|---|
1 | Блокувальний потік складається зі шляхів:
Отже, блокувальний потік містить 14 одиниць потоку, а величина потоку дорівнює 14. Варто зауважити, що доповнювальний шлях має три ребра. | |||
2 | Блокувальний потік складається з одного шляху з п'ятьма одиницями потоку. Отже, блокувальний потік містить п'ять одиниць, а величина потоку дорівнює . Варто зауважити, що доповнювальний шлях має чотири ребра. | |||
3 | Сток недосяжний у мережі . Тому алгоритм зупиняється і повертає максимальний потік величини 19. Варто зауважити, що в кожному блокувальному потоці кількість ребер у доповнювальному шляху збільшується хоча б на одне. |
Література
- Дініц, Юхим (2006). Dinitz' Algorithm: The Original Version and Even's Version. У Ґолдреїх, Одед; Розенберг, Арнольд Л.; Селман, Алан Л. (ред.). (PDF). Springer. с. 218—240. ISBN . Архів оригіналу (PDF) за 20 серпня 2016. Процитовано 24 листопада 2017.
{{}}
: Назва URL містить вбудоване вікіпосилання () - Корте, Б. Х.; Віген, Дженс (2008). 8.4 Blocking Flows and Fujishige's Algorithm. Combinatorial Optimization: Theory and Algorithms (Algorithms and Combinatorics, 21). Springer Berlin Heidelberg. с. 174—176. ISBN .
Посилання
Ця стаття містить правописні, лексичні, граматичні, стилістичні або інші мовні помилки, які треба виправити. (листопад 2017) |
Вікіпедія, Українська, Україна, книга, книги, бібліотека, стаття, читати, завантажити, безкоштовно, безкоштовно завантажити, mp3, відео, mp4, 3gp, jpg, jpeg, gif, png, малюнок, музика, пісня, фільм, книга, гра, ігри, мобільний, телефон, android, ios, apple, мобільний телефон, samsung, iphone, xiomi, xiaomi, redmi, honor, oppo, nokia, sonya, mi, ПК, web, Інтернет