Это отличная статья, чтобы узнать о PageRank. Я реализовал Perl-версию из него здесь для использования с Textrank. Однако, если вы хотите просто узнать о PageRank и о том, как различные аспекты, обсуждаемые в статье, влияют на результаты (коэффициент демпфирования, прямой или неориентированный граф и т. д.), я бы рекомендовал провести эксперименты в R или Octave а>. Если вы хотите научиться эффективно его реализовывать, то лучше всего программировать его с нуля, как вы это делаете.
Большинство веб-графиков (или сетей) очень разрежены, что означает, что большинство записей в матричном представлении графика равны нулю. Распространенной структурой данных, используемой для представления разреженной матрицы, является хеш. -map, где нулевые значения не сохраняются. Например, если матрица была
1, 0, 0
0, 0, 2,
0, 3, 0
двухмерная хэш-карта будет хранить только значения для hm(0,0)=1, hm(1,2)=2 и hm(2,1)=3. Таким образом, в матрице размером 1 000 000 на 1 000 000 веб-графика я ожидал бы получить всего несколько миллионов значений быть ненулевым. Если каждая строка содержит в среднем только 5 ненулевых значений, хэш-карта будет использовать около 5*(8+8+8)*10^6 байтов ~ 115 МБ для ее хранения (8 для левого целочисленного индекса, 8 для правого целочисленного индекса). index и 8 для двойного значения). Квадратная матрица будет использовать 8*10^6*10^6 ~ 7 терабайт.
Реализация эффективного умножения разреженной матрицы на вектор в Java нетривиальна, и уже есть некоторые реализован, если вы не хотите уделять время этому аспекту алгоритма. Умножение разреженной матрицы — наиболее сложный для реализации аспект алгоритма ранжирования страниц, поэтому после этого все становится проще (и интереснее).
person
Jeff Kubina
schedule
17.11.2012