Алгоритм Брандеса

Алгоритм поиска важных узлов в графе

Алгоритм Брандеса
Неориентированный граф , раскрашенный в зависимости от центральности каждой вершины по промежуточному признаку от наименьшего (красный) до наибольшего (синий).
СортТеория сети центральности
Структура данныхСвязный граф
Худший вариант производительности О ( | В | | Э | ) {\displaystyle O(|V||E|)} (невзвешенный) (взвешенный)
О ( | В | | Э | + | В | 2 бревно | В | ) {\displaystyle O(|V||E|+|V|^{2}\log |V|)}
Наихудшая сложность пространства О ( | В | + | Э | ) {\displaystyle O(|V|+|E|)}

В теории сетей алгоритм Брандеса — это алгоритм для вычисления центральности по промежуточности вершин в графе . Алгоритм был впервые опубликован в 2001 году Ульриком Брандесом . [1] Центральность по промежуточности, наряду с другими мерами центральности , является важной мерой во многих реальных сетях, таких как социальные сети и компьютерные сети . [2] [3] [4]

Определения

Существует несколько метрик для центральности узла, одна из которых — промежуточная центральность . [5] Для узла в связном графе промежуточная центральность определяется как: [6] [7] в {\displaystyle v}

С Б ( в ) = с В т В σ с т ( в ) σ с т {\displaystyle C_{B}(v)=\sum _{s\in V} \sum _{t\in V}{\frac {\sigma _{st}(v)}{\sigma _{st} }}}

где — общее число кратчайших путей от узла до узла , а — число этих путей, проходящих через . Для невзвешенного графа длина пути считается числом содержащихся в нем ребер. σ с т {\displaystyle \сигма _{ст}} с {\displaystyle с} т {\displaystyle т} σ с т ( в ) {\displaystyle \sigma _{st}(v)} в {\displaystyle v}

По соглашению, всякий раз , когда , поскольку единственный путь — это пустой путь. Также, если это либо или , поскольку кратчайшие пути не проходят через свои конечные точки. σ с т = 1 {\displaystyle \сигма _{ст}=1} с = т {\displaystyle с=т} σ с т ( в ) = 0 {\displaystyle \sigma _{st}(v)=0} в {\displaystyle v} с {\displaystyle с} т {\displaystyle т}

Количество

δ с т ( в ) = σ с т ( в ) σ с т {\displaystyle \delta _{st}(v)={\frac {\sigma _{st}(v)}{\sigma _{st}}}}

известна как парная зависимость от и представляет собой долю кратчайших – путей , проходящих через . Центральность по промежуточности – это просто сумма парных зависимостей по всем парам. Помимо парной зависимости, также полезно определить ( отдельную) зависимость от относительно конкретной вершины : с т {\displaystyle ст} в {\displaystyle v} с {\displaystyle с} т {\displaystyle т} в {\displaystyle v} в {\displaystyle v} с {\displaystyle с}

δ с ( в ) = т В δ с т ( в ) {\displaystyle \delta _{s}(v)=\sum _{t\in V}\delta _{st}(v)} ,

с помощью которого мы можем получить краткую формулировку

С Б ( в ) = с В δ с ( в ) {\displaystyle C_{B}(v)=\sum _{s\in V}\delta _{s}(v)} .

Алгоритм

Алгоритм Брандеса вычисляет центральность посредничества всех узлов в графе. Для каждой вершины есть два этапа. с {\displaystyle с}

Кратчайший путь из одного источника

Количество кратчайших путей между и каждой вершиной вычисляется с помощью поиска в ширину . Поиск в ширину начинается с , и записывается кратчайшее расстояние каждой вершины от , разделяя граф на дискретные слои. Кроме того, каждая вершина отслеживает набор вершин, которые в предыдущем слое указывают на нее, . Описанный в нотации set-builder , он может быть записан как: σ с в {\displaystyle \сигма _{св}} с {\displaystyle с} в {\displaystyle v} с {\displaystyle с} г ( в ) {\displaystyle d(v)} с {\displaystyle с} в {\displaystyle v} п ( в ) {\displaystyle p(v)}

п ( в ) = { ты В ( ты , в ) Э г ( ты ) + 1 = г ( в ) } {\displaystyle p(v)=\{u\in V\mid (u,v)\in E\land d(u)+1=d(v)\}} .

Это приводит к простой итеративной формуле : σ s v {\displaystyle \sigma _{sv}}

