Научная статья на тему 'Быстрый поиск кратчайших путей на графах с предопределенными решениями'

Быстрый поиск кратчайших путей на графах с предопределенными решениями Текст научной статьи по специальности «Математика»

CC BY
477
21
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ТРАНСПОРТНЫЕ СЕТИ / КРАТЧАЙШИЕ ПУТИ / ВЫЧИСЛИТЕЛЬНАЯ СЛОЖНОСТЬ

Аннотация научной статьи по математике, автор научной работы — Ревотюк М. П., Кароли М. К., Хаджинова Н. В.

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

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

QUICK SEARCH OF The shortest paths on the graph WITH A PREDETERMINED DECISION

On the classical problem of searching the shortest paths in graphs considered the possibility of accelerating the search procedure by incorporating a priori information about the search space. Global initialization of state variables predefined search and selection solutions can improve performance of multiple procedures to find paths to a linear dependence on the volume of the scanned area.

Текст научной работы на тему «Быстрый поиск кратчайших путей на графах с предопределенными решениями»

Доклады БГУИР

2014 № 4 (82)

УДК 656.2-50: 519.8

БЫСТРЫЙ ПОИСК КРАТЧАЙШИХ ПУТЕЙ НА ГРАФАХ С ПРЕДОПРЕДЕЛЕННЫМИ РЕШЕНИЯМИ

МП. РЕВОТЮК, М.К. КАРОЛИ, Н.В. ХАДЖИНОВА

Белорусский государственный университет информатики и радиоэлектроники П. Бровки, 6, Минск, 220013, Беларусь

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

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

Ключевые слова: транспортные сети, кратчайшие пути, вычислительная сложность.

Постановка задачи

Известно, что при поиске кратчайших путей на нагруженном ориентированном графе 0(N, А), где N - множество вершин, А - множество дуг с весовой функцией Ж: А ^ Я+, время построения дерева путей одним из лучших для подобной задачи алгоритмом Дийкстры растет в первом приближении по закону х • log2 х с увеличением расстояния х от корня дерева. Особенность алгоритма Дийкстры - однократный просмотр дуг формируемого дерева. Это отражается появлением в асимптотиках вычислительной сложности различных реализаций процедур поиска количества дуг. Например, реализация алгоритма Дийкстры с отображением очередей анализируемых вершин на кучи Фибоначчи характеризуется сложностью 0(т + п • 1(^2 п), где т =\А |, п =\N |. Отображение очереди вершин на вектор размером Ь позволяет снизить сложность до величины 0(т + п • Ь), где Ь - максимальная длина дуги графа [1, 2].

Существует ряд приемов ускорения процесса поиска кратчайших путей, использующих идею сокращения количества анализируемых дуг графа: целенаправленный поиск; встречный поиск; многоуровневый подход; ограничение локальных областей поиска [2, 3]. Реализация перечисленных приемов предполагает предварительное формирование вспомогательного графа, отображающего вершины исходного графа и деревья кратчайших путей. Затем построение дерева путей идет по волновой схеме однократного просмотра дуг, реализуемой алгоритмом Дийкстры. Результат отображается на исходный граф за время О(т).

Наличие в асимптотиках вычислительной сложности параметра п отражает необходимость выполнения перед построением дерева действий, сложность которых 0(п) . Это снижает эффективность алгоритма Дийкстры в задачах определения множества кратчайших путей. Пример подобной задачи - расчет подматриц кратчайших расстояний: необходимо построить кратчайшие пути от заданного множества исходных вершин Б^Ы до всех вершин из множества ^еЫ. Практически всегда в таких задачах выполняется условие < п.

Расчет подматриц можно проводить прямолинейным использованием агоритма Флойда, но при этом для любых значений и вычислительные затраты имеют оценку О(п3), а

потребность в памяти - О(п2) [1]. Для разреженных графов реальных транспортных сетей в

таких случаях лучшим оказывается алгоритм Дийкстры, где при потребности в памяти O(n + m) оценка вычислительных затрат - не хуже | S | O(n2) . Далее предлагаются приемы улучшения таких оценок, основанные на исключении излишних операций при построении множества деревьев кратчайших путей для всех элементов SeN.

Ревизия алгоритма построения деревьев кратчайших путей

Известно, что вполне достаточным для реализации алгоритма Дийкстры представлением разреженного нагруженного графа G(N,A) является структура смежности FSF (Forward Star Form) [1]. В этом случае для каждой вершины х эффективно представлено множество непосредственно достижимых смежных вершин X, x' = {к | w(x, к) > 0} , где w(x, к) - вес дуги x ^ к, x, к e N. Объем памяти для хранения структуры смежности - O(n + m).

Пространство состояний поиска решения алгоритмом Дийкстры включает: D - массив расстояний от корня дерева, D = {D(i), i e N}; P - массив номеров предшествующих вершин, P = {P(i), i e N}; Q - очередь вершин, Q = Q, i e N}, элементы которой упорядочены по текущему значению расстояния от корня дерева [1, 2].

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

