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

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

CC BY
2798
132
i Надоели баннеры? Вы всегда можете отключить рекламу.
Ключевые слова
ДИНАМИЧЕСКИЕ КРАТЧАЙШИЕ РАССТОЯНИЯ / АКТУАЛИЗАЦИЯ ГРАФА / КОРРЕКЦИЯ ГРАФА / РАВНОУДАЛЕННЫЕ ТОЧКИ. / DYNAMIC GRAPH DISTANCES / GRAPH UPDATE / EQUIDISTANT POINTS / GRAPH ACTUALIZATION

Аннотация научной статьи по математике, автор научной работы — Ураков Айрат Ренатович, Тимеряев Тимофей Валерьевич

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

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

Algorithm for dynamic all-pairs distances in graph

Fully dynamic all-pairs graph distances problem for undirected graphs with positive edge weights is considered. Edge weights can change arbitrary so distances between vertices should be kept actual. We propose an algorithm taking into account all possible distance changes by the use of edge addition and deletion procedures. The developed algorithm uses the notion of points equidistant to the vertices incident to the edge being deleted for an edge deletion procedure. This allows to significantly reduce time and memory complexity of the graph distance actualization task in practical scenarios. The conducted computational experiments showed that the proposed algorithms outperforms the fastest known methods.

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

УДК 519.178 ББК 22.176

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

Ураков А. Р.1, Тимеряев Т. В.2

(Уфимский государственный авиационный технический университет, Уфа)

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

Ключевые слова: динамические кратчайшие расстояния, актуализация графа, коррекция графа, равноудаленные точки.

Введение

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

1 Айрат Ренатович Ураков, кандидат физико-математических наук, доцент (urakov@ufanet.ru).

2 Тимофей Валерьевич Тимеряев (timeryaev@yandex.ru).

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

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

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

яний, что позволяет существенно уменьшить использование памяти при решении.

1. Термины и обозначения

В статье используются следующие термины и обозначения.

Е, ад) - неориентированный граф О с множеством вершин V, множеством ребер Е и весовой функцией на ребрах ад : Е^ М>о.

