Вычисление betweenness centrality
Содержание
- 1 Свойства и структура алгоритма
- 1.1 Общее описание алгоритма
- 1.2 Математическое описание алгоритма
- 1.3 Вычислительное ядро алгоритма
- 1.4 Макроструктура алгоритма
- 1.5 Схема реализации последовательного алгоритма
- 1.6 Последовательная сложность алгоритма
- 1.7 Информационный граф
- 1.8 Ресурс параллелизма алгоритма
- 1.9 Входные и выходные данные алгоритма
- 1.10 Свойства алгоритма
- 2 Программная реализация алгоритма
- 2.1 Особенности реализации последовательного алгоритма
- 2.2 Локальность данных и вычислений
- 2.3 Возможные способы и особенности параллельной реализации алгоритма
- 2.4 Масштабируемость алгоритма и его реализации
- 2.5 Динамические характеристики и эффективность реализации алгоритма
- 2.6 Выводы для классов архитектур
- 2.7 Существующие реализации алгоритма
- 3 Литература
1 Свойства и структура алгоритма
1.1 Общее описание алгоритма
Центральностью (англ. betweenness centrality[1]) вершины v графа G = (V, E) называется величина
- C_B(v) = \sum_{s \ne t \ne v \in V} \frac{\sigma_{st}(v)}{\sigma_{st}},
где \sigma_{st} – число различных кратчайших путей в графе G от вершины s к вершине t, а \sigma_{st}(v) – число таких путей, проходящих через вершину v.
Алгоритм Брандеса[2] вычисляет центральность всех вершин графа за время O(mn) невзвешенного графа и O(mn + n^2 \ln n) для взвешенного.
1.2 Математическое описание алгоритма
Пусть на графе G заданы положительные веса рёбер f(e), e \in E. Если граф невзвешенный, то f(e) \equiv 1. Обозначим через d(v, w) кратчайшее расстояние между вершинами v и w. Множество
- P_s(v) = \{ w \in V \mid d(s, v) = d(s, w) + f(w, v) \}
состоит из вершин w, предшествующих v на кратчайших путях от s к v.
Зависимостью вершины s от вершины v называется величина
- \delta_s(v) = \sum_{t \in V} \frac{\sigma_{st}(v)}{\sigma_{st}}.
По соглашению \sigma_{ss} = 1. Центральность тогда равна сумме зависимостей от всех вершин графа:
- C_B(v) = \sum_{s \ne v} \delta_s(v).
Брандес доказал[2], что зависимость вершин удовлетворяет рекурсивному соотношению
- \delta_s(v) = \sum_{v \in P_s(w)} \frac{\sigma_{sv}}{\sigma_{sw}} \left( 1 + \delta_s(w) \right).
Таким образом, зависимость s от всех вершин может быть вычислена за время O(m) после нахождения кратчайших путей от вершины s.
1.3 Вычислительное ядро алгоритма
Основной объём вычислений в алгоритме Брандеса приходится на решение задачи поиска кратчайших путей одной вершины (для взвешенного графа) или на поиск в ширину (для невзвешенного).
1.4 Макроструктура алгоритма
1.5 Схема реализации последовательного алгоритма
1.6 Последовательная сложность алгоритма
Вычислительная сложность алгоритма Брандеса O(n (S(n, m) + m)), где S(n, m) – сложность поиска кратчайших путей от одной вершины. Такая оценка получается исходя из того, что для каждой из n вершин требуется найти кратчайшие пути (со сложностью S(n, m)) и затем вычислить зависимости и обновить центральность (со сложностью O(m)).
Для невзвешенного графа S(n, m) = O(m) (для алгоритма поиска в ширину) и общая сложность составляет O(mn).
Для взвешенного графа S(n, n) = O(m + n \ln n) (для алгоритма Дейкстры[3] с использованием фибоначчиевой кучи[4]) и общая сложность составляет O(mn + n^2 \ln n).
Используемый объём памяти в обоих случаях составляет O(m + n): для каждой вершины необходимо хранить зависимость текущей вершины s и значение центральности, а для каждого ребра – отметку, лежит ли оно на кратчайшем пути.
1.7 Информационный граф
1.8 Ресурс параллелизма алгоритма
Алгоритм обладает высоким потенциалом параллелизма, как при вычислении кратчайших путей, так и при вычислении зависимостей вершин. Существуют эффективные реализации для GPU.[5]
1.9 Входные и выходные данные алгоритма
1.10 Свойства алгоритма
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 Существующие реализации алгоритма
- C++: Boost Graph Library (функция
betweenness_centrality
). - C++, MPI: Parallel Boost Graph Library
- функция
brandes_betweenness_centrality
вычисляет центральность вершин распределённого графа; - функция
non_distributed_brandes_betweenness_centrality
вычисляет центральность вершин графа, помещающегося в память одного узла, распределяя между узлами работу по поиску кратчайших расстояний.
- функция
- Java: WebGraph (класс
BetweennessCentrality
), многопоточная реализация. - Python: NetworkX (функция
betweenness_centrality
). - Python/C++: NetworKit (класс
networkit.centrality.Betweenness
).
3 Литература
- ↑ Freeman, Linton C. “A Set of Measures of Centrality Based on Betweenness.” Sociometry 40, no. 1 (March 1977): 35. doi:10.2307/3033543.
- ↑ Перейти обратно: 2,0 2,1 Brandes, Ulrik. “A Faster Algorithm for Betweenness Centrality.” The Journal of Mathematical Sociology 25, no. 2 (June 2001): 163–77. doi:10.1080/0022250X.2001.9990249.
- ↑ Dijkstra, E W. “A Note on Two Problems in Connexion with Graphs.” Numerische Mathematik 1, no. 1 (December 1959): 269–71. doi:10.1007/BF01386390.
- ↑ Fredman, Michael L, and Robert Endre Tarjan. “Fibonacci Heaps and Their Uses in Improved Network Optimization Algorithms.” Journal of the ACM 34, no. 3 (July 1987): 596–615. doi:10.1145/28869.28874.
- ↑ McLaughlin, Adam, and David A Bader. “Scalable and High Performance Betweenness Centrality on the GPU,” SC'14, 572–83, IEEE Press, 2014. doi:10.1109/SC.2014.52.