Процесс построения дерева кратчайших путей имеет волновой характер до исчерпания возможности его развития из исходной вершины (рис. 1).

procedureSPT(r); //Построени едерева кратчайшихпутей begin

foreachi e N do D(i) ^ro, P(i) ^ i;

D(r) ^ 0; Q ^ {r};

repeat

i^Qi, Q^Q\{i};

foreach/' e i begin

if D( j) > D(i) + w(i, j) then begin if D(j) <ro then Q ^ Q \{j}; D(j) ^D(i) + w(i, j), P(j) ^i; Q ^ Q u {j}; end;

end;

until Q = 0; end;

Рис. 1. Традиционная версия реализации алгоритма Дийкстры

На итерациях построения дерева последовательно выполняются операции:

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

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

Вершина графа может находиться в следующих последовательно фиксируемых состояниях: не рассматривалась, рассматривается и рассмотрена. Признак состояния явно обычно не используется, а его отображение проводится неявно на элементах D = {D(i), i e N}.

Все вершины графа перед построением дерева помечаются парами начальных значений D(i) ^ ro, P(i) ^ i, i e N. Принадлежность произвольной вершины x e N дереву путей на любом этапе его построения определяется истинностью выражения (D(x) = ro) v (P(x) = x). На практике именно вершины дерева путей значимы для задач управления транспортом.

Построенное дерево путей - связный граф по определению. Если s - исходная вершина, а t - лист дерева путей, s, t e N, то после завершения поиска кратчайший путь можно восстановить обратным движением из вершины t: t, P(t), P(P(T)),... P(.. .P(P(t))),.. s.

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

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

Возможная реализация обсуждаемой идеи (см. рис. 2) базируется на дополнении пространства состояния глобальной переменной e с целью идентификации вершин разных деревьев. Это позволяет выполнить инициализацию массивов P один раз (функция SPI() ).

procedure SPI(); // Инициализция переменныхсостояния begin

е ^ 0;

foreach i е N do P(i) ^ е; end;

procedureSPM(r,t);// Поиск кратчайшее пути r ^t begin

D(r) ^ 0; Q ^ {r}; P(r) ^ r + e; repeat

i ^ Qi, Q ^ Q \{i};

if i = t then goto finish; foreach j e i begin

if (P(j) < e) v ((D(j) > D(i) + w(i, j)) a (Q ^ Q\{j})) thenbegin

D(j) = D(i) + w(i, j), P(j) = i + e; Q ^ Q u {j}; end ; end;

until Q = 0;

finish: e ^ e + n; end;

