これは、ページランクについて学ぶのに最適な記事です。ここから Perl バージョンを実装して、 Textrankで使用します。ただし、ページランクと、記事で説明したさまざまな側面 (減衰係数、直接グラフまたは無向グラフなど) が結果にどのように影響するかについて知りたい場合は、RまたはOctaveで実験を実行することをお勧めします。効率的に実装する方法を学びたい場合は、現在行っているようにゼロからプログラミングするのが最善です。
ほとんどの Web グラフ (またはネットワーク) は非常にまばらです。これは、グラフの行列表現のほとんどのエントリがゼロであることを意味します。スパース行列を表すために使用される一般的なデータ構造はhash-mapで、ゼロ値は保存されません。たとえば、マトリックスが
1, 0, 0
0, 0, 2,
0, 3, 0
2 次元のハッシュ マップは、hm(0,0)=1、hm(1,2)=2、および hm(2,1)=3 の値のみを格納します。したがって、 Web グラフの 1,000,000 x 1,000,000 マトリックスでは、ゼロ以外の値は数百万しかないと予想されます。各行の平均値がゼロ以外の値が 5 つだけの場合、ハッシュマップは約 5*(8+8+8)*10^6 バイト ~ 115MB を使用して格納します (左の int インデックスに 8、右の int に 8)。 index、double 値の場合は 8)。正方行列は 8*10^6*10^6 ~ 7 テラバイトを使用します。
Java で効率的なスパース行列とベクトルの乗算を実装するのは簡単ではありません。アルゴリズムのその側面に時間を割きたくない場合は、既に実装されているものもあります。疎行列の乗算は、pagerank アルゴリズムの実装が最も難しい側面であるため、その後は簡単になります (そしてより興味深いものになります)。