Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Глава 22, Потоки в сетях. Возможно, наиболее простой структурой данных для хранения активных вершин является очередь FIFO
Возможно, наиболее простой структурой данных для хранения активных вершин является очередь FIFO. На рис. 22.28 показано, как работает этот алгоритм на демонстрационном примере сети. Из рисунка видно, что последовательность активных вершин удобно разбить на последовательность этапов, при этом этап составляют все вершины, которые находились в очереди после того, как все вершины, входившие в состав предыдущего этапа, были обработаны. Такого рода разбиение помогает нам ограничить общее время выполнения алгоритма. Свойство 22.13. Время выполнения реализации алгоритма выталкивания превосходящего потока на базе очереди FIFO пропорционально V2E. Доказательство: Мы ограничим число этапов, воспользовавшись для этой цели потенциальной функцией. Рассуждения, используемые для доказательства, представляют собой простой пример применения мощных средств анализа алгоритмов, а используемые структуры данных будут более подробно изучаться в части 8. Определим числовое значение величины ф равным 0, если в сети нет активных вершин, и равным максимальной высоте активных вершин в противном случае, затем рассмотрим, как отражается выполнение каждого этапа на величине ф. Пусть ho(s) есть начальная высота истока. Вначале ф = ho(s); по завершении ф = 0. Прежде всего, отметим, что число этапов, на которых высота некоторых вершин возрастает, не превосходит значения 2V2 — ho(s), поскольку высота каждой из V вершин, согласно свойству 22.11, может быть увеличена максимум до значения 2V. Поскольку ф может возрастать только тогда, когда увеличивается высота некоторых вершин, число этапов, когда ф возрастает, не может быть больше, чем 2V2 - ho(s). Если, однако, на каком-либо этапе высота ни одной из вершин не будет увеличена, то значение ф должно быть уменьшено, по меньшей мере, на 1, поскольку результат этапа заключается в том, чтобы протолкнуть весь избыточный поток из каждой активной вершины в вершины с меньшей высотой. Принимая во внимание все эти факты, приходим к заключению, что число этапов не должно быть больше 4V2: значение ф в начале есть ho(s) и может быть увеличено максимум 2 V2 - ho(s) раз, т.е., оно может быть уменьшено максимум 2V2 раз. Худший случай каждого этапа возникает тогда, когда все вершины находятся в очереди и все их ребра подвергаются проверке, что соответствует граничному значению, установленному для общего времени выполнения. Эта граница плотная. На рис. 22.29 изображено семейство транспортных сетей, для которых число этапов, использованных алгоритмом выталкивания избыточного потока пропорционально V2. ■ Поскольку предлагаемые нами реализации поддерживают неявное представление остаточной сети, они проверяют ребра, исходящие из вершины, даже если эти ребра не содержатся в остаточной сети (чтобы проверить, находятся они там или нет). Можно показать, что границу V2E, устанавливаемую свойством 22.13, можно уменьшить до V3 для реализаций за счет поддержки явного представления остаточной сети. Несмотря на то что эта теоретическая граница есть наименьшая из тех, с которыми нам приходилось сталкиваться при решении задачи вычисления максимального потока, это достижение, по-видимому, не заслуживает нашего внимания, особенно в случае разреженных графов, с которыми мы часто имеем дело на практике (см. 22.63-22.65).
|