Переменная e содержит начало интервала номеров очередного дерева (функция SPM(г, t)). Построение дерева приводит к изменению элементов массива Р, соответствующих подвергшимся анализу вершинам графа. Предикат (Р(]') < е) определяет множество не рассмотренных вершин и соответствует состоянию (0(]) = ж), ] е N. Однако использование такого предиката позволяет исключить повторную установку начального состояния множеств D и P. Вычислительная сложность построения дерева путей функцией SPM(г, t) зависит лишь от количества фактически рассматриваемых дуг.

Идея однократной инициализации массивов D и P может быть использована для отказа от очистки очереди Q . Для этого достаточно операцию Q ^ {г} в момент фиксации корня дерева в вершине г выполнить с проверкой условия (г < e). Список элементов очереди не обязательно проецировать на интервал 1, п, если порядок дерева существенно меньше п.

Можно заметить, что каждая вершина дуг окончательного дерева кратчайших путей как минимум один раз будет представлена в очереди вершин. Однако некоторые из вершин дерева в очереди побывают строго один раз. Очевидно, что операции с очередью (включение и исключение) для таких вершин можно не выполнять. Это ускорит процесс поиска решения. Для реализации подобного предложения достаточно на графе предварительно для каждой вершины выделить и пометить входные дуги минимальной длины [4]:

Рис. 2. Предлагаемая версия реализации алгоритма Дийкстры

Элементарные предопределенные решения

(1)

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

Рассмотрим возможности использования (1). Пусть на нагруженном ориентированном графе G(N, A) последней достигнута вершина i дерева кратчайших путей. Если анализируется альтернатива развития дерева по дуге i ^ j, которая является кратчайшей из входных дуг в вершину j, то такая дуга может быть досрочно включена в дерево без помещения в очередь. Однако продолжение развития дерева из вершины i по дуге j ^ к, которая является кратчайшей из входных дуг в вершину k , окажется преждевременным, если справедливо w(i, j) + w(j, к) > min{ w(l, к), (l, к) e A л (l Ф j)}. Здесь w(i, j) - вес дуги i ^ j, i, j e N.

На реальном графе иногда можно выделить более сложный вариант предопределенных решений, когда w(i, j) + w(j, к) < min{ w(l, к), (l, к) e A л (l Ф j)}. В таком случае количество шагов продолжения развития дерева из вершины i досрочно может быть увеличено до двух.

Отсюда по индукции следует, что для любой вершины i e N можно указать путь i ^ j ^ j'2 ^... ^ jm ^ к, составленный из кратчайших входных дуг промежуточных вершин j, j 2,... jm, для которых w(i, j) + w( j, j'2) + ... + w(jm, k) < min{ w(l, к), (l, k) e A л (l Ф jm )}.

Алгоритм выделения множества (1) имеет линейную вычислительную сложность:

D(i) ^ro, i e N; D(i) ^ wb( D(i), w(i, j)), (i, j) e A; T} = (D(i) = w(i,j)), (i, j) e A.

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

Организация встречного поиска

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

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

- лучшая среди известных схема отображения очереди вершин на вектор размером Ь наиболее эффективно работает с большими очередями;

- оптимальный размер деревьев поиска соответствует одинаковому расстоянию от корней дерева в точке остановки [2].

С целью определения расширенного графа, пригодного для организации процесса

ветвления на общей очереди, обозначим исходный граф через G+ = G(N+, Л^), а граф с

* * *

инвертированием направления дуг - О = G(N , А ) .

Между вершинами таких графов должно быть взаимно однозначное соответствие.

Предлагается для его задания использовать симметричную функцию отображения номеров

+ *

вершин N ^ N в виде

еоп1(х) = х* • (х eG +) + х +■ (х eG*), х е ^ и N. (2)

Пусть номера вершин графа О заданы последовательностью 0, п — 1, а номера вершин * -

графа О - последовательностью 2п — I, п. Легко проверить, что в таком случае линейная функция

conj(x) = 2n —1 — x, x e N+ U N* (3)

+ *

