УДК 519.6; 519.17
Е.С. Букка, Р.А. Кочкаров
параллельный алгоритм поиска внутреннего центра предфрактального графа
В статье предложен параллельный алгоритм поиска внутреннего центра предфрактального графа, смежность старых ребер которого сохраняется. Алгоритм а*2 построен для PRAM (Parallel Random Access Machine) - модели параллельной вычислительной системы [1].
Алгоритм а*2
Рассмотрим взвешенный предфрактальный граф Gl = (V EL), порожденный ориентированной затравкой H = (W, Q), смежность старых ребер которого сохраняется [2]. Затравка H является сильно связным графом, т. е. каждая вершина достижима из всякой другой вершины. Это означает также, что каждая вершина всего предфрак-тального графа достижима из всякой другой его вершины.
от друга, находят числа внутреннего разделения
(х(Ь)), каждый на своей подграф-затравке Ь-го
5 (Ь) ранга :
(х(Ь)) = тах[й(V(Ь),х(Ь))], где й(х(Ь),х(Ь)) = 0.
Поиск кратчайших путей осуществляется с помощью известного алгоритма Дейкстры [4]. Алгоритм Дейкстры будет использоваться в качестве процедуры, вызываемой по мере необходимости.
Рассмотрим далее подграф-затравки ^ - 1)-го
(L)
ранга Ь), = 1, пЬ-2 . Каждая из них в процессе порождения предфрактального графа ОЬ-1 была привязана к вершинам предыдущего в траектории графа GL-2, т. к. действует правило сохранения смежности старых ребер. Тогда каждая подграф-затравка ^ - 1)-го ранга Ь) также име-
Алгоритм
использует k процессоров ет одну общую вершину с соответствующими за-
РГ1, РГ2, ..., Рг„ где к = пЬ-1 [1, 3].
Опишем принцип работы алгоритма а*2. Алгоритм начинает свою работу с подграф-затравок
Ь-го ранга ^ь), = 1, пЬ 1. На последнем шаге порождения предфрактального графа ОЬ каждая вершина графа ОЬ-1 была замещена затравкой Н. Поскольку при порождении предфрактального графа действует правило сохранения смежности старых ребер, к каждой вершине О «привязываются» затравки одной из своих вершин. Назначим
по одному процес-
„ь-1
травками (L - 2)-го ранга z
(L)
значим каждой подграф-затравке zs ) по одному
sL-2 = 1, n l 2(l)
l-3
. На-
процессору из Prs
s
L-1
= 1, n
L-2
l-2
На втором шаге п процессоров РГ параллельно находят числа внутреннего разделения каждый для своей подграф-
затравки (L - 1)-го ранга z
(L)
L-1
= 1, n
L-2
( L-1)
st (x(L-1>) = max [d(v
f sl-1 ' , =m~i Jl-1
sL-1
x— 0 + s, (xs L;)L
каждой подграф-затравке z^
сору из Pr , sL = 1,2,
Рассмотрим подграф-затравку z{
(L)
т. к. за-
травка Н является сильно связной, то для всякой ее вершины можно найти путь к любой другой. Процессор РГ1 находит кратчайшие пути от
где й(х5,Ь 1)1, х^ 1)1) = 0. То есть осуществляется поиск кратчайших путей от (п - 1) вершин V подграф-затравки Ь) до общей вершины х Далее, к длине кратчайшего пути й (V
(L-1)
Jl-1 ( l-1) L-1
(L-1)-,
(n - 1) вершин v(L) подграф-затравки zx(
(L)
до
«общей» вершины x[L). Среди кратчайших пу- бирается максимальная. Заметим, что st (x(L))
, х- -')
добавляется соответствующее число разделения 5 (х^Ь)), найденное для подграф-затравок предыдущего ранга, и среди получившихся сумм вы-
(ЬК_
тей найдем максимальный и определим число
s, (x[l)) = max [d(v(l), x1(l))], которое назовем
,(l) (L)
j =1,n-1
j1
числом внутреннего разделения вершины х(Ь) подграф-затравки 2*{Ь).
Таким образом, на первом шаге к процессоров Рг1, Рг2, ..., Ргк параллельно и независимо друг
^ l
число внутреннего разделения той вершины, от
(L-1) x (L-1))
JL-( ' sL-1
(Lh = с Г„(^
которой начинается путь d(v 1, x^L 1). Можно
считать, что добавляем s, (x(s ) = st (v( )). Сум
ма d(x(L-1), x(L-1)) + st (x(L)) = st (x(L)), так как
sr.
d (x(L-1), x1- L-1)) = 0.
а
l
4
Математическое моделирование: методы, алгоритмы, технологии
Указанным способом находим числа внутрен-
него разделения st (x^ "*) для общих вершин x
(')
подграф-затравок б1 = 1, п1 —1 до 2-го ранга включительно, т. е. для всех I = Ь,Ь — 1,..., 2. На каждом шаге I = Ь,Ь — 1,..., 2 подграф-затравкам
2у1) назначаются процессоры Рг , б1 = 1, п1—1 .
На последнем шаге 1=2 найдены числа разделения (х^), Б2 = 1,п для общих вершин
Д2)
подграф-затравок 2-го ранга г и одной 2 Б2 (1) (1) подграф-затравки первого ранга г у = 2\ .
(1)
Подграф-затравка по сути соответствует
графу О, из траектории О, О,, ..., О,. Тогда для 1 11 Ь (1) каждой вершины подграф-затравки найдено
число (х(2)) , Б2 = 1, п .
Далее рассматриваем подграф-
затравку z
(1)
которой назначим процес-
п11 процессоров Рг подграф-затравкам г(1),
б1 = 1, п1—1 . Каждый процессор будет обрабатывать только назначенную ему подграф-затравку.
(2) Одновременно п1-1 процессоров Рг параллельно и независимо друг от друга находят числа внутреннего разделения (х^)), каждый на назначенной ему подграф-затравке 1-го ранга ): st(¿1)) = тах[й(^),х«)) + st(х^)], где
й (х^), х^)) = 0. Поиск кратчайших путей между вершинами осуществляется с помощью процедуры Дейкстры.
Шаг Ь . (1) Назначим каждый из п процессоров Рг подграф-затравкам первого ранга г1(1) , = 1, п. Каждый процессор будет работать с подграф-затравкой г1(1) как с отдельным графом. (2) Одновременно п процессоров Рг парал-
сор Рг Процессор Рг находит для каж- лельно и независимо друг от друга находят чис-1 (1)1 (1) дой ее вершины x^ число внутреннего ла внутреннего разделения st (x^ ), каждый на
разделения: st(x®) = max [d(vx®) + st(x^2"1)].
1 y1=1,n-1 j1 1 2
Вершина x*o, для которой число внутреннего разделения st(x*) минимальное является внутренним центром предфрактального графа GL:
st(x') = min [st(xJ))].
S1=1, 2,..., n 1
Представим далее алгоритм а*2, где для поиска кратчайшего пути между двумя любыми вершинами графа используется процедура Дейкстры .
Алгоритм а*2
Вход: взвешенный предфрактальный граф Оь = (Гь, Еь )
Выход: х* — внутренний центр предфракталь-ного графа ОЬ.
Шаг 1. (1) Назначим каждый из к = пь—1 процессоров Рг1, Рг2, ..., Ргк подграф-затравкам
гБ,ь), бь = 1, пЬ—1 . Каждый процессор будет обрабатывать только назначенную ему подграф-затравку.
(2) Одновременно к процессоров Рг1, Рг2, ..., Ргк параллельно и независимо друг от друга находят числа внутреннего разделения st (х^ь)), каждый на назначенной ему подграф-затравке
Ь-го ранга г(Ь): б,(х(Ь)) = тах [й(м(Ь),х(Ь))], где
Б 7 1 у Б г у 4 ] Ь 7 Б Ь
й (х^ь), х^ь)) = 0. Поиск кратчайших путей между вершинами осуществляется с помощью процедуры Дейкстры.
Для всех I = Ь — 1, Ь — 2,..., 2 выполнить: Шаг Ь — I +1. (1) Назначим каждый из
назначенной ему подграф-затравке первого ранга г1(1): ^(х®) = та—[йх®) + ^(х(2))], где
й (х^1, х®) = 0. Поиск кратчайших путей между вершинами осуществляется с помощью процедуры Дейкстры.
Ш а г Ь + 1 . Используя процессор Рг из всех (1 ) ¿1 вершин хБ , = 1, 2,..., п в качестве внутреннего центра предфрактального графа ОЬ выбрать вершину х* с наименьшим числом разделения:
5(х;) = т1п ^ (х^))].
б1=1, 2,..., п 1
Процедура Дейкстры.
Вход: взвешенный граф О = (V, Е).
Выход: кратчайшее расстояние й(у;, V ^).
Теорема 1. Вычислительная сложность алгоритма а*2 равна 0(4п2 Ы).
Доказательство. На первом шаге алгоритм работает на подграф-затравках Ь-го ранга , где находит числа внутреннего разделения вершин хбь), Бь = 1,2,..., п . Поиск числа внутреннего разделения на отдельно взятой подграф-затравке состоит из поиска кратчайших путей й(м(ь), х^ь) и выбора максимального из кратчайших путей. Поиск кратчайших путей осуществляется с помощью процедуры Дейкстры, вычислительная сложность которого равна п2 [2], а выбор максимального элемента или, в худшем случае, сортировка элементов по возрастанию требует выполнения также п2 операций. Тогда поиск числа внутреннего разделения на одной подграф-затравке требует в сумме 2п2 операций. Число всех подграф-
т l-1
затравок L-го ранга равно n , для выполнения
-l-1
шага 1 или поиска всех 55(х^-1), = 1, 2,..., п
требуется 2п2 • пЬ-1 = 2пЬ+1 операций.
На следующем шаге осуществляется поиск чисел внутреннего разделения для вер-
г(Ь-1), = 1,2,..., пЬ-2, что требует
шин
2п2 • пЬ-2 = 2пЬ операций. Продолжая поиск внутренних центров вершин до второго ранга включительно получаем: 2пЬ+1 + 2пЬ + 2пЬ-1 +... + 2п3. На шаге Ь осуществляется поиск кратчайших путей попарно между всеми вершинами х®, = 1,2,..., п, что требует п2 • п = п3 операций плюс поиск максимального элемента на шаге Ь +1.
В сумме получаем: 2пЬ+1 + 2пЬ + 2пЬ-1 +... + 2п3 + п3 + п2 < < 2пЬ+1 + 2пЬ + 2пЬ-1 +... + 2п3 + 2п2 + п3 =
ь+1 2
= 2 ^ п •п - п + пЗ < 2пЬ+2 - п2 + п3 < 2пЬ+2 + п -1
+ п3 < 2пЬ+2 + 2пЬ+2 = 4п2 • пЬ = 4п2 • N.
Таким образом, вычислительная сложность алгоритма а*2 равна 0(4п2 • N).
Отметим, что в качестве процедуры Дейкстры можно использовать другие известные последовательные алгоритмы поиска кратчайших путей, тогда будет меняться и вычислительная сложность алгоритма а*2.
Теорема 2. Временная сложность алгоритма а*2 равна 0(4п3 • Ь).
Доказательство. На первом шаге алгоритм а* находит числа внутреннего разделения на
подграф-затравках L -го ранга z
( l)
St = 1, П
На каждой подграф-затравке работает назначен-
ный ей процессор Рг . Поиск числа внутреннего разделения на отдельно взятой подграф-затравке состоит из поиска кратчайших путей до вершины х^ от других вершин подграф-затравки и выбора максимального из кратчайших путей. Поиск кратчайших путей осуществляется с помощью процедуры Дейкстры, вычислительная сложность которого равна п2 , а выбор максимального элемента требует выполнения также (п -1) операций [5]. Тогда поиск числа внутреннего разделения на одной подграф-затравке требует в сумме не более 2п2 операций. Поскольку процессоры работают параллельно, первый шаг займет 2п2 времени.
На втором шаге также каждой подграф-
затравке (Ь - 1)-го ранга Ь-1), = 1, пЬ-2 назначается процессор Рг . Поиск числа вну-
5Ь-1
треннего разделения на одной подграф-затравке требует 2п2 операций. Поскольку процессоры работают параллельно, второй шаг также займет 2п времени.
Таким образом, осуществляя поиск чисел внешнего разделения на подграф-затравках разных рангов, на каждом шаге до (Ь -1) -го шага включительно требуется 2п2 времени. Сложив время, потраченное на всех (Ь -1) шагах, получим 2п • Ь.
На шаге Ь осуществляется поиск кратчайших путей попарно между всеми вершинами х®, = 1,2,..., п, что требует п2 времени, а шаг (Ь +1) требует затрат (п -1) времени на поиск максимального элемента.
Складывая время, необходимое для поиска внутреннего центра предфрактального графа, получим: 2п2 • Ь + п2 + (п -1) < 2п2 • (Ь +1). Таким образом, время исполнения алгоритма а*2 равно 0(2п2 • (Ь +1) .
СПИСОК ЛИТЕРАТУРЫ
1. Воеводин, В.В. Параллельные вычисления [Текст]/В.В. Воеводин, Вл.В. Воеводин.-СПб.: БХВ-Петербург, 2002. -608 с.
2. Кочкаров, А.М. Распознавание фрактальных графов. Алгоритмический подход [Текст]/А.М. Кочка-ров//Нижний Архыз: РАН САО, 1998. -170 с.
3. Кочкаров, А.А. Параллельные алгоритмы на предфрактальных графах [Текст]/А.А. Кочкаров, Р. А. Кочкаров//Препринт ИПМ имени М.В. Кел-
дыша РАН.-2003.-№ 84. -20 с.
4. Кристофидес, Н. Теория графов. Алгоритмический подход [Текст]/Н. Кристофидес.-М.: Мир, 1978.-432 с.
5. Асанов, М.О. Дискретная математика: графы, матроиды, алгоритмы [Текст]/М.О. Асанов, В.А. Баранский, В.В. Расин._Ижевск: НИЦ «РХД», 2001. -288 с.