Опубликован: 05.01.2015 | Доступ: свободный | Студентов: 2177 / 0 | Длительность: 63:16:00
Лекция 22:

Потоки в сетях

< Лекция 21 || Лекция 22: 123456789101112

Графы, орграфы и сети - это лишь математические абстракции, однако эти абстракции приносят практическую пользу, поскольку позволяют решать множество важных задач. В этой главе мы расширим модель решения сетевых задач, чтобы включить динамические ситуации, где по сети как бы движутся материальные потоки, а различным маршрутам назначены различные стоимости. Такие расширения позволяют решать удивительно широкие классы задач с обширным спектром применений.

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

В реальной жизни мы не всегда располагаем свободой выбора, как в этом идеализированном сценарии, поскольку сводимость одной задачи к другой доказана не для каждой пары задач и поскольку известно немного оптимальных алгоритмов решения любой из этих задач. Бывает, что еще не найдено прямое решение заданной задачи, и бывает, что еще не найдено эффективное сведение для заданной пары задач. Формулировка задачи о сетевых потоках, которой мы займемся в данной главе, имеет успех не только потому, что к ней легко сводятся многие практические задачи, но и потому, что было разработано множество эффективных алгоритмов решения базовых задач о потоках в сетях.

Приведенные ниже примеры демонстрируют диапазон задач, которые можно решить с помощью моделей сетевых потоков, алгоритмов и реализаций. Их можно разбить на общие категории, известные как задачи распределения (distribution), сопоставления (matching) и сечения (cut); и мы поочередно рассмотрим каждую из них. Мы не будем заострять внимание на конкретных деталях этих примеров, а выделим несколько различных взаимосвязанных задач. Ниже в этой главе, когда мы дойдем до разработки и реализации алгоритмов, будут даны строгие формулировки многих из упомянутых здесь задач.

В задачах распределения выполняется перемещение объектов из одного места сети в другое. Распределяются ли гамбургеры и цыплята в экспресс-закусочные, или игрушки и одежда в магазины уцененных товаров по автомагистралям страны, или программные продукты по компьютерам, или же биты информации по сетям связи для отображения на мониторах во всех уголках света - по сути, это одна и та же задача. Задачи распределения имеют дело с проблемами, возникающими при выполнении масштабных и сложных операций. Алгоритмы их решения широко применяются и играют важную роль в многочисленных приложениях.

Распределение товаров. У компании имеются фабрики, где производятся товары, оптовые базы для временного хранения товаров и розничные торговые точки, в которых товары продаются. Компания должна регулярно поставлять товары с фабрик в розничные торговые точки через оптовые базы, используя каналы распределения, которые обладают различными пропускными способностями и различными стоимостями доставки. Можно ли так организовать доставку товаров со складов в розничные торговые точки, чтобы везде удовлетворить спрос? Как определить маршрут наименьшей стоимости? Пример задачи распределения приведен на рис. 22.1.

На рис. 22.2 показана транспортная задача (transportation problem) - частный случай задачи распределения товаров, из которой убраны центры распределения и пропускные способности каналов. Эта версия задачи распределения товаров важна сама по себе и представляет интерес (как мы увидим в разделе 22.7) не только в плане непосредственного применения, но потому, что она не является каким-то " специальным случаем " - вообще-то по сложности решения она эквивалентна общей версии задачи.

Обмен данными. Коммуникационная сеть получает некоторое множество запросов на передачу сообщений между серверами, подсоединенными к этой сети через каналы связи (абстрактные кабели), которые передают данные с различной скоростью. Какова максимальная скорость передачи информации между двумя конкретными серверами в такой сети? Если с каждым каналом передачи данных связана некоторая стоимость передачи, то каков самый дешевый способ передачи данных с заданной скоростью, которая меньше максимально возможной?

Транспортные потоки. Городское управление должно разработать план аварийной эвакуации людей из города. Каково минимальное время для эвакуации города, если мы можем регулировать для этого транспортные потоки? Ответственные за планирование дорожного движения могут ставить подобные вопросы, обумывая решение, какие новые дороги, мосты или туннели могут смягчить проблему уличного движения в часы пик или в выходные дни.