реализует прямое и обратное отображение номеров вершин N ^ N . Это позволяет использовать (3) в качестве адресной функции, так как объединение множеств таких номеров соответствует неразрывной последовательности 0,2n — 1.

*

В результате множество номеров вершин и дуг графа G определяется так: N * = {к * = conj(x +), x + e N + } A* = {conj( y+), conj( x +)), (x +, y+) e A+ }. (4)

Пусть s и t - начальная и конечная вершины искомого кратчайшего пути на исходном

графе G +. Так как, согласно (4), N+ П N =0, то встречный поиск можно проводить

+ *

синхронным движением волны от корней деревьев на несвязном графе G u G . Для этого

и« . . и« и«

достаточно начать процесс ветвления из вершин s e G и t = conj(t), t e G . Последнее

*

соответствует формальному объединению графов фиктивной дугой s ^ t , для которой w(s, t ) = <х>. В отличие от известного приема поочередного развития деревьев [1], синхронное движение оказывается оптимальным.

Улучшение правила остановки встречного поиска

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

Если для некоторого дерева кратчайших путей максимальное расстояние от постоянно помеченных вершин до корня есть d, то признаком постоянной пометки вершины x является условие D(x) < d . В рассматриваемом случае для обоих деревьев значение d одинаково.

Отсюда следует, что правило остановки можно определить на значениях текущих расстояний - D(conj(i)) < D(i), где i - вершина графа G+ или графа G*, получающая постоянную пометку. Однако проблема состоит в дискретном характере процедуры выбора помечаемых вершин, когда условие D(conj(i)) < D(i) приходится проверять каждый раз после коррекции значений расстояний до временно помеченных вершин.

Обозначим множества листьев встречно растущих деревьев кратчайших путей через

__I I _ц« ц« _i_ и4

T+ = {i | x<D(i) <да, i eN+} и T* = {i | x<D(i) <да, ieN }, где x = min{D(k), k e N+ uN }. Очевидно, что на любом этапе процесса развития деревьев остановка может произойти в любой из вершин множества K(x) = {i | i e {conj(i), i eTx } о T* }. Нетрудно заметить, что такое множество включено в очередь вершин, формируемую алгоритмом Дийкстры. Условие построения K(x) может включать предикат (P(x) > e) вместо (D(x) < ю), что исключает необходимость повторной инициализации переменных состояния. Последнее предлагается использовать для построения корректной и экономной процедуры остановки.

Действительно, перед началом поиска множество K(0) = 0. Первый элемент в него будет включен лишь после выявления условия (i = conj(i)) л(x < D(i) < <х>)л (x < D(conj(i)) < ю). Практически проверка такого условия требует лишь включения дополнительной проверки условия D(conj(i)) <ю в алгоритм включения вершины в очередь.

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

На последующих итерациях включения элементов в очередь определим значение dmm = min k {D(k) + D(conj(k)), k e K(x)}. Значение D(k) только возрастает, а из множества временно помеченных вершин исключаются элементы, для которых (D(k) < x). Это условие соответствует моменту установки постоянной пометки вершины, одна из которых соответствует условию dmn = min k { D(k) + D(conj(k)), k e K(x)}. Так как для любого значения x новые элементы множества K будут по определению иметь расстояние до корней, не меньшее x, то условием остановки в момент постоянной пометки вершины k будет

^шт = Б(к) + В(еоп](к)), к е К (х).

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

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

| >¡4 I I и4

такое дерево требуется функция о^(х) = х • (х еО ) + соп](х) • (х еО ), х е N и N . Для случая

нумерации вершин расширенного графа по правилу (4) orig(х) = еощ'(х), х е ^ и N .

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

Проецирование кратчайших путей на дуги графа

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

Предлагается учесть ассоциации дуг с оптимальными решениями характеристическими множествами признаков вхождения вершин в заранее выделенные любым способом подмножества вершин [4]. Исходный граф будет представлен объединением подграфов, формально включающих вершины одного подмножества. Обозначим В = {В(г), i е N} -множество двоичных векторов классификации вершин графа. Принадлежность вершины 1 подмножеству к пусть отражается выражением В(г) = 2к.

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