е((ц, bj) - ребро между вершинами сц и bj. ад(а,г, bj) - вес ребра между вершинами сц и bj. Так как граф неориентированный, то ад((ц, Ъ^) = ад(Ъ^, гц).

Расстояние между сц и bj - кратчайшее расстояние между вершинами сц и bj.

bj) - расстояние между вершинами сц и bj, так как граф неориентированный l(ai,bj) = ,(ц).

[йг, ... , Ь2 ] - путь от вершины до вершины Ь2. Свойство оптимальности кратчайшего пути - каждый под-путь кратчайшего пути является также кратчайшим, т.е. если [а1,... ] кратчайший путь между а1 и Ь^, то любой подпуть [ах,..., Ьу] этого пути будет кратчайшем путем между ах и Ьу.

2. Существующие алгоритмы

Первые алгоритмы решения динамических задач поиска кратчайших путей опубликованы в 60-70-х годах прошлого столетия [1, 8, 18, 19]. Алгоритмы в этих работах на основе свойств кратчайших путей определяют пары вершин, между которыми в результате изменения весов ребер могли измениться расстояния. Расстояния между найденными парами пересчитывается с использованием простых алгебраических и логических операций, а также статических алгоритмов поиска кратчайших путей. Временные сложности этих алгоритмов в худшем случае определяются случаем увеличения веса ребра и не дают улучшения по сравнению с полным пересчетом расстояний графа с использованием статических методов.

Авторы [22] представили полностью динамический алгоритм, поддерживающий множественные изменения весов ребер между актуализациями расстояний. В [12] предложили полностью динамический алгоритм для задачи с единственным источником и наибольшей эффективностью на планарных графах и графах с ограниченной степенью вершин. Алгоритмы, улучшающие временную сложность полного пересчета расстояний, были предложены для графов с ограниченными весами ребер [3, 17] и планарных графов [11, 16]. В [7] авторы переложили полностью динамический алгоритм для направленных графов с неотрицательными весами с амортизированным временем 0(п21од3\У|) для любой последовательности модификаций графа.

Алгоритмы приближенного решения задачи рассмотрены в [4, 15, 24]. Многие алгоритмы, решающие динамическую задачу, хранят вспомогательную информацию, используемую при пересчете расстояний, что требует большого объема оперативной памяти при практической реализации и тем самым ограничивает размерность используемых графов. Для возможности работы с большими графами рядом авторов предложены алгоритмы [14, 21], хранящие вспомогательную информацию под управлением СУБД. Распределенные алгоритмы решения задачи рассматриваются в [5, 23].

3. Метод коррекции графа

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

Добавление/удаление вершины а, несвязанной с другими, изменяет расстояния в графе тривиальным образом - добавляются/удаляются равные бесконечности расстояния между а и всеми

63

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

Заметим, что если пара вершин а и Ь связана ребром веса -ыг, то удаление или добавление ребра, связывающего а и Ь веса не повлияет на расстояния, если > 'Шг. Отсюда следует, что уменьшение веса ребра можно свести к процедуре добавления ребра, а увеличение веса ребра можно свести к процедуре удаления ребра. В первом случае сначала добавляется новое ребро меньшего веса, далее удаляется существующее ребро большего веса, что не повлияет на расстояния (и не требует пересчета). Во втором случае сперва добавляется новое ребро большего веса, что не влияет на расстояния (и не требует пересчета), после этого удаляется существующее ребро меньшего веса.

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

4. Добавление ребра

Рассматривается добавление ребра е(а0,Ь0) веса -ш(а0,Ь0) между вершинами ао и Ьо. Необходимо пересчитать расстояния 1((ц, bj), которые в результате добавления данного ребра уменьшатся. Предполагается, что вес добавляемого ребра меньше текущего расстояния между вершинами w(a0, Ь0) < 1(а0, Ъ0), так как в противном случае пересчет расстояний производить не нужно.

Добавляемое ребро е(а0, Ь0) можно представлять как «мост», соединяющий множества вершин А = {а{} и В = {Ь^ }, которые разбивают множество вершин графа V на вершины, которые ближе к ао, и вершины, которые ближе к Ьо:

А = {V е V\1(у,ао) < 1(у,Ьо)},

В = {V е V\1(у,Ьо) < 1(у,ао)}. В случае равенства расстояний до а0 и до Ъ0 вершина V может быть помещена в любое из множеств А, В. Будем считать, что а0 е А и Ь0 е В. При разбиении вершин графа ( 1 ), добавляя 64

ребро е(а0,Ъ0), достаточно пересчитать расстояния лишь между парами вершин одна из которых принадлежит А, а другая В, т.е. (и,и) : V € А,и € В. Если обе вершины принадлежат одному из множеств, например, п,и € А, то расстояние между ними не изменится. Это обусловлено двумя факторами. Во-первых, добавление ребра е(а0,Ъ0) не изменит принадлежность вершин множеству А: расстояние от них до а,0 все так же будет не больше чем до 60. Действительно, если бы расстояние от, например, V до 60 изменилось, соответствующий путь имел бы вид [у,..., а0, Ь0], что означало бы, что 1(у, а0) < 1(у, Ь0). Во-вторых, кратчайший путь между V и и не может содержать добавляемое ребро е(а0, Ъ0), так как расстояние от обоих V и и до а0 не больше чем до 60, и кратчайший путь [и,... ,и] между V и и в противном случае содержал бы подпуть вида [V,... ,Ъ0,а0], который не является кратчайшим, что противоречило бы свойству оптимальности кратчайшего пути.

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

В дереве кратчайших путей с корнем - некоторой вершиной V - длина пути от V до любой другой вершины дерева и равна расстоянию между этими вершинами 1(ь,и). Если выбрать в качестве деревьев Ьа и Ьв на множествах А и В деревья кратчайших путей с корнями й0 и 60, соответственно, то, используя свойство этих деревьев, можно сократить число пар вершин ), между которыми необходимо пересчитать расстояния.

Предположим, что вершина сц дерева Ьа в направлении от

корня дерева связана ребрами с вершинам (ц+1, (ц+2,..., (ц+к. Также предположим, что в данный момент времени мы пересчитываем расстояние между а1 и некоторой вершиной Ь^ дерева Ьв. Расстояние между а1 и Ь^ необходимо пересчитать, если длина пути через добавляемое ребро е(а0,Ъ0) будет меньше текущего расстояния между а1 и Ь^, т.е. если выполняется условие

(2) 1(аг, ао) + ы(ао, Ьо) + 1(Ьо, Ъ^) < 1(а,г, Ъ^).

Если неравенство (2) не выполняется, величина 1(а,г, Ь^) не пере-считывается, так как существует путь между а1 и Ь^, не проходящий через е(ао, Ьо) и обладающий не большей длиной. Но в этом случае не надо также пересчитывать расстояния между Ь^ и вершинами аг+г, а^+2,..., .

Действительно, так как дерево Ьа является деревом кратчайших путей, то в случае пересчета расстояния между, например, и bj соответствующий кратчайший путь имел бы вид

(3) [аг+1,а,г,... ,ао,Ьо,... ].

Если расстояние между а1 и Ь^ не было пересчитано, потому что выражение (2) имело форму равенства, то нет необходимости пересчитывать и расстояние между а1+г и bj, так как оно не изменится (не изменится длина подпути [а1,..., Ь^]). Если же путь между (ц и Ъ^ через е(ао,Ъо) оказался длиннее, чем путь не проходящий через е(ао,Ъо), то кратчайший путь между (ц+г и Ьз не может иметь вида (3), так как в этом случае кратчайший путь между и Ь^ содержал бы не кратчайший подпуть [а,г,... ,ао,Ъо,..., bj ] между сц и bj, что нарушало бы свойство оптимальности кратчайшего пути.

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

соответственно, вершины а1 и Ь^, удовлетворяющие условиям

(4) 1(а,г, 00) + ад(а,0,60) < К^, 60),

1(Ь], 60) + ад(а,0, Ь0) < 1(Ьз,0,0). Схематическое изображение деревьев Ьа и Ьв представлено на рис. 1. Описание алгоритма пересчета расстояний при добавлении ребра дано в листингах Алгоритм 1, Алгоритм 2. Алгоритмы в данных листингах предполагают, что текущие расстояния между всеми парами вершин графа до добавления ребра е(а0, Ь0) известны.

добавлении ребра е(а0,Ъ0) пересчитываются расстояния

Алгоритм 1 (Построение деревьев кратчайших путей). ПостроитьДеревоДобавления (G, I, v1, v2)

1. t = Дерево(Узел(^1)) // дерево с корнем с индексом v\

2. q = Очередь(1Корень()) // q - структура типа FIFO

3. d = Множество^) // d - мн-во посещенных вершин

4. Пока д.Размер() > 0

5. v = д.Выбрать()

6. Для всех ребер e(v, и) е G.E()

7. Если ^.Содержит(-и), то

8. Продолжить // continue

9. Если l(v1,u) = l(v1,v) + G.w(v, и), то

10. ^.Добавить(-и)

11. Если 1(и, уг) + См(у1,у2) < 1(и, у2), то

12. с = Узел(-и)

13. п.ДобавитьПотомка(с)

14. д.Добавить(с)

15. Вернуть £

Алгоритм 2 (Пересчет I при добавлении е(ао, Ьо) веса Ыаь). ДобавитьРебро (С, I, ао, Ьо, ъиаь)

1. С.Е.Добавить(е(ао, Ьо))

2. С.-ш(ао,Ьо) = и)аЬ

3. С.из(Ъо, ао) = Ыаъ

4. Если 1(ао, Ьо) ^ ■Шаь, то

5. Вернуть

6. 1а = ПостроитьДеревоДобавления(С, I, ао, Ьо)

7. = ПостроитьДеревоДобавления(С, I, Ьо, ао)

8. да = Очередь(^.Корень())

9. Пока да.Размер() > 0

10. см = да .Выбрать()

11. дь = Очередь(£в .Корень())

12. Пока ф.Размер() > 0

13. Ьу = ^5.Выбрать()

14. I = 1(сч, ао) + С.и](ао, Ьо) + 1(Ьо, Ьу)

15. Если I < 1((ц, Ьу), то

16. l(ai,bj ) = I

17. 1(Ъу ,а-) = I

18. Для к = 1 до Ьу .ЧислоПотомков()

19. дь .Добавить^ .Потомок(й))

20. Для к = 1 до о^.ЧислоПотомков()

21. да.Добавить(йг.Потомок(й))

Алгоритм 1 по сути является проходом по графу поиском в ширину, поэтому его временная сложность соответствуют таковой поиска в ширину и равна 0(\У\ + \Е\), пространственная сложность равна 0(\У \2 + \_Б\) из-за необходимости хранить расстояния. Если в алгоритме 2 условие в строке 4 не выполняется, то его временная сложность рассчитывается следующим образом.

Временная сложность сложность строк 6, 7 равна 0(\У| + |^|). Выбор и добавление вершин в очереди в строках 10, 13, 19 и 21 производится не больше |У | раз, что с учетом вложенности цикла в строках 12-19 дает временную сложность выполнения строк 9-21 равную 0(\У|2). То есть алгоритм 2 имеет временную сложность 0(\У|2 + |). Пространственная сложность алгоритма 2 доминируется пространственной сложностью алгоритма 1 и равна ОЦУ^ + |E|).

5. Алгоритм поиска кратчайших расстояний путем добавления ребер к остовному дереву

Алгоритм пересчета расстояний при добавлении ребра может использоваться для определения расстояний между всеми парами вершина графа (задача АР8Э). Для этого в графе выбирается произвольное остовное дерево tf, для которого поиском в ширину находятся расстояния между всеми вершинами. После чего по очереди добавляются | — (|У| — 1) не вошедших в tf ребер графа, и для каждого добавленного ребра выполняется пересчет расстояний.

Алгоритм 3 (Расчет расстояний для дерева). ВычислитьРасстоянияДерева (tf, I)

1. д = Очередь^/ .Корень())