В задаче сопоставления сеть представляет возможные способы соединения пар вершин. Необходимо выбрать такие возможные соединения (в соответствии с указанным критерием), чтобы не выбрать ни одну из вершин дважды. Другими словами, выбранное множество ребер определяет способ попарного соединения вершин. Можно сопоставлять колледжи и студентов, вакантные рабочие места и соискателей, предметы и свободные часы в школе или членов Конгресса США (Государственной Думы России, Верховной Рады Украины) и различные комитеты. В каждой из таких ситуаций возможны самые разнообразные критерии, определяющие характер выбора.

Задача о трудоустройстве. Служба трудоустройства организует интервью для группы студентов с некоторым количеством компаний, в результате чего появляется ряд предложений работы. Если считать, что интервью с последующим предложением работы представляет взаимную заинтересованность студента и компании, то для обеих сторон выгодно добиваться максимального трудоустройства. Из примера на рис. 22.3 видно, что эта задача может оказаться весьма сложной.

Задача сопоставления с минимальным расстоянием. Пусть даны два множества, содержащие по N точек; и нужно найти множество отрезков, соединяющих попарно точки из обоих множеств, чтобы суммарная длина отрезков была минимальна. Одним из приложений этой чисто геометрической задачи является радарная система слежения. Каждый поворот радиолокатора дает множество точек, соответствующих самолетам. Мы полагаем, что самолеты находятся достаточно далеко друг от друга, и тогда решение этой задачи позволяет связать положение каждого самолета при одном обороте радиолокатора с его позицией на следующем обороте, что дает возможность получить пути передвижения всех самолетов. К этой схеме сводятся некоторые другие приложения, связанные с выборкой данных.

 Задача распределения

Рис. 22.1. Задача распределения

В этом примере задачи распределения имеются три вершины предложения (от 0 до 2), четыре распределительных пункта (от 3 до 6), три вершины потребления (от 7 до 9) и двенадцать каналов. У каждой вершины предложения своя скорость производства, у каждой вершины потребления своя скорость потребления, а у каждого канала своя максимальная пропускная способность и стоимость доставки единицы продукции. Нужно так минимизировать стоимость доставки по каналам (без превышения пропускной способности каналов), чтобы общая скорость извлечения материалов из каждой вершины предложения была равна скорости производства; чтобы общая скорость поставки в вершины потребления была равна скорости его потребления; и чтобы общая скорость поступления в каждый распределительный пункт была равна скорости вывоза.

 Транспортная задача

Рис. 22.2. Транспортная задача

Транспортная задача похожа на задачу распределения, только в ней нет ограничений на пропускные способности каналов и распределительных пунктов. В данном примере имеются пять вершин снабжения (от 0 до 4), пять вершин потребления (от 5 до 9) и двенадцать каналов. Нужно найти самый дешевый способ распределения материала по каналам, чтобы предложения соответствовали спросу.

В частности, нужно присвоить каналам такие веса (скорость распределения), чтобы сумма весов исходящих ребер была равна поставкам в каждую снабжающую вершину; сумма весов входящих ребер равна суммарной потребности каждой потребляющей вершины; а общая стоимость (сумма произведений веса на стоимость для всех ребер) должна быть минимальной при всех таких вариантах присваивания.

 Вопросы трудоустройства

Рис. 22.3. Вопросы трудоустройства

Предположим, что шесть студентов ищут работу, а шесть компаний намерены принять на работу по одному студенту. Эти два списка (один упорядочен по студентам, а другой по компаниям) образуют список предложений работы, который отражает взаимный интерес в сопоставлении студентов и предлагаемых работ. Можно ли так сопоставить студентов и вакансии, чтобы каждое вакантное место было заполнено, а каждый студент получил работу? Если нельзя, то каково максимальное количество таких сопоставлений?

В задаче сечения (см. пример на рис. 22.4) удаляются ребра, чтобы разбить сеть на две или большее количество частей. Задачи сечения непосредственно связаны с фундаментальными вопросами связности графа, которые были рассмотрены в "Поиск на графе" . В этой главе мы познакомимся с центральной теоремой, которая демонстрирует удивительную взаимосвязь задачи сечения и задачи о сетевых потоках, которая существенно расширяет применимость алгоритмов вычисления сетевых потоков.

 Отсечение линий снабжения

