#!/usr/bin/ruby -w
require 'matrix'
$tacnum=0.85
$cycletime=10
#p ARGV[0]
$nodesnum=ARGV[1].to_i
$values=Array.new($nodesnum, 0)
$nodes=Array.new($nodesnum){Array.new($nodesnum, 0)}
$everynodenum=Array.new($nodesnum, 0)
#p $nodes
#p $nodes
File.open(ARGV[0], "r") do |f|
f.each do |line|
if line=~/(\d+)\s+(\d+)/
puts "#{$~[1]} #{$~[2]}"
srcnode=$~[1].to_i
dstnode=$~[2].to_i
$nodes[srcnode][dstnode]=1
$everynodenum[srcnode]+=1
# p "---------------"
# p $nodes
# p "---------------"
end
end
end
$nodesnum.times do |i|
if $everynodenum[i]>0
$nodesnum.times do |j|
$nodes[i][j]=$nodes[i][j]*1.0/$everynodenum[i]
end
else
$nodesnum.times do |j|
$nodes[i][j]=1.0/$nodesnum
end
end
end
#puts "the wanted:"
#p $nodes
#p "---------------------"
#p $everynodenum
e=Matrix[Array.new($nodesnum, 1.0)].transpose*Matrix[Array.new($nodesnum, 1.0)]
#p e
a=Matrix.rows($nodes)
#p a
a=a*$tacnum+e*((1-$tacnum)/6.0)
#p a
$cycletime.times do
tmpa=a*a
a=tmpa
end
p a.to_s
$nodesnum.times do |i|
$nodesnum.times do |j|
$values[i]=$values[i]+a[j, i]
end
end
$valuesHash=Hash.new
$nodesnum.times do |i|
$valuesHash[i.to_s]=$values[i]
end
p $values.to_a
p $values.sort
p $valuesHash
sortresult=$valuesHash.sort_by {|key, value| -value}
p sortresult
$nodesnum.times do |i|
p sortresult[i][0]
end
ruby *.rb guanxi.txt 结点数
guanxi.txt:
0 2
1 0
1 2
2 1
3 2
3 4
3 5
5 3
5 4
pagerank排序结果:
1
2
0
4
3
5