2. й = Множество^/.Корень())

3. Пока д.Размер() > 0

4. у^ = д.Выбрать()

5. Для т = 1 до п.ЧислоПотомков()

6. VI = у^ .Потомок(т)

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

7. Для всех ук € й

8. 1(ук ,Уг) = 1(ук ,Уз )+ -ш(Уз ,Уг)

9. 1(Уг,Ук )= 1(ук )

10. ^.Добавить(^г)

11. д.Добавить(^г)

При обходе дерева расстояния от каждой новой посещаемой вершины Уг до уже посещенных ук считаются через роди-

тельскую вершину Vj вершины г^:

1(Ук ,Уг) = 1(Ук ) + ,Уг ).

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

Описание алгоритма определения расстояний между всеми парами вершин графа с использованием алгоритма пересчета расстояний при добавлении ребра приведено в листингах Алгоритм 3, Алгоритм 4.

Алгоритм 4 (Расчет расстояний между всеми вершинами). ВычислитьРасстояния (С, I)

1. и = Очередь() // содержит не посещенные ребра

2. = ВыбратьДерево(С, и) // и заполняется

3. ВычислитьРасстоянияДерева (tf, I)

4. Пока -и.Размер() > 0

5. е = -и.Выбрать()

6. а0 = е.Вершина1()

7. Ь0 = е.Вершина2()

8. ыаЬ = е.Вес()

9. ДобавитьРебро (С, I, а0, Ь0, ыаъ)

В алгоритме 3 цикл в строках 3-11 выполняется |У | раз -по разу для каждой вершины дерева. Вложенный цикл в строках 70

7-9 выполняется в худшем случае \У\ — 1 раз. Таким образом, временная сложность алгоритма 3 равна 0(\У\2). Однако время работы данного алгоритма может быть улучшено до линейного с помощью нахождения всех наименьших общих предков дерева [13]. В алгоритме 4 строка 2 выполняется за 0(\У\ + \Е\) (поиск в ширину), строка 3 за 0(\У\2), цикл в строках 4-9 за 0(\Е\\У\2 + \Е\2). Таким образом временная сложность алгоритма 4 равна 0(\Е\\У\2 + \ Е\2), пространственная сложность определяется строкой 9 и равна 0(\У\2 + \_Б\).

6. Удаление ребра и равноудаленные точки

Рассматривается удаление ребра е(ао, Ьо) веса ,ы(ао, Ьо) между вершинами ао и Ьо. Необходимо пересчитать расстояния 1((ц, bj), которые в результате удаления данного ребра увеличатся. Предполагается, что вес удаляемого ребра равен текущему расстоянию между вершинами ,ы(ао, Ьо) = 1(ао, Ъо), так как в противном случае пересчет расстояний производить не нужно.

Как и в случае с добавлением ребра, используя выражения (1), множество вершин графа V можно поделить на множества А и В. На этих множествах так же можно построить деревья кратчайших путей £ а и Ьв с корнями ао и Ъо. Эти деревья будут обладать тем же полезным свойством: если расстояние между а1 и Ьу не следует пересчитывать, то не следует пересчитывать и расстояния между всеми потомками а1 и Ь^. Размеры деревьев Ь А и Ьв можно уменьшить, но для этого вместо неравенств (4) следует использовать следующие равенства: (5) 1(а,г,ао) +-м(ао, Ьо) = 1(а^, Ьо),

1(Ьу, Ьо) + -м^о, Ьо) = 1(Ьу, ао).

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