Рис. 22.4. Отсечение линий снабжения

Здесь представлена система дорог, соединяющих базу снабжения армии (верху) с войсками (внизу). Черные точки означают план бомбовых ударов противника, которые должны отделить войска от снабжения. Противник стремится минимизировать стоимость бомбардировок (возможно, исходя из предположения, что стоимость отсечения ребра пропорциональна его ширине), а армия стремится разработать такую сеть дорог, чтобы максимизировать минимальную стоимость бомбардировок. Эта же модель полезна для повышения надежности сетей связи и во множестве других приложений.

Надежность сети. Телефонную сеть можно представить в виде некоторого множества кабелей, которые соединяют телефонные аппараты с помощью коммутаторов так, что возможен коммутируемый путь через междугородные линии связи, соединяющий любые два заданных телефона. Каково максимальное количество междугородных линий, которые можно отключить без нарушения связи между любой парой телефонных коммутаторов?

Отсечение линий снабжения. Страна ведет военные действия и осуществляет снабжение войск через систему взаимосвязанных дорог. Противник может прервать снабжение войск, нанося по дорогам бомбовые удары, причем количество бомб пропорционально ширине дороги. Какое минимальное количество бомб понадобится противнику, чтобы лишить войска снабжения?

С каждым из указанных выше приложений непосредственно связано множество сопутствующих вопросов, и имеются другие родственные модели, такие как задачи календарного планирования, описанные в "Кратчайшие пути" . В этой главе мы рассмотрим и другие примеры, но детально изучим лишь малую часть важных взаимосвязанных практических задач.

Изучаемая в данной главе модель сетевых потоков важна не только потому, что она ставит две четко сформулированные задачи, к которым сводятся многие другие практические задачи, но и потому, что существуют эффективные алгоритмы решения этих двух задач. Эта широта охвата привела к разработке многочисленных алгоритмов и реализаций. Решения, которые мы рассмотрим, демонстрируют противоречие между поисками универсальных приложений и поисками эффективных решений конкретных задач. Изучение алгоритмов вычисления сетевых потоков - увлекательное занятие, поскольку оно подводит нас значительно ближе к компактным и элегантным реализацям, которые достигают обеих целей.

В рамках модели сетевых потоков мы рассмотрим две конкретные задачи: задачу о максимальном потоке и задачу о потоке минимальной стоимости. Мы увидим взаимосвязь этих задач с моделью кратчайшего пути из "Кратчайшие пути" , с моделью линейного программирования из части VIII, а также с множеством моделей конкретных задач, в том числе и описанных выше.

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

В грубой классификации алгоритмов, начатой еще в "Виды графов и их свойства" , алгоритмы, которые будут изучаться в этой главе, относятся к " легким " , т.к. существуют простые реализации, которые гарантированно выполняются за время, пропорциональное полиному от размера сети. Другие реализации не гарантируют полиномиального времени выполнения в худшем случае, однако они компактны, элегантны и доказали на практике свою пригодность для решения широкого круга практических задач, наподобие описанных выше. Мы рассмотрим их подробно в силу их несомненной полезности. Исследователи по-прежнему заняты поисками более быстродействующих алгоритмов, которые позволят решать более крупные задачи, а также снизить затраты в критических приложениях. Идеальные оптимальные алгоритмы решения задач о сетевых потоках еще не открыты.

С другой стороны, известно, что некоторые задачи, которые сводятся к задачам о сетевых потоках, более эффективно решаются с помощью специализированных алгоритмов. В принципе, мы могли бы заняться реализацией и совершенствованием таких особых алгоритмов. В отдельных случаях такой поход вполне удобен, однако эффективные алгоритмы решения множества других задач (отличных от сведения к сетевым потокам) не существуют. Но даже в тех случаях, когда известны специализированные алгоритмы, разработка реализаций, способных превзойти удачные программы обработки сетевых потоков, может оказаться очень сложной. А кроме того, исследователи постоянно со-вершенствовуют алгоритмы обработки сетевых потоков, и они вполне могут превзойти известные специальные методы решения конкретной практической задачи.

