Формула PageRank для графа с взвешенными ребрами (последовательная или BSP)

Алгоритмы PageRank (которые я знаю) предполагают, что края не имеют весов. Итак, стандартная формула:

PR(A) = (1 - d)/N + d*\sigma PR(E)/L(E)

где L (E) - количество исходящих ссылок страницы E, где E - каждая страница, которая указывает на страницу A.

Как вы можете видеть здесь, веса ребер, входящих в A, не учитываются в формуле.

Два вопроса:

a) Какой была бы скорректированная формула, если бы мы учли вес каждого ребра, входящего в A, предполагая, что чем выше вес, тем лучше (пакет networkx в python учитывает взвешенные ребра, но код намного сложнее, чем приведенная выше формула, и я предпочел бы проверить, есть ли более простое решение)

б) Я действительно хочу это для фреймворка, подобного BSP Pregel. Имеется реализация стиля BSP Pregel но, как видите, он не учитывает веса на краю. Если вы можете предложить один, это было бы здорово


person RAbraham    schedule 16.02.2013    source источник


Ответы (2)


Я бы порекомендовал вам сначала сложить все веса ребер соседям, а затем передать процент ранга узла соседям.

Пример: узел имеет ранг 10. у него 2 соседа, и ребра к ним имеют вес 70 и 30. В сумме это будет 100. Первому узлу с весом ребра 70 вы испускаете ранг 7, и к другому 3.

person Matthias Kricke    schedule 17.02.2013

Существует Java-реализация WeightedPageRank здесь. Я не пробовал, но после быстрого чтения источников кажется, что он соответствует вашим требованиям.

person Julien    schedule 18.02.2013
comment
спасибо :), начну с простого подхода, предложенного merando - person RAbraham; 20.02.2013