Научная статья на тему 'Использование алгоритмов поиска кратчайшего пути на графах'

Использование алгоритмов поиска кратчайшего пути на графах Текст научной статьи по специальности «Математика»

CC BY
2575
275
i Надоели баннеры? Вы всегда можете отключить рекламу.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Похожие темы научных работ по математике , автор научной работы — Аксак Н. Г., Партыка С. А., Завизиступ Ю. Ю.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.
i Надоели баннеры? Вы всегда можете отключить рекламу.

Текст научной работы на тему «Использование алгоритмов поиска кратчайшего пути на графах»

УДК 681.3.00: 681.3.001.57: 681.324.001.57

Н.Г. AKCAK, канд. техн. наук, C.A. nAPTLIKA, аспирант,

Ю.Ю. ЗAВИЗИСTУП, канд. техн. наук (г. Харьков)

ИСПОЛЬЗОВАНИЕ АЛГОРИТМОВ ПОИСКА КРАТЧАЙШЕГО

ПУТИ НА ГРАФАХ

У статті пропонуються алгоритми, що дозволяють знаходити найкоротшу відстань, як для орієнтованих, так і для неорієнтованих графів. Детально розглянуті аспекти практичного застосування запропонованих алгоритмів. Комп'ютерне моделювання показує високу ефективність запропонованих алгоритмів при їхньому використанні у великих мережах передачі даних.

Algorithms which allows to find the shortest path both for oriented and for non-oriented graphs is offers in the article. The application of the suggested algorithms are given in detail. Simulation shows high effectiveness of the given algorithms when using it in large data transfer nets.

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

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

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

и надежности сети, т.е. повышение качества обслуживания пользователей и снижение стоимости эксплуатации всей системы.

Обзор существующих методов решения. При решении задач, связанных с поиском кратчайших путей на графах был реализован вариант алгоритма Литтла для вычислений с использованием TCP/IP сети. Система основана на концепции клиент-сервер. Приложение-сервер осуществляет самостоятельный перебор решений на основе алгоритма Литтла. Приложения-клиенты, подключаясь к серверу, сообщают ему о готовности начать перебор. Сервер выделяет в дереве перебора поддерево достаточной глубины и пересылает его клиенту, а затем получает от клиента результат перебора этого поддерева. Оценка, полученная клиентом, используется сервером для отсечения в ходе собственного перебора. Объединенные усилия машин сети позволили достичь весьма высокой производительности.

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

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

Алгоритм Дейкстры применим только для графов с положительными весами дуг. В общих чертах принцип работы алгоритма Дейкстры выглядит следующим образом [4].

Пусть дан граф G(X, Г), где {х1,...,хи} = X - множество вершин графа. Соответствие Г показывает взаимосвязи вершин. Дугам графа приписаны веса c(xi, Xj) > 0, задаваемые матрицей C размерности n х n.

Через xs е X обозначена начальная вершина, относительно которой ищутся все кратчайшие пути.

Пусть Ь(хг) - пометка вершины хг-, т.е. длина пути от начальной вершины х5 к вершине .

Присвоение начальных значений.

Шаг 1. Положить ) = 0 и считать эту пометку постоянной. Ь(хг-) = <х для всех х1 ф х5 и считать эти пометки временными. Положить р = 5 .

Обновление пометок.

Шаг 2. Для всех хг е Г(хр), пометки которых временные, изменить

пометки в соответствии со следующим выражением:

Х(хг) ^ шш|Х(хг), Ь(хр ) + с(хр,х,)].

Превращение пометки в постоянную.

Шаг 3. Среди всех вершин с временными пометками найти такую, для

*

которой Х(хг-) = шт[Х(хг)].

* * Шаг 4. Считать пометку вершины хг- постоянной и положить хр = хг- .

Шаг 5. Если все вершины помечены как постоянные, то пометки дают длины кратчайших путей. Останов. Если некоторые пометки являются временными, то перейти на шаг 2.

Если найдены все длины кратчайших путей, то сами пути можно получить, используя метод описанный в [4] при помощи следующей формулы:

