Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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








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

Мы сосредоточимся на тех же базовых задачах, которые в разделе 18.7 были опреде­лены для неориентированных и невзвешенных графов. Мы вновь формулируем их здесь, обращая внимание на то, что определение 21.1 неявно обобщает их, с учетом весов в се­тях.

Кратчайший путь источник-сток. Для заданной начальной вершины s и конечной вер­шины t найти кратчайший путь в графе из s в t. Мы будем говорить о начальной верши­не, как об источнике (source), а о конечной вершине — как о стоке (sink), за исключени­ем тех ситуаций, где такое использование упомянутых терминов конфликтует с определением источников (вершин без входящих ребер) и стоков (вершин без исходящих ребер) в орграфе.

Кратчайшие пути из единственного источника. Для заданной начальной вершины s найти кратчайшие пути из s во все остальные вершины графа.

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

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

На рис. 21.3 показаны кратчайшие пути для сети, изображенной на рис. 21.1. В сетях с V вершинами для решения задачи с единственным источником нужно определить V пу­тей, а для решения задачи всех пар потребуется отыскать V2 путей.

РИСУНОК 21.3. ВСЕ КРАТЧАЙШИЕ ПУТИ

Эта таблица дает все кратчайшие пути в сети рис. 21.1 вместе с их длинами. Данная сеть является сильно связной, так что в ней существуют пути, соединяющие каждую пару вершин.

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



Часть 5. Алгоритмы на графах


В наших реализациях мы используем более компактное представление, чем эти спис­ки путей; мы ранее уже отмечали это в разделе 18.7, и, кроме того, обсудим его подроб­но в разделе 21.1.

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

Задачи о кратчайших путях в различных видах возникают во широком спектре при­ложений. Многие приложения интуитивно приводят непосредственно к их геометричес­кой интерпретации, тогда как другие вовлекают структуры произвольного вида. Так же, как и в случае минимальных остовных деревьев (MST), которые рассматривались в гла­ве 20, мы иногда будем обращаться к геометрической интерпретации, дабы облегчить по­нимание алгоритмов решения этих задач, не упуская при этом из виду того факта, что наши алгоритмы действуют должным образом и в более общих структурах. В разделе 21.5 мы рассмотрим специализированные алгоритмы для эвклидовых сетей. Чрезвычайно важ­но, что в разделах 21.6 и 21.7 будет показано, что базовые алгоритмы эффективны для многочисленных приложений, в которых при помощи сетей представляется абстрактная модель вычислений.

Дорожные карты. Таблицы, которые дают расстояния между всеми парами главных городов, - это замечательная особенность многих дорожных карт. Мы предполагаем, что издатель карты позаботился о том, чтобы расстояния, несомненно, были кратчайшими, но наше допущение не обязательно всегда верно (см., например, упражнение 21.11). В об­щем случае, такие же таблицы существуют и для неориентированных графов, которые мы будем рассматривать как сети с ребрами в обоих направлениях, соответствующими каж­дой дороге. Вполне можно подумать об их применении к улицам с односторонним дви­жением — для карт города, а также в отношении ряда аналогичных приложений. Как было показано в разделе 21.3, нетрудно также обеспечить и другую полезную информацию, как, например, таблицу, которая сообщает о том, как выполнить (т.е. пройти) кратчайшие пути (см. рис. 21.4). В современных приложениях встроенные системы автомобилей и дру­гих транспортных систем предоставляют возможности подобного рода. Карты являются эвклидовыми графами, и в разделе 21.4 рассматриваются алгоритмы поиска кратчайших путей, которые при поиске учитывают позицию вершины.

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


Глава 21. Кратчайшие пути



 


ментарными алгоритмами и алгоритмически неразрешимыми задачами, но также подво­дят нас к мощным и общим механизмам принятия решений. Как и для алгоритмов MST из главы 20, мы часто смешиваем понятия веса, стоимос­ти и расстояния. Как и там, мы обычно используем естественную привлекательность гео­метрической интуиции, даже рассматривая более общие постановки задач с произволь­ными весами ребер; так, мы говорим о " длине" пути и ребра вместо того, чтобы сказать " вес", и говорим, что один путь " короче" другого вместо того, чтобы сказать, что он " име­ет меньший вес". Мы также можем сказать, что v находится " ближе" к s, чем w, вместо того, чтобы говорить, что " ориентированный путь наименьшего веса из s в v имеет вес меньше, чем вес ориентированного пути наименьшего веса из s в w", и т.д. Это проявля­ется и в стандартном использовании термина " кратчайшие пути" и выглядит естественным,

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

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


РИСУНОК 21.4. РАССТОЯНИЯ И ПУТИ

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








© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.