/
randomsurferhistogram.py
executable file
·63 lines (53 loc) · 1.59 KB
/
randomsurferhistogram.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#-----------------------------------------------------------------------
# randomsurferhistogram.py
#-----------------------------------------------------------------------
import stdio
import stdarray
import stddraw
import sys
import random
t = int(sys.argv[1]) # number of moves
n = stdio.readInt() # number of pages
stdio.readInt() # ignore integer required by input format
# Read transition matrix.
# p[i][j] = prob. that surfer moves from page i to page j
p = stdarray.create2D(n, n, 0.0)
for i in range(n):
for j in range(n):
p[i][j] = stdio.readFloat()
# freq[i] = # times surfer hits page i
freq = stdarray.create1D(n, 0)
# Start at page 0.
page = 0
stddraw.createWindow()
stddraw.setXscale(-1, n)
stddraw.setYscale(0, t)
#stddraw.setPenRadius(.5/float(n))
stddraw.setPenRadius()
for i in range(t):
# Make one random move.
r = random.random()
sum = 0.0;
for j in range(n):
# Find interval containing r.
sum += p[page][j]
if r < sum:
page = j
break
freq[page] += 1
if i % 1000 == 0:
# Plot histogram of frequencies
stddraw.clear();
for k in range(n):
stddraw.line(k, 0, k, freq[k])
stddraw.show()
# Print page ranks.
for i in range(n):
stdio.writef("%8.5f", float(freq[i]) / float(t))
stdio.writeln()
stddraw.wait()
#-----------------------------------------------------------------------
# Example executions:
#
# python transition.py < tiny.txt | python randomsurferhistogram.py 1000000
# python transition.py < medium.txt | python randomsurferhistogram.py 1000000