* ^

Ь(хг ) + с(х1,х1) = Ь(хг),

*

где хг- - вершина, предшествующая хг- в кратчайшем пути от х5 к хг-.

Алгоритм Дейкстры имеет квадратичную вычислительную сложность.

В отличие от алгоритма Дейкстры, алгоритм Беллмана-Форда [4] применим для графов с общей матрицей весов. Он также является итерационным, но никакая пометка не рассматривается как постоянная. Этот алгоритм применим для графов с общей матрицей весов (т.е. в графе могут присутствовать дуги с отрицательными весами). Алгоритм Беллмана-Форда имеет кубическую вычислительную сложность для полного связного графа.

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

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

пары направленных дуг, построить такой алгоритм поиска кратчайших путей на графе, который обладает следующими свойствами:

- вычислительная сложность алгоритма близка к квадратичной;

- элементы матрицы весов графа могут быть положительными, отрицательными или равными нулю.

Описание алгоритма. Пусть дан граф 0(Х,Г), где {х1,...,хи} = X-множество вершин графа, дугам которого приписаны веса, задаваемые матрицей

т( хь хх) — т( хь хп)

М = : : :

т(хп, хх) — т(хп, хп)

размерности п х п, хх е X - начальная вершина, относительно которой

ищутся все кратчайшие пути. Элементы т(хи х ■) - матрицы весов М

могут быть как положительными, так и отрицательными или равны нулю. Если в графе О дуга (х^ х^) отсутствует, то принимаем ее вес

т(х, х ■) = да .

Пусть Л‘+1 =

Л

- вектор размерности к представляет собой очередь

активных вершин, где вектор Л1 - очередь сформированная из / = к -1 поступивших ранее вершин, а хк - последняя поступившая активная

вершина. На стадии инициализации л0 =к ].

Введем понятие активности вершины. Будем считать, что изменять текущие длины путей к смежным вершинам может только активная вершина. Обозначим через аі - активность вершины хі:

аі = 1 означает, что вершина хі является компонентом вектора Л1, но еще не была рассмотрена, т.е. является активной;

а{ = 0 означает, что вершина хі еще не была активна (т.е. не является

компонентом вектора Л1);

а = 2 означает, что вершина хг была рассмотрена в векторе Л1.

Введем вектор Б = [Сч,...,сХ ] размерности п х 1, где компонент вектора ёх, указывает вершину, предшествующую вершине хі в текущем

кратчайшем пути от начальной вершины х6, к вершине хі.

X

к

Пусть Ь(хі) - текущая длина пути от начальной вершины х,, к вершине хі .

Алгоритм 1

Шаг 1. Инициализация. Положим длину пути к вершине хж Ь(хх) = 0, а для всех остальных вершин хі - Ь(хі) =да, активность вершины xs становится равной аж = 1 (вершина хх становится первым компонентом вектора Л*). Положим Л0 = [хж ], к = 1, аг = 0 для всех хг Ф хв.

Шаг 2. Выбираем активную вершину хг из вектора Л*. В случае отсутствия активных вершин конец работы алгоритма.

Шаг 3. Находим вершину х^ є Г(хі), хі Ф х^ . В случае, если

просмотрены все вершины х;, то положить а = 2 и перейти на шаг 2.

Комментарий. После того как рассмотрены все смежные с хг вершины,

активность вершины хі устанавливается в аі = 2. Это означает, что вершина

хі была рассмотрена в векторе Л‘. При этом вершина хі остается в векторе

Л*, но на шаге 2 производится переход к следующей активной вершине.

Шаг 4. Изменяем длину пути к вершине х ■ исходя из следующего

правила:

1. Если а - = 1 и -^(Ху ) > ^(хі) + т(хі,хі), то положить

Чху ) = Дх,) + т(х1,х] ), Сх. = х,;

2. Если aj = 0, то положить Ь(.х] ) = Ь(х1) + т(хІУ х]), aj = 1,

Л*+1 = [Л* : х, ]Т, к = к + 1, Сх = хг;