σ s v = u p ( v ) σ s u {\displaystyle \sigma _{sv}=\sum _{u\in p(v)}\sigma _{su}} ,

что по сути утверждает, что если находится на глубине , то любой кратчайший путь на глубине , расширенный одним ребром до , становится кратчайшим путем к . v {\displaystyle v} d ( v ) {\displaystyle d(v)} d ( v ) 1 {\displaystyle d(v)-1} v {\displaystyle v} v {\displaystyle v}

Обратное распространение

Брандес доказал следующую рекурсивную формулу для вершинных зависимостей: [1]

δ s ( u ) = v u p ( v ) σ s u σ s v ( 1 + δ s ( v ) ) {\displaystyle \delta _{s}(u)=\sum _{v\mid u\in p(v)}{\frac {\sigma _{su}}{\sigma _{sv}}}\cdot (1+\delta _{s}(v))} ,

где сумма берется по всем вершинам , которые находятся на одно ребро дальше от . Эта лемма устраняет необходимость явно суммировать все парные зависимости. Используя эту формулу, единственная зависимость от вершины на глубине определяется слоем на глубине . Более того, порядок суммирования не имеет значения, что позволяет использовать подход снизу вверх, начиная с самого глубокого слоя. v {\displaystyle v} s {\displaystyle s} u {\displaystyle u} s {\displaystyle s} u {\displaystyle u} d ( u ) {\displaystyle d(u)} d ( u ) + 1 {\displaystyle d(u)+1}

Оказывается, зависимости от всех других вершин можно вычислить со временем. Во время поиска в ширину порядок посещения вершин регистрируется в структуре данных стека . Затем шаг обратного распространения многократно выталкивает вершины, которые естественным образом сортируются по расстоянию от , по убыванию. s {\displaystyle s} u {\displaystyle u} O ( | E | ) {\displaystyle O(|E|)} s {\displaystyle s}

Для каждого вытолкнутого узла мы перебираем его предшественников : добавляется вклад в , то есть, v {\displaystyle v} u p ( v ) {\displaystyle u\in p(v)} v {\displaystyle v} δ s ( u ) {\displaystyle \delta _{s}(u)}

σ s u σ s v ( 1 + δ s ( v ) ) {\displaystyle {\frac {\sigma _{su}}{\sigma _{sv}}}\cdot (1+\delta _{s}(v))} .

Важно то, что каждый слой полностью распространяет свои зависимости, прежде чем перейти к слою с меньшей глубиной, из-за природы поиска в ширину. Как только распространение достигает обратно , каждая вершина теперь содержит . Их можно просто добавить к , поскольку s {\displaystyle s} v {\displaystyle v} δ s ( v ) {\displaystyle \delta _{s}(v)} C B ( v ) {\displaystyle C_{B}(v)}

C B ( v ) = s V δ s ( v ) {\displaystyle C_{B}(v)=\sum _{s\in V}\delta _{s}(v)} .

После итераций кратчайшего пути из одного источника и обратного распространения каждая содержит центральность по промежуточности для . | V | {\displaystyle |V|} C B ( v ) {\displaystyle C_{B}(v)} v {\displaystyle v}

Псевдокод

Следующий псевдокод иллюстрирует алгоритм Брандеса на невзвешенном ориентированном графе. [8]

Алгоритм Брандеса ( Graph ) для  каждого  u  в  Graph.Vertices  делают CB[ u ] ← 0 для каждого  s  в  Graph.Vertices  сделать  для каждого  v  в  Graph.Vertices  сделать δ[ v ] ← 0 // Одиночная зависимость s от v prev[ v ] ← пустой список // Непосредственные предшественники v во время BFS σ[ v ] ← 0 // Количество кратчайших путей от s до v (s подразумевается) dist[ v ] ← null // Изначально пути неизвестны, σ[ s ] ← 1 // за исключением начальной вершины расст[ с ] ← 0 Q ← очередь, содержащая только s // Поиск в ширину S ← пустой стек // Запись порядка посещения вершин // Кратчайшие пути из одного источника пока  Q не пусто do  uQ .dequeue() S .push( u ) для каждого  v  в  Graph.Neighbours [ u ] do  if dist[ v ] = null  then dist[ v ] ← dist[ u ] + 1 Q .enqueue( v ) if dist[ v ] = dist[ u ] + 1 then σ[ v ] ← σ[ v ] + σ[ u ] prev[ v ].append( u ) // Обратное распространение зависимостей пока  S не пусто do  vS .pop() для каждого  u  в prev[ v ] выполнить δ[ u ] ← δ[ u ] + σ[ u ] / σ[ v ] * (1 + δ[ v ]) если  us  , то CB[ v ] ← CB[ v ] + δ[ v ] // Уменьшено вдвое для неориентированных графов возврат CB