Существенным отличием процедуры удаления ребра от случая добавления ребра является отсутствие информации о длине кратчайшего альтернативного пути. При добавлении ребра для пересчета расстояния между вершинами а1 и Ь^ используется неравенство (2), в котором длина известного (до добавления ребра е(а0,Ъ0)) кратчайшего альтернативного пути l(ai,bj) сравнивается с длиной пути через ребро е(а0,Ъ0). При удалении ребра известно лишь расстояние между а1 и Ь^ - длина кратчайшего пути (возможно проходящего через е(а0,Ъ0)), второй по длине альтернативный путь между а1 и Ь^ неизвестен. Таким образом, возникает задача просмотра альтернативных путей и выбора из них наименьшего по длине.

На каждом из альтернативных путей между вершинами а0 и Ъ0 существует точка, от которой расстояние до а0 и до Ъ0 одинаково. Будем называть такие точки равноудаленными точками (РУТ). Используя РУТ можно обозначить все возможные варианты альтернативных путей между а0 и 60, ставя в соответствие каждому варианту отличную РУТ. Набор РУТ также определит и все возможные варианты альтернативных путей, не проходящих через ребро е(а0,Ъ0), между всеми парами вершин деревьев Ьа и Ьв. Действительно, пути между вершинами а1 и Ь^ через РУТ представляют собой пути, в которых вместо ребра е(а0,Ъ0) содержится подпуть через РУТ. Будем обозначать РУТ С = {ск}, рис. 2 представляет схематическое изображение множества РУТ.

Существует 2 варианта расположения РУТ. Во-первых, РУТ Ск, находящиеся в вершинах графа. Для таких справедливо равенство

(6) 1(ск ,0,0) = 1(ск ,Ь0).

Во-вторых, РУТ, находящиеся на ребрах. Такие РУТ находятся на ребрах е(у, и), удовлетворяющим всем трем неравенствам Ц(и, Ь0) — 1(у, а0)| < и),

(7) 1(у,а0) <1(У,Ь0),

1(и, Ь0) < 1(и, а0).

Расстояния между РУТ на ребрах Ск и некоторой вершиной г

Рис. 2. Множество равноудаленных точек (РУТ) С при удалении ребра е(ао, Ьо)

определяются формуле

¡1(г, у)+из'(у, ск), если 1(г,а0) ^ 1(г,Ь0);

(8) 1(х, ск) = <

\1(г ,и)+,ш'(и, ) иначе.

где , Ск) и ■ш'(и, Ск) - длины отрезков ребра е(у,и), определяемые по формулам

(9) ь)'(у, ск) = (1(и, Ь0) + -ш(у, и) — 1(у, а0))/2,

Ь}'(и, Ск) = Ы(У, и) — Ь)'(У, Ск). Так как РУТ имеют одинаковое расстояние до вершин, инцидентных удаляемому ребру, то при удалении ребра е(ао, Ьо) расстояния от РУТ до всех остальных вершин графа не изменится. Действительно, если бы расстояние между РУТ Ск и некоторой вершиной г после удаления ребра е(ао,Ьо) изменилось, то это значило бы, что до удаления ребра кратчайший путь между и Ск имел вид [Ск,..., ао,Ьо,..., г], что невозможно так как наличие не кратчайшего подпути [ Ск,... ,ао, Ь о] противоречило бы свойству оптимальности кратчайшего пути. Таким образом, новое расстояние между вершинами а1 и Ь^ деревьев Ьа и Ьв может быть определено как минимальная сумма расстояний через