вершины в кратчайшие пути: S(I(i, ])) = 0, (г, ]) е М . Здесь 1('г, ]) = (к\(г, ]) еМ) л (к е\, т) -

индекс дуги в линейном массиве списка дуг, являющегося частью структуры смежности графа.

Далее для каждой вершины /, I е N, необходимо построить дерево кратчайших путей до всех остальных вершин, но при этом операцию Р(]) ^ 1 следует дополнить сохранением индекса Я] ^ I(1, ]), ] е \, п, указывающего позицию дуги / ^ ] в списке дуг.

После этого узлы и листья деревьев кратчайших путей могут эффективно отображаться на дуги графа: £ (к) ^ Б (к) V В(Р(]))), (Я] = к) л (Р(] Ф ]), ] е N. В функции БРИ (г, г)

(рис. 2) условие фильтрации дуг (Р] < е) V ((Б] > +w(i, ])) л (й ^ й \{]})) должно иметь

вид ((Б(1(1,])) лВ(0) Ф 0) л((Р(]) < е) V Щ > Ц+м(и])) л(й ^ Q\{]}))).

В настоящее время процессоры обладают возможностью параллельного выполнения операций над битами в машинных словах размером 16, 32 или 64 разряда. Характеристический вектор реально всегда отображается на массив смежных машинных слов. Операция конъюнкции в выражении ((Б(I(г, ])) л В(1)) Ф 0) проверяет совпадение единственного разряда на всех итерациях построения дерева путей к целевой вершине I. В таком случае нет необходимости проверки всех разрядов характеристического вектора. Достаточно проверять подмножество |_1°ё2 В(1)1 wJ вектора Б(I(г, ])), где - разрядность процессора.

Экспериментальная оценка времени решения задач

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

автомобильных дорог с параметрами п = \06, т = 5 Л06 . Размеры случайных подматриц -| 5 | =500... 900, | F |= 100 . Множества вершин подграфов для проецирования кратчайших путей соответствовали равным по размеру интервалам последовательных номеров вершин исходного графа.

Оценки времени расчета подматриц кратчайших расстояний

Размерность задачи (|S|) Среднее время решения, мсек (Celeron 1,7 Ггц, 512 Мбайт)

Классическая схема Дийкстры Предлагаемая схема с различным числом подграфов

1 8 16 32 64 128

500 10,823 8,003 1,038 0,719 0,524 0,512 0,503

600 12,234 9,514 1,312 0,828 0,640 0,604 0,602

700 14,534 11,005 1,513 0,947 0,769 0,678 0,688

800 17,002 12,811 1,716 1,102 0,924 0,860 0,772

900 20,712 15,012 2,117 1,417 1,187 1,009 0,901

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

Заключение

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

QUICK SEARCH OF THE SHORTEST PATHS ON THE GRAPH WITH A PREDETERMINED DECISION

M.P. REVOTJUK, M.K. QARALEH, N.V. KHAJYNOVA

Abstract

On the classical problem of searching the shortest paths in graphs considered the possibility of accelerating the search procedure by incorporating a priori information about the search space. Global initialization of state variables predefined search and selection solutions can improve performance of multiple procedures to find paths to a linear dependence on the volume of the scanned area.

Список литературы

1. N. Deo, Chi-yin Pang // Networks. 1984. Vol. 14. P. 275-323.

2. Fredman M.L., Tarjan R.E. //J. ACM. 1987. Vol. 34(3). P. 596-615.

3. Demetrescu C., Italiano G.F. //ACM Transactions on Algorithms. 2006. № 2 (4). P. 578-601.

4. РевотюкМ.П, Застенчик Н.И., Шешко Е.В.// Изв. БИА. 2004. № 1 (17)/2. С. 112-114.

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