і хі 1

3. Если а і = 2 и Ь( х-) > Х( хі) + т(хг,ху ), то положить

Х(ху) = Ь(хі) + т(х{,х}), ау- = 1, Л*+* = [Л* : ху-]Т, к = к + 1, Сх = хг .

Если длина пути к вершине х не изменилась, то перейти на шаг 3. Комментарий. Для второго и третьего случаев помещаем вершину хі в вектор Л*+1 (в первом случае хі уже находится в векторе Л* и все

вершины, которые могут изменить длину пути к хі будут рассмотрены в

векторе Л‘ раньше нее).

При поиске очередной активной вершины достаточно перейти к следующему компоненту вектора Л*. Данный подход позволяет на шаге 2 отказаться от перебора всех вершин при поиске очередной активной

вершины. Следует отметить, что размерность вектора Л1 увеличивается каждый раз на 1 при поступлении новой активной вершины.

Шаг 5. Поиск цикла отрицательного суммарного веса.

5.1. Положить г = х.

5.2. Если г = хх перейти на шаг 3.

5.3. Если г = ху-, конец работы алгоритма. Обнаружен цикл

отрицательного веса.

5.4. Положить г = ^ . Перейти на 5.2.

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

После окончания работы алгоритма множество Ь = {Ь(х1),...,1(хп)} содержит длины кратчайших путей от начальной вершины х5 к каждой вершине. Из вектора Б можно получить маршруты от вершины хж ко всем остальным вершинам графа.

Отличие алгоритма 2 от алгоритма 1 заключается в том, что в первом алгоритме при поиске смежных вершин на шаге 3 приходится просматривать все вершины графа. Данный подход оправдан в тех случаях, когда выполняется поиск кратчайших путей один раз.

В случаях, если изменения характеристик графа во времени не носят глобальный характер, например, появились или исчезли только несколько дуг, и поиск кратчайших путей на графе производится многократно, для каждой вершины предварительно формируется (2 х 1 )-вектор смежных

вершин У = [у1,...,у2]г, где 2число смежных вершин для вершины х1, а

компоненты у1,...,у2 вектора У] непосредственно сами смежные вершины:

Шаг 1. Положить г = 0.

iНе можете найти то, что вам нужно? Попробуйте сервис подбора литературы.

Шаг 2. Выбрать вершину х{. Если просмотрены все вершины - останов.

Шаг 3. Найти вершину х - е Г(хг), х1 ф х -. Если просмотрены все вершины, перейти на шаг 1.

Шаг 4. Положить г = г + 1, Уi = Ух- ]г . Перейти на шаг 3.

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

времени на работу алгоритма (например, при решении задач маршрутизации).

Алгоритм 2

Шаг 1 Алгоритма 1.

Шаг 2 Алгоритма 1.

Шаг 3. Выбираем вершину Xj из вектора Yt = [y1,...,yz]Г .

3.1. Если просмотрены все компоненты вектора Y , то положить at = 2, h = 0 и перейти на шаг 2.

3.2. Положить h = h + 1, x - = yh.

Шаг 4 Алгоритма 1.

Шаг 5 Алгоритма 1.

Методика моделирования и программная реализация.

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

При проведении эксперимента были проанализированы два параметра работы алгоритмов: затраты машинного времени t(N) и число операций сравнения и сложения H(N) в зависимости от числа вершин произвольного графа с неотрицательной матрицей связей.

Данный эксперимент проводился на ПЭВМ Pentium II-800 под управлением ОС Windows 2000, ОЗУ 128 Мбайт. Алгоритмы были реализованы на языке Object Pascal с применением визуальной среды программирования Delphi 5.

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

Для формирования положительной матрицы весов графа применялся метод “случайного места” [6], суть которого состоит в том, что предварительно вершины распределялись случайным образом внутри заданного прямоугольника, а затем определялись расстояния между ними. При этом для каждой вершины было введено ограничение в 5 смежных вершин. Количество вершин в графах варьировало от 100 до 1600 с шагом в 100 вершин. При проведении эксперимента случайным образом генерировались 20 графов для каждого значения числа вершин. При этом для каждого сгенерированного графа выборка значений параметров работы алгоритмов осуществлялась по 50 различным начальным вершинам.

