Comment detail

PageRankの計算 (Nested Flatten)
Squeak Smalltalk で。あいにく組み込みの Matrix が貧弱で、固有値や固有ベクトルを求めるメソッドが見あたらなかったので、tell さんの #2339 同様に累乗法で絶対値最大の固有値に対応する固有ベクトルを求めました。あしからず。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
| data matrix pageRanks |
data := #((2 3 4 5 7) (1) (1 2) (2 3 5) (1 3 4 6) (1 5) (5)).
matrix := Matrix new: data size element: 0.

data keysAndValuesDo: [:page :refs |
    refs do: [:ref | matrix at: page at: ref put: 1 / refs size]].

pageRanks := [:mat |
    | prev delta |
    prev := mat.
    [   mat := (mat := mat +* mat) / mat sum asFloat.
        ((delta := prev - (prev := mat)) * delta) sum > 1e-12] whileTrue.
    (mat atRow: 1) / (mat atRow: 1) sum].

^pageRanks value: matrix

Index

Feed

Other

Link

Pathtraq

loading...