С другой стороны, задачи о сетевых потоках представляют собой специальные случаи еще более общих задач линейного программирования (LP), о которых речь пойдет в части VIII. Для решения задач о сетевых потоках в сетях можно воспользоваться алгоритмом решения LP-задач (и многие так и делают), но все же рассматриваемые ниже алгоритмы обработки сетевых потоков намного проще и эффективнее, чем построенные на решении LP-задач. Однако исследователи продолжают совершенствовать программы решения LP-задач, и не исключена возможность того, что качественный алгоритм решения LP-задачи, будучи использованным для решения задач о сетевых потоках, сможет оказаться эффективнее алгоритмов, которые мы рассматриваем в данной главе.

Классические решения задач о сетевых потоках тесно связаны с другими, уже изученными нами, алгоритмами на графах, и мы можем написать на удивление компактные программы их решения, воспользовавшись разработанными ранее алгоритмическими инструментами. Как мы уже не раз видели, качественные алгоритмы и структуры данных могут существенно снизить время выполнения программ. Поиск методов разработки более совершенных реализаций классических обобщенных алгоритмов продолжается, и время от времени появляются новые подходы.

В разделе 22.1 мы рассмотрим основные свойства транспортных сетей, где веса ребер интерпретируются как пропускные способности, и свойства потоков, представленных вторым множеством весов ребер, которые удовлетворяют некоторым естественным условиям. Далее мы рассмотрим задачу о максимальном потоке, в которой вычисляется лучший (в некотором специальном техническом смысле) поток. В разделах 22.2 и 22.3 мы рассмотрим два подхода к решению задачи о максимальном потоке и несколько различных реализаций ее решения. Многие из алгоритмов и структур данных, которые мы рассматривали ранее, непосредственно связаны с разработкой эффективного решения задачи о максимальном потоке. У нас еще нет наилучшего алгоритма решения задачи о максимальном потоке, так что мы пока рассмотрим конкретные решения, используемые на практике. Для демонстрации применимости задачи о максимальном потоке в разделе 22.4 мы рассмотрим другие ее формулировки, а также другие варианты сведения.

Алгоритмы и реализации для задачи о максимальном потоке подготавливают нас к обсуждению еще более важной и более общей задачи о потоке минимальной стоимости, где ребрам присваиваются стоимости (еще одно множество весов ребер), и определяются стоимости потоков, а затем ищется решение задачи о максимальном потоке, обладающее минимальной стоимостью. Мы рассмотрим классическое общее решение задачи о потоке минимальной стоимости, известное как алгоритм вычеркивания циклов, а затем, в разделе 22.6, дадим конкретную реализацию алгоритма вычеркивания циклов, известную как сетевой симплексный алгоритм. В разделе 22.7 мы обсудим сведения к задаче о потоке минимальной стоимости, которые включают, помимо прочих, все только что описанные приложения.

Алгоритмы вычисления сетевых потоков - удобная тема для завершения данной книги по нескольким причинам. Это как бы вознаграждение за изучение базовых алгоритмических инструментов, таких как связные списки, очереди с приоритетами и общие методы поиска на графах. Классы обработки графов, представленные в этой книге, приводят к компактным и эффективным реализациям классов для решения задач о сетевых потоках. Эти реализации еще больше расширяют возможности решения задач и могут быть непосредственно использованы в многочисленных практических приложениях. А изучение их возможностей и ограничений позволяет установить контекст для поиска более совершенных алгоритмов решения еще более сложных задач - именно этим вопросам посвящена часть VIII.

< Лекция 21 || Лекция 22: 123456789101112
Бактыгуль Асаинова
Бактыгуль Асаинова

Здравствуйте прошла курсы на тему Алгоритмы С++. Но не пришел сертификат и не доступен.Где и как можно его скаачат?

Александра Боброва
Александра Боброва

Я прошла все лекции на 100%.

Но в https://www.intuit.ru/intuituser/study/diplomas ничего нет.

Что делать? Как получить сертификат?