Анализ полученных результатов. В ходе проведенного эксперимента были получены следующие результаты:

1. Алгоритм Дейкстры показал меньшие затраты машинного времени, чем алгоритм 1, но следует отметить, что алгоритм 1 в отличие от алгоритма Дейкстры применим для общей матрицы весов.

2. Алгоритм 2 показал намного меньшие затраты машинного времени, чем алгоритм Дейкстры. При этом относительный выигрыш по времени быстро увеличивается с ростом числа вершин графа.

Полученные зависимости затрат машинного времени от числа вершин графа приведены в табл. 1, а также на рис. 1 (приведены усредненные данные по 1000 выборкам для каждого числа вершин графа).

Таблица 1

Число вершин Время выполнения, Ш8.

Дейкстра Алгоритм 1 Алгоритм 2

100 0 0 0

200 1 1 0

300 3 3 0

400 6 6 0

500 9 11 0

600 14 22 1

700 18 32 1

800 24 43 2

900 31 61 3

1000 38 85 3

1100 46 131 4

1200 54 184 6

1300 64 237 6

1400 75 275 7

1500 85 300 9

1600 97 338 9

3. Число операций сравнения и сложения, необходимых для нахождения всех кратчайших длин путей на графе от исходной вершины, для алгоритма 1 больше, чем у алгоритма Дейкстры, что связанно с поиском циклов с отрицательным суммарным весом.

4. Число операций сравнения и сложения для алгоритма 2 значительно меньше, чем для алгоритма Дейкстры.

Полученные данные по чилу операций сложения и сравнения представлены на рис. 2.

800000 750000 700000 650000 600000 550000 500000 450000 400000 350000 300000 250000 200000 150000 100000 50000 0

100 200 300 400 500 600 700 800 900 1000 1100 1200 1300 1400 1500 1600 м

Рис. 2

Таблица 2

Число вершин Время выполнения, Ш8.

Дейкстра Алгоритм 1 Алгоритм 2

100 0 0 0

200 1 1 0

300 3 3 0

400 6 6 0

500 9 11 0

600 14 19 1

700 18 29 1

800 24 40 1

900 31 55 1

1000 38 75 2

1100 46 124 2

1200 54 175 2

1300 64 227 3

1400 75 261 3

1500 85 289 4

1600 97 325 4

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

Результаты работы алгоритма 1 и алгоритма 2 без поиска циклов с отрицательным суммарным весом приведены в табл. 2, а также на рис. 3 и 4.

Рис. 3

Рис. 4

Анализ полученных результатов работы алгоритмов показал, что при однократных расчетах кратчайших путей на графе для случаев с положительной матрицей весов более целесообразно использовать алгоритм Дейкстры, т.к. для алгоритма 2 необходимо предварительно построить вектора смежных вершин, на что требуется дополнительно выполнить N2 операций сравнения и сложения.

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

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

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

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

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

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

Список литературы: 1. Таненбаум Э. Компьютерные сети. - С.-Пб.: Питер, 2002. - 848 с. 2. Кульгин М. Практика построения компьютерных сетей. Для профессионалов. - С.-Пб.: Питер, 2001. - 304 с. 3. Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы. - С.-Пб.: Питер, 2002. - 672 с. 4. Кристофидес Н. Теория графов. Алгоритмический подход. - М.: Мир, 1978. - 432 с. 5. Бурков В.Н., Новиков Д.А. Теория графов в управлении организационными системами. - М.: Синтег, 2001. 6. Агеев Д. В. Модернизированная методика синтеза начальной структуры транспортной сети передачи данных // Труды УНДИРТ. - Одесса, 2001. - №2 (26). - С. 42 - 47.

Поступила в редакцию 28.09.2004

i Надоели баннеры? Вы всегда можете отключить рекламу.