Между центральностью Brandes алгоритм

Я читал о центральности Betweenness, основанной на алгоритм Брандес. У меня есть несколько вопросов относительно алгоритма

  1. дает ли этот алгоритм точную центричность или аппроксимацию? Когда я бегу BC На Sage, который основан на алгоритме Брандеса, он не дал точного значения. Например, вместо 14 я получил 13,9956......

  2. может кто-нибудь объяснить " накопление парных зависимостей" раздел на более простых условиях?

  3. Что делать, когда для " Нам нужно сохранить зависимость на вершину и списки предшественников."Делается ли это при выполнении алгоритма Дейкстры?

  4. Что делать для взвешенных графиков?

1 ответов


  1. алгоритм Брандеса дает точную центральность каждой вершины. Я не знаю, какая реализация алгоритма используется в Sage, но, скорее всего, это проблема точности.

  2. накопительная часть алгоритма, вероятно, самая сложная. Когда вы достигнете этой части, у вас есть in Сигма количество кратчайших путей от текущей вершины s к остальным вершинам. Кроме того, в пред, у вас есть для каждой вершины в списке вершин, которые достигают их по кратчайшему пути. Зависимость Дельта будет количество betweenness, что s будет способствовать остальным вершинам (от 0 до N-2), т. е., как многое зависит s на каждой вершине.

    вершинный w выталкивается из S пока не опустеет, начиная с самого дальнего от s и заканчивая s сам (имейте в виду, что вершина была добавлена в S когда он был достигнут в кратчайшем пути подсчета части алгоритма). Для каждого v в списке предшественников w (пред[w]), вычисляется новое значение для зависимости, и это (для меня) сложная часть.

    выражение говорит Дельта[v] = Дельта[v] + (Сигма[v]/Сигма[w]) * (1 + Дельта[w]), или, другими словами, новая зависимость для v это зависимость, которая у него уже была plus (Сигма[v]/Сигма[w]) * (1 + Дельта[w]). Ну, прежде всего, обратите внимание, что когда вершина w выталкивается из S, все его зависимости Дельта[w] был рассчитан, потому что не будет будущих узлов дальше, чем w, поэтому он не может быть посередине любого другого кратчайшего пути. Тогда должно быть ясно, что (Сигма[v]/Сигма[w]) является зависимостью пары (s, w) of v, то есть насколько зависят вершины s и w of v в оставайтесь на связи (потому что это доля кратчайших путей от s to w, проходящей через v). Но (и это менее очевидная часть, я думаю), вершина v не только в самых коротких путях между s и w, это также во всех кратчайших путях, в которых w! Итак, если бы был кратчайший путь от s для некоторой вершины x проходя через w, тогда должен быть путь от s to x, проходящей через v. Проще говоря, s будет зависеть больше от v если бы это зависело от w. Итак, фактор (1+Дельта[w]) объясняется следующим образом: 1, Для зависимости v пар (s, w), и Дельта[w] для зависимости v каждой пары (s, w>).

    наконец, Дельта[w] добавляется к его полной промежуточности Cb[w] (если w ==s, потому что s не считается зависимым от себя).

    Как я уже сказал, это не простой алгоритм для понимания на первый взгляд. Не торопитесь и прокомментируйте, если у вас все еще есть сомневается.

  3. Я не совсем уверен, что вы говорите здесь. Если вы спрашиваете, как вы можете получить список предшественников из вывода алгоритма Дейкстры, ну, вы не можете, по крайней мере напрямую. Если вы хотите реализовать этот алгоритм с использованием ранее существовавшего алгоритма Dijkstra, вы не сможете, если алгоритм не допускает какого-либо посетителя во время его выполнения, например, реализацию библиотеки графов Boost Dijkstra. Кстати, эта библиотека уже реализует этот алгоритм (посмотреть здесь), и даже распределенная / параллельная версия (здесь и здесь), если вас это интересует.

  4. есть (по крайней мере) два способа, которыми вы можете рассматривать Весы в расчете между ними (я предполагаю, что вы имеете в виду весы ребер): как "длина", поэтому она влияет на расчет кратчайших путей, и как "важность" или "кратность" (например, количество раз отношение кажется.) Брандес сам предоставляет несколько вариантов для этих и других случаев на своей бумаге о вариантах кратчайшего пути между Центральностью и их общим вычислением, алгоритмы 10 (для" длины") и 11 (для"кратности"). Обратите внимание, что в алгоритме 11 этой статьи есть ошибка, которая объясняется в страница публикаций Брандеса (найдите название документа в списке).