РУТ: 1((ц, Ь^) = шт( 1((ц, Ск) + 1(Ск, Ь^)). Можно уменьшить чис-

к

ло «холостых» проходов по деревьям £ а и Ь в (без фактического

пересчета расстояний), если использовать не расстояния до РУТ, а приращения (увеличения) расстояний через РУТ.

Будем обозначать в(ог, Ь^) и называть приращением расстояния 1(щ, Ъ^) увеличение расстояния 1(щ, Ъ^) после удаления ребра е(а0,Ъ0). Тогда новое расстояние между сц и bj после удаления е(а0,Ъ0) определяется по формуле

1(йг, Ъ^ ) = 1(йг, Ъ^) + в(аг, Ъ^).

Будем обозначать вк(аг,Ь0), вк(Ь^,а0) и называть приращениями расстояний 1(аг, Ь0), 1(Ь^, а0) через РУТ Ск увеличение длин путей между соответствующими вершинами при прокладывании их через РУТ Ск при удалении ребра е(а0, Ь0).

Для вершин, инцидентных удаляемому ребру, приращение определяется просто как минимальное увеличение пути через все существующие РУТ:

(10) «(а0,&0)=тт ,вк (а0,Ь0),

к

(11) вк(а,0, Ь0) = 1(а,0, ск) + 1(ск, 60) — ы(а,0, Ь0).

Для отличных от а0,Ъ0 вершин деревьев Ьа и Ьв приращения через РУТ определяются как изменения приращений через РУТ относительно родительского узла в дереве кратчайших путей:

(12) ^ (а+1'Ь0)= ^ (^ Ь0)—'Ш(а^+1,а^)+1(а^+1,Ск )—1(Ог, ск), вк(Ьз+1,а,0) = вк(Ьз, 00)— w(bj+l,bj)+1(Ь^+1, ск) — 1(Ы, ск),

где 01+1 и Ь^+1 - прямые потомки узлов 01 и Ь^, соответственно, в деревьях Ьа и Ьв. Справедливость первой из формул (12) показывается следующим образом. По определению, приращение зк(о1+1,Ь0) есть разность между расстоянием 1(о1+1,Ь0) через вершину ск после удаления ребра е(а0,Ь0) и расстоянием 1(о1+1 ,Ь0) до удаления ребра е(а0,Ъ0). Расстояния 1((ц+1,Ъ0) и 1(аг, Ь0) через вершину ск после удаления ребра е(а0, Ь0) равны, соответственно, 1((ц+1, Ск) + 1(ск, Ь0) и 1((ц, Ск) + 1(ск, Ь0). Согласно построению дерева Ьа (Алгоритм 1 и (5)), до удаления ребра е(а0,Ъ0) справедливо 1((Ц+1,Ъ0) = 1((ц,Ъ0) + ,ш(аг+1, Ог). Таким образом, получаем вк(а^1,Ь0) = 1(аг+1,Ск)+1(ск,Ь0) — [1(о{,Ь0) + ы(аШ,а^} = 1(Ог+1 ,Ск) + 1(ск ,Ь0) — КсцМ) — -Ш^г+иОг) + 74

1(а,г, Ск) -1(а,г, ск) = sк( (Ii, b0) -w(ai+i,ai)+l(ai+i, ск) - 1(<ц, ск). Аналогично для второй из формул (12).

Приращения расстояний для отличных от ао, bo вершин <i и bj деревьев tA и tв определяются как сумма приращений через РУТ от <i и от bj с вычетом приращения через РУТ между вершинами удаляемого ребра, так как оно входит в сумму дважды:

(13) s(<i, bj) = min(sk(ai, b0) + sk(bj, a0) - sk(a0, b0)). к

Действительно, согласно построению дерева tA, определению приращения через РУТ, формуле (11) и симметричности весовой функции графа: sk(ai, bj) = l(ai, ck) + l(ck, bj) — [l(ai, ao) + w(a0,b0)+l(b0, bj)] = [l(ai, ck ) + l( ck ,b0)-l( ai,a0) - w(a0,b0)] + [l(bj, ck) +1(ck, a0) -1(bj, b0) - w(bo, a0)] - [l(a0, ck) +1(ck, b0) -w(ao, bo)] = sk(ai, bo) + sk(bj, ao) - sk(ao, bo). Согласно определению множества РУТ, s(ai, bj) = man sk(ai, bj), что доказывает

корректность (13).

Если для вершины ai дерева tA существует нулевое приращение расстояния через РУТ, т.е. min sк(ai,bo) = 0, то для ai и

к

всех ее потомков в дереве A вплоть до листового уровня не нужно производить пересчет расстояний ни до одной вершины j дерева tB. Действительно, в этом случае наличие нулевого приращения расстояния через РУТ означает существование альтернативного пути между ai и bo, не проходящего через удаляемое ребро e(ao,bo), и имеющего такую же длину, как и путь через e(ao,bo). Таким образом, расстояние l(ai,bo) пересчитывать не нужно - оно не изменится. Так как ta и tв деревья кратчайших путей, кратчайший путь между любым ax потомком ai и любым Ьу потомком bo содержит до удаления ребра е(ao, bo) под-путь вида [ ai,...,bo], так как длина l(ai,bo) этого подпути не изменилась, то не изменится и расстояние l(ax, Ьу). Аналогичное справедливо и для вершины j дерева в и ее потомков в случае min sк (bj ,<о ) = 0.

Можно сократить и само число РУТ, используя два правила:

1. Из С можно исключить те РУТ, находящиеся в вершинах, которые смежны только с вершинами, которые тоже являют-

ся РУТ в вершинах. В этом случае пути через исключаемые РУТ

будут проходить также и через РУТ, которые будут не исключены.

2. Если для деревьев Ьд и Ьв известны вершины af и bf,

находящиеся на наибольшем расстоянии от удаляемого ребра

е(а0,Ь0), т.е. 1(а/,а0) = тах 1(аг,а0) и 1(Ь/,Ь0) = тах ,Ь0),

г О

а также ближайшая к удаляемому ребру РУТ сп, т.е. 1(сп, а0) = тт 1(а, 0,0), то нужно оставить в С только те РУТ ск, для кото-

г

рых верно

(14) 1(ск, 00) < 1(а{, 0,0) + l(bf, Ь0) + 1(сп, 00). Действительно, предположим, что РУТ ск нельзя удалять из множества С, так как после удаления ребра е(а0,Ъ0) кратчайший путь между некоторыми вершинами сц и bj, соответственно, деревьев Ьа и Ьв проходит через ск, т.е. справедливо неравенство

(15) 1(аг, ск) + 1(ск, Ъэ) < 1(йг, Сп) + 1(Сп, Ь]) и при этом для ск не выполняется (14), т.е.

(16) 1(ск, 0,0) ^ 1(а{, 0,0) + l(bf, Ь0) + 1(сп, 00).

В силу неравенства треугольника, определения РУТ и симметричности весовой функции графа справедливы неравенства

1(ск, 0,0) — 1(аг, 0,0) ^ 1(аг, ск), 1(ск, а0) — Щ,Ь0) = 1(ск, Ь0) — 1(Ьу, Ь0) ^ 1(ск, Ьу),

1(а.г, сп) ^ 1(а,г, 0,0) + 1(Сп, 00), 1(сп, ь,) ^ 1(Ьз,Ь0) + 1(Ь0, Сп) = Щ, Ь0) + 1(сп, 0,0).

Подставляя данные неравенства в (15), получаем 2 ■ 1(ск,а0) — 1(йг, а0) — 1(Ъ3, Ь0) < 2 ■ 1(сп, а0) + 1(аг, а0) + , Ь0). Используя (16), последнее неравенство эквивалентно 2^ [l(af, a0)+l(Ъf, Ь0) + 1(сп, «0) — 1(а,г, 0,0) — 1(Ь^, Ь0) < 2 ■ 1(сп, 00) + 1(йг, 0,0) + 1(Ьз, 60), что эквивалентно 2 ■ [1(а/, а0)+ 1(Ь/, Ь0)] < 2 ■ [1(йг, а0) + 1(Ь^, Ь0)]. Данное неравенство противоречит определению bf и а/, что доказывает корректность правила г2.

Описание алгоритма пересчета расстояний при удалении ребра приведено в листинге Алгоритм 5.

Алгоритм 5 (Пересчет I при удалении е(ао, Ьо) веса ыаъ). УдалитьРебро (С, I, ао, Ьо, маь)

1. С.Е.Удалить(е(ао,Ьо))

2. С.1л(ао,Ьо) = ж

3. С.1л(Ьо,ао) = ж

4. Если 1(ао, Ьо) < ■Шць, то

5. Вернуть

6. £ а = ПостроитьДеревоУдаления(С, I, ао, Ьо)

7. £ в = ПостроитьДеревоУдаления( С, I, Ьо, ао)

// ПостроитьДеревоДобавления с (5) вместо (4)

8. с = {.НайтиРУТ.(С, I)} //формулы (6, 7), правила г1, г2

9. да = Очередь^А.Корень())

10. Пока да.Размер() > 0

11. аг = да.Выбрать()

12. Бк = {.НайтиПриращениеЧерезРут.(С, I, с, аг)} // формулы (11, 12, 8, 9)

13. Если 3§ к еБк : вк > 0, то

14. дь = Очередь^ в .Корень())

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

15. Пока ф.Размер() > 0

16. Ьу = ф.Выбрать()

17. 8 = НайтиПриращение( С, I, с, аг, Ъу) // формулы (10, 13)

18. Если § > 0, то

19. 1(аг, Ъу) = 1(аг, Ъу) + 8

20. 1(Ъу, аг) = 1(Ъу, аг) + 8

21. Для к = 1 до Ьу .ЧислоПотомков()

22. ^.Добавить( Ъу .Потомок(к))

23. Для к = 1 до аг .ЧислоПотомков()

24. а.Добавить(аг.Потомок(к))

Если в алгоритме 5 условие в строке 4 не выполняется, то его временная сложность рассчитывается следующим образом. Строки 6, 7, 8 выполняются за 0(1 V| + 1Е|). Так как строки 12, 17 выполняются за 0(IV|) временная сложность строк 10-24 определяется суммарной временной сложностью дважды вложенной строки 17 и равняется 0(IV|3). Таким образом, временная слож-

ность алгоритма 5 равна 0(\V|3), пространственная сложность, как и в предыдущих алгоритмах, равна 0(\V|2 + |^|).

7. Вычислительный эксперимент

Практическая эффективность предложенного метода актуализации расстояний в динамическом графе была оценена с помощью вычислительного эксперимента. В качестве тестовых данных использовались случайные связные подграфы заданной размерности графов автомобильных дорог европейских стран из проекта OpenStreetMap [20]. Эксперимент состоял в удалении случайного ребра, которое не нарушает связности графа, и последующем добавлении этого ребра обратно к графу, при этом фиксировалось время актуализации расстояний после каждой операции. Данная процедура повторялась 100 раз, после чего определялось среднее время актуализации расстояний каждым из сравниваемых алгоритмов. Исходный код предложенных в статье алгоритмов (ДУТ), алгоритма Дейкстры (СД) и алгоритма разборки-сборки графа (СРС) был написан на языке C++, код остальных тестируемых в статье алгоритмов был реализован на языке C. При компиляции использовался 64-битный компилятор MS Visual Studio 2013 c флагом оптимизации O2. Тесты проводились на ЭВМ с процессором Intel Core i5-4690K и объемом оперативной памяти 24 Гбайт.

Предложенные алгоритмы пересчета расстояний (ДУТ) при добавлении ребра (уменьшении веса ребра) и удалении ребра (увеличение веса ребра) сравнивались с решением задачи статическими алгоритмами - полным пересчетом расстояний: п-кратным (по числу вершин графа) запуском алгоритма Дейкстры (СД); алгоритмом разборки и сборки графа ([2], СРС); основанном на алгоритме Дейкстры методом, просматривающем только ребра, содержащиеся в локально кратчайших путях ([6], СЛКП). Также было произведено тестирование быстрых динамических алгоритмов [6]: адаптации алгоритма Кинга ([17], ДК) без ограничения на максимальный вес ребра в графе С с временной и пространственной сложностями 0(п2'ъл/С); алгоритма Рамалин-78

Таблица 1. Характеристики тестовых графов и среднее время актуализации расстояний статическими алгоритмами_

Группа графов (число графов) Среднее число вершин Средняя степень СД, с СРС, с СЛКП, с

01(10) 103 2,19 0,059 0,013 0,369

02(10) 2 ■ 103 2,22 0,259 0,046 2,26

03(10) 3 ■ 103 2,23 0,615 0,122 6,07

04(10) 4 ■ 103 2,2 1,1 0,253 12,5

05(10) 5 ■ 103 2,21 1,8 0,376 24,5

06(10) 6 ■ 103 2,21 2,56 0,552 37,8

07(10) 7 ■ 103 2,23 3,63 0,78 61,2

08(10) 8 ■ 103 2,21 4,66 1,08 80,1

09(10) 9 ■ 103 2,22 5,98 1,38 109

010(10) 104 2,2 7,52 1,85 142

Таблица 2. Среднее время (в секундах) актуализации расстояний динамическими алгоритмами после удаления ребра

Группа графов ДУТ, с ДК,с ДРР, с ДДИ, с

01 5,8 ■ 10-4 0,325 0,009 0,012

02 0,003 2 0,027 0,045

03 0,005 - 0,051 0,104

04 0,011 - 0,099 0,24

05 0,016 - 0,108 0,24

06 0,02 - 0,154 -

07 0,03 - 0,22 -

08 0,038 - 0,302 -

09 0,05 - 0,333 -

010 0,07 - 0,423 -

гама и Репса ([22], ДРР), использующего при пересчете хранимую информацию о кратчайших путях, с временной сложностью О(тп+п21одп) и пространственной сложностью 0(п2); алгоритма Деметреску и Италиано ([7], ДДИ), пользующегося при актуализации расстояний исторически локальными путями с временной сложностью 0(п2) и пространственной сложностью О(тп).

Таблица 3. Среднее время (в секундах) актуализации расстояний динамическими алгоритмами после добавления ребра

Г руппа графов ДУТ, с ДК,с ДРР, с ДДИ, с

G1 3,7 • 10-4 1,8 • Ю-4 0,009 0,017

G2 0,001 1,7 • 10-4 0,023 0,065

G3 0,003 - 0,044 0,148

G4 0,005 - 0,087 0,343

G5 0,006 - 0,087 0,426

G6 0,008 - 0,129 -

G7 0,012 - 0,183 -

G8 0,015 - 0,253 -

G9 0,02 - 0,272 -

G10 0,029 - 0,349 -

В эксперименте использовалась реализация алгоритма Дейкстры с двоичной кучей из библиотеки Boost Graph Library [25]. Алгоритмы СЛКП, ДК, ДРР и ДДИ использовались в реализации [10]. В тех случаях, когда алгоритмы в реализации [10] не смогли завершить вычисления из-за ошибок в авторском коде, в таблицах стоит прочерк. Характеристики тестовых графов и среднее время актуализации расстояний статическими алгоритмами представлены в таблице 1. Среднее время актуализации расстояний динамическими алгоритмами после удаления и добавления ребра представлены в таблицах 2 и 3 соответственно. Таблица 4 содержит данные о среднем объеме используемой оперативной памяти динамическими алгоритмами. В таблице 5 содержатся дополнительные данные о результатах тестирования разработанного алгоритма ДУТ. 80

Таблица 4. Средний объем используемой оперативной памяти

динамическими алгоритмами

Группа графов ДУТ, с ДК,с ДРР, с ДДИ, с

01 5,36 Мбайт 504 Мбайт 155 Мбайт 147 Мбайт

02 18,7 Мбайт 2,77 Гбайт 618 Мбайт 592 Мбайт

03 39,2 Мбайт - 1,35 Гбайт 1,29 Гбайт

04 70,6 Мбайт - 2,4 Гбайт 2,28 Гбайт

05 104 Мбайт - 3,79 Гбайт 3,45 Гбайт

06 147 Мбайт - 5,45 Гбайт -

07 200 Мбайт - 7,36 Гбайт -

08 261 Мбайт - 9,69 Гбайт -

09 329 Мбайт - 12,2 Гбайт -

010 406 Мбайт - 14,8 Гбайт -

Полученные результаты свидетельствуют о том, что предложенные алгоритмы позволяют существенно сократить время актуализации расстояний после удаления ребра в сравнении с рассмотренными алгоритмами. Так, например, для графов размерности 104 время счета меньше в среднем в 6 раз. Быстрейший пересчет расстояний после добавления ребра производит алгоритм ДК, однако из-за ошибок в авторском коде [10] не ясна его скорость на графах размерности больше 2 ■ 103. Еще одним важным практическим преимуществом предложенных алгоритмов является использование гораздо меньшего объема оперативной памяти в сравнении с другими динамическими алгоритмами.

8. Заключение

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

Управление большими системами. Выпуск 65 Таблица 5. Результаты тестирования алгоритма ДУТ

Группа графов Добавление. Макс. время, с Удаление. Макс. время, с Среднее число РУТ Макс. число РУТ

G1 0,016 0,016 4,94 29

G2 0,016 0,016 6,66 42

G3 0,031 0,047 9,77 61

G4 0,047 0,14 8,83 58

G5 0,062 0,234 11,5 54

G6 0,078 0,218 10,3 60

G7 0,187 0,343 16,3 78

G8 0,209 0,608 11,5 68

G9 0,211 0,64 15,2 102

G10 0,281 0,904 14,3 85

изменении весов отдельных ребер.

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

Литература

1. РОДИОНОВ В.В. Параметрическая задача о кратчайших расстояниях // Ж. вычисл. матем. и матем. физ. -1968.-Т. 8, №5.-С. 1173-1177.

2. УРАКОВ А.Р., ТИМЕРЯЕВ Т.В. Алгоритм поиска кратчайших путей для разреженных графов большой размерности // Прикладная дискретная математика. - 2013. -№1(19). - С. 84-92.

3. AUSIELLO G., ITALIANO G.F., MARCHETTI-SPACCAMELA A., NANNI U. Incremental algorithms for minimal length paths // Journal of Algorithms. - 2004. -Vol. 12, №4. - P. 615-638.

4. BASWANA S., HARIHARAN R., SEN S. Improved decremental algorithms for maintaining transitive closure and all-pairs shortest paths // Journal of Algorithms. - 2007. -Vol. 62, №2. - P. 74-92.

5. CICERONE S., DI STEFANO G., FRIGIONI D., NANNI U. A fully dynamic algorithm for distributed shortest paths // Theoretical Computer Science. - 2003. - Vol. 297, №1-3. -P. 83-102.

6. DEMETRESCU C., EMILIOZZI S., ITALIANO G.F. Experimental analysis of dynamic all pairs shortest path algorithms // Proc. of the Fifteenth Annual ACM-SIAM Symposium on Discrete Algorithms. - Philadelphia: Society for Industrial and Applied Mathematics, 2004. - P. 362-371.

7. DEMETRESCU C., ITALIANO G.F. A new approach to dynamic all pairs shortest paths // Journal of the ACM. -2004. - Vol. 51, №6. - P. 968-992.

8. DIONNE R. Etude et extension d'un algorithme de Murchland // INFOR. - 1978. - №169. - P. 132-146.

9. EVEN S., GAZIT H. Updating distances in dynamic graphs // Methods of Operations Research. - 1985. - №49. -

P. 371-387.

10. Experimental Evaluation of Dynamic All Pairs Shortest Path Algorithms [Электронный ресурс]. - URL: http://www.dis.uniroma1.it/~demetres/experim/dsp/ (дата обращения: 27.12.2016).

11. FAKCHAROEMPHOL J., RAO S. Planar graphs, negative weight edges, shortest paths, and near linear time // Journal of Computer and System Sciences. - 2006. - Vol. 72, №5. -P. 868-889.

12. FRIGIONI D., MARCHETTI-SPACCAMELA A., NANNI U. Fully dynamic algorithms for maintaining shortest paths trees // Journal of Algorithms. - 2000. -№34. - P. 351-381.

13. GABOW H., TARJAN R. A linear-time algorithm for a special case of disjoint set union // Journal of Computer and System Sciences. - 1985. - Vol. 30, №2. - P. 209-221.

14. GRECO S., MOLINARO C., PULICE C. Fully dynamic algorithms for maintaining shortest paths trees // Proc. of the 28th International Conference on Scientific and Statistical Database Management. - New York: ACM, 2016. -

P. 9:1-9:12.

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

15. HENZINGER M., KLEIN P., NANONGKAI D. Dynamic Approximate All-Pairs Shortest Paths: Breaking the O(mn) Barrier and Derandomization // Proc. of the 2013 IEEE 54th Annual Symposium on Foundations of Computer Science. -Washington: IEEE Computer Society, 2013. - P. 538-547.

16. HENZINGER M., KLEIN P., RAO S., SUBRAMANIAN S. Faster shortest-path algorithms for planar graphs // Journal of Computer and System Sciences. - 1997. - Vol. 55, №1. -P. 3-23.

17. KING V. Fully dynamic algorithms for maintaining all-pairs shortest paths and transitiveclosure in digraphs // Proc. of the 40th Annual Symposium on Foundations of Computer Science. - Washington: IEEE Computer Society, 1999. -P. 81-99.

18. LOUBAL P. A network evaluation procedure // Highway Research Record. - 1967. - №205. - P. 96-109.

19. MURCHLAND J. The effect of increasing or decreasing the length of a single arc on all shortest distances in a graph // Technical report, LBS-TNT-26. - London: London Business School, Transport Network Theory Unit, 1967.

20. OpenStreetMap [Электронный ресурс]. - URL: http://wiki.openstreetmap.org/wiki/Planet.osm (дата обращения: 27.12.2016).

21. PANG C., DONG G., RAMAMOHANARAO K. Incremental maintenance of shortest distance and transitive closure in first-order logic and SQL // ACM Transactions on Database Systems. - 2005. - Vol. 30, №3. - P. 698-721.

22. RAMALINGAM G., REPS T. An incremental algorithm for a generalization of the shortest path problem // Journal of Algorithms. - 1996. - №21. - P. 267-305.

23. RAMARAO K., VENKATESAN S. On finding and updating shortest paths distributively // Journal of Algorithms. -1992. - Vol. 13, №2. - P. 235-257.

24. RODITTY L., ZWICK U. Dynamic Approximate All-Pairs Shortest Paths in Undirected Graphs // SIAM Journal on Computing. - 2012. - Vol. 41, №3. - P. 670-683.

25. The Boost Graph Library [Электронный ресурс]. - URL: www.boost.org/doc/libs/1_59_0/libs/graph/doc/index.html (дата обращения: 27.12.2016).

26. THORUP M. Fully-Dynamic All-Pairs Shortest Paths: Faster and Allowing Negative Cycles // Proc. of the 9th Scandinavian Workshop on Algorithm Theory. - Berlin: Springer, 2004. -P. 384-396.

ALGORITHM FOR DYNAMIC ALL-PAIRS DISTANCES IN GRAPH

Airat Urakov, Ufa State Aviation Technical University, Ufa, Candidate of Sciences, docent (urakov@ufanet.ru). Timofey Timeryaev, Ufa State Aviation Technical University, Ufa (timeryaev@yandex.ru).

Abstract: Fully dynamic all-pairs graph distances problem for undirected graphs with positive edge weights is considered. Edge weights can change arbitrary so distances between vertices should be kept actual. We propose an algorithm taking into account all possible distance changes by the use of edge addition and deletion procedures. The developed algorithm uses the notion of points equidistant to the vertices incident to the edge being deleted for an edge deletion procedure. This allows to significantly reduce time and memory complexity of the graph distance actualization task in practical scenarios. The conducted computational experiments showed that the proposed algorithms outperforms the fastest known methods.

Keywords: dynamic graph distances, graph update, equidistant points, graph actualization.

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

Поступила в редакцию 16.08.2016. Дата опубликования 31.01.2017.

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