Продолжительность работы

Время работы алгоритма выражается через количество вершин и количество ребер . | V | {\displaystyle |V|} | E | {\displaystyle |E|}

Для каждой вершины мы запускаем поиск в ширину, что занимает время. Поскольку граф связный, компонент включает в себя термин, поскольку число ребер не менее . s {\displaystyle s} O ( | V | + | E | ) {\displaystyle O(|V|+|E|)} | E | {\displaystyle |E|} | V | {\displaystyle |V|} | V | 1 {\displaystyle |V|-1}

На этапе обратного распространения каждая вершина выталкивается из стека, а ее предшественники перебираются. Однако, поскольку каждая запись предшественника соответствует ребру в графе, этот этап также ограничен . O ( | E | ) {\displaystyle O(|E|)}

Общее время работы алгоритма, таким образом, составляет , улучшение по сравнению с временными ограничениями, достигнутыми предыдущими алгоритмами. [1] Кроме того, алгоритм Брандеса улучшает пространственную сложность наивных алгоритмов, которые обычно требуют пространства. Алгоритм Брандеса хранит только большинство предшественников вместе с данными для каждой вершины, что делает его дополнительную пространственную сложность O ( | V | | E | ) {\displaystyle O(|V||E|)} O ( | V | 3 ) {\displaystyle O(|V|^{3})} O ( | V | 2 ) {\displaystyle O(|V|^{2})} | E | {\displaystyle |E|} O ( | V | + | E | ) {\displaystyle O(|V|+|E|)}

Варианты

Алгоритм может быть обобщен на взвешенные графы с использованием алгоритма Дейкстры вместо поиска в ширину. При работе с неориентированными графами центральность промежуточности может быть разделена на 2, чтобы избежать двойного подсчета обратного аналога каждого пути. Существуют также варианты для вычисления различных мер центральности, включая промежуточность с путями наибольшей длины , промежуточность ребер , промежуточность нагрузки и промежуточность напряжения . [8] k {\displaystyle k}

Ссылки

  1. ^ abc Brandes, Ulrik (июнь 2001 г.). «Более быстрый алгоритм для центральности по промежуточности». Журнал математической социологии . 25 (2): 163– 177. doi : 10.1080/0022250X.2001.9990249. ISSN  0022-250X . Получено 10 мая 2024 г.
  2. ^ Вассерман, Стэнли; Фауст, Кэтрин (1994). Анализ социальных сетей: методы и приложения. Структурный анализ в социальных науках. Кембридж: Cambridge University Press. doi : 10.1017/cbo9780511815478. ISBN 978-0-521-38707-1.
  3. ^ Боргатти, Стивен П.; Эверетт, Мартин Г. (1 октября 2006 г.). «Теоретико-графовый взгляд на центральность». Социальные сети . 28 (4): 466– 484. doi :10.1016/j.socnet.2005.11.005. ISSN  0378-8733 . Получено 10 мая 2024 г.
  4. ^ Клейнберг, Джон М. (1 сентября 1999 г.). «Авторитетные источники в гиперссылочной среде». Журнал ACM . 46 (5): 604– 632. doi :10.1145/324133.324140. ISSN  0004-5411 . Получено 10 мая 2024 г.
  5. ^ Sabidussi, Gert (1 декабря 1966 г.). «Индекс центральности графа». Psychometrika . 31 (4): 581– 603. doi :10.1007/BF02289527. ISSN  1860-0980. PMID  5232444. Получено 10 мая 2024 г.
  6. ^ Freeman, Linton C. (1977). «Набор мер центральности, основанных на промежуточности». Социометрия . 40 (1): 35– 41. doi :10.2307/3033543. ISSN  0038-0431. JSTOR  3033543.
  7. ^ Антонисс, JM (1 января 1971 г.). «Спешка в ориентированном графе». Stichting Mathematich Centrum .
  8. ^ ab Brandes, Ulrik (май 2008 г.). «О вариантах центральности кратчайшего пути и их общем вычислении». Социальные сети . 30 (2): 136– 145. doi : 10.1016/j.socnet.2007.11.001. ISSN  0378-8733 . Получено 10 мая 2024 г.
Retrieved from "https://en.wikipedia.org/w/index.php?title=Brandes%27_algorithm&oldid=1250833287"