Алгоритм Тарьяна-Вишкина поиска компонент двусвязности

Материал из Алговики
Перейти к навигации Перейти к поиску

Содержание

1 Свойства и структура алгоритма

1.1 Общее описание алгоритма

Параллельный алгоритм Тарьяна-Вишкина [1] находит компоненты двухсвязности неориентированного графа за время O(\ln n) на O(m + n) процессорах. Алгоритм может быть адаптирован для поиска мостов. Эффективность алгоритма Тарьяна-Вишкина подтверждена в последнее время[2][3] как на системах архитектуры SMP, так и при вычислениях на GPU.

1.2 Математическое описание алгоритма

1. Для каждой компоненты связности графа найти какое-либо остовное дерево T.

2. Перенумеровать вершины T в порядке обратного обхода.

3. В порядке возрастания номера вершины выполнить следующие действия:

a. D(v) := 1+ \sum_{v \rightarrow w}D(w)

b. L(v) := \min { \{N(v) - D(v)+1 \} \cup \{ L(w) | v \rightarrow w \} \cup \{ N(w) | v \cdots w \} }

c. H(v) := \max { \{ N(v) \} \cup \{ H(w) | v \rightarrow w \} \cup \{ N(w) | v \cdots w \} }

d. Пометить ребро v \rightarrow w мостом, если H(w)\lt =N(w) и L(w)\gt N(w)-D(w).

1.3 Вычислительное ядро алгоритма

1.4 Макроструктура алгоритма

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

Для этого для каждой вершины v определяется указатель на родительскую вершину P(v); на шаге инициализации P(v):=v. Далее остовный лес строится чередованием двух параллельных операций:

• Удвоение указателей: P(v):=P(P(v)) ;

• Соединение: P(P(v)):=P(w), где v – вершина P-дерева ( P(v)=vна текущем шаге), w– некоторая вершина, для которой существует ребро (v,w)\in E. Ребро помечается, как принадлежащее остовному лесу .

Далее производятся следующие шаги:

• перенумерация вершин в обратном порядке обхода (post-order);

• вычисление количества потомков D(v) для каждой вершины;

• вычисление значений L(v) и H(v) для каждой вершины;

• пометка рёбер v \rightarrow w мостами, если H(w)\lt =N(w) и L(w)\gt N(w)-D(w).

Основной идеей для обеспечения завершения работы алгоритма за O(ln n) шагов является систематическое использование операции удвоения указателей.

1.5 Схема реализации последовательного алгоритма

1.6 Последовательная сложность алгоритма

Последовательный вариант алгоритма аналогичен алгоритму Тарьяна[4] и имеет линейную сложность O(m + n).

1.7 Информационный граф

1.8 Ресурс параллелизма алгоритма

Алгоритм изначально параллельный, время работы O(\ln n) на O(m + n) процессорах.

1.9 Входные и выходные данные алгоритма

1.10 Свойства алгоритма

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

2. Компонента сильной связности является объединением всех циклом, проходящих через её вершины.

2 Программная реализация алгоритма

2.1 Особенности реализации последовательного алгоритма

2.2 Локальность данных и вычислений

2.2.1 Локальность реализации алгоритма

2.2.1.1 Структура обращений в память и качественная оценка локальности
2.2.1.2 Количественная оценка локальности

2.3 Возможные способы и особенности параллельной реализации алгоритма

2.4 Масштабируемость алгоритма и его реализации

2.4.1 Масштабируемость алгоритма

2.4.2 Масштабируемость реализации алгоритма

2.5 Динамические характеристики и эффективность реализации алгоритма

2.6 Выводы для классов архитектур

2.7 Существующие реализации алгоритма

3 Литература

  1. Tarjan, Robert Endre, and Uzi Vishkin. “An Efficient Parallel Biconnectivity Algorithm.” SIAM Journal on Computing 14, no. 4 (1985): 862–74.
  2. Edwards, James A, and Uzi Vishkin. “Better Speedups Using Simpler Parallel Programming for Graph Connectivity and Biconnectivity,” PMAM’12, 103–114, New York, USA: ACM Press, 2012. doi:10.1145/2141702.2141714
  3. Guojing Cong, and David A Bader. “An Experimental Study of Parallel Biconnected Components Algorithms on Symmetric Multiprocessors (SMPs),” 45b, IEEE, 2005. doi:10.1109/IPDPS.2005.100.
  4. Tarjan, Robert. “Depth-First Search and Linear Graph Algorithms.” SIAM Journal on Computing 1, no. 2 (1972): 146–60.