#!/usr/bin/perl
my $damp = 0.85;
my $iter = 30;
my @graph = (
[1,2,3,4,5,6,7,8,9,10],
[0,2,3,4,5,6,7,8,9,10],
[1,0,3,4,5,6,7,8,9,10],
[1,2,0,4,5,6,7,8,9,10],
[1,2,3,0,5,6,7,8,9,10],
[1,2,3,4,0,6,7,8,9,10],
[1,2,3,4,5,0,7,8,9,10],
[1,2,3,4,5,6,0,8,9,10],
[1,2,3,4,5,6,7,0,9,10],
[1,2,3,4,5,6,7,8,0,10],
[1,2,3,4,5,6,7,8,9, 0]
);
$totpr = $#graph + 1;
for $r (0 .. $#graph ) { $pr[$r] = 1.0 / $totpr; }
for $i (0 .. $iter) {
@newpr = ();
for $r (0 .. $#graph ) {
$n = $#{$graph[$r]} + 1;
$ipr = $damp * ( $pr[$r] / $n );
for $c (0 .. $#{$graph[$r]} ) {
$newpr[$graph[$r][$c]] += $ipr;
}
}
for $r (0 .. $#newpr) {
$newpr[$r] += (1 - $damp);
}
@pr = @newpr;
print "$i: ";
for $r (0 .. $#pr) { printf " %.2f",$pr[$r]; }
print "\n";
}
$totpr=0.0;
for $r (0 .. $#graph ) { $totpr += $pr[$r]; }
printf "\nTotal PR = %.2f\n", $totpr;
print "Final PR:\n";
for $r (0 .. $#pr) {
$pctpr = 100 * ( $pr[$r] / $totpr );
printf "%u: %.1f%%\n", $r,$pctpr;
}
print "\n";