프로그램 1.6.1 변환 행렬의 계산 (transition.py)
import stdarray import stdio n = stdio.readInt() linkCounts = stdarray.create2D(n, n, 0) outDegrees = stdarray.create1D(n, 0) while not stdio.isEmpty(): # 링크 수 계산 i = stdio.readInt() j = stdio.readInt() outDegrees[i] += 1 linkCounts[i][j] += 1 stdio.writeln(str(n) + ' ' + str(n)) for i in range(n): # i 행에 대한 확률 분포 출력 for j in range(n): # j 열의 확률 출력 p = (0.90 * linkCounts[i][j] / outDegrees[i]) + (0.10 / n) stdio.writef('%8.5f', p) stdio.writeln()
n linkCounts[i][j] outDegrees[i] p |
페이지 수 i 페이지에서 j 페이지로 가는 링크 수 i 페이지에 있는 링크 수 이동 확률 |
이 프로그램 표준 입력에서 링크를 읽고 이에 해당하는 변환 행렬을 표준 출력으로 내보내는 일종의 필터이다. 먼저 각 페이지에서 링크를 읽어 개수를 세고 나서, 90-10 규칙을 적용해 변환 행렬을 계산한다. 이 프로그램에서는 링크가 없는 페이지는 없다고 가정한다([연습문제 1.6.3] 참조).
% more tiny.txt 5 0 1 1 2 1 2 1 3 1 3 1 4 2 3 3 0 4 0 4 2
% python3 transition.py < tiny.txt 5 5 0.02000 0.92000 0.02000 0.02000 0.02000 0.02000 0.02000 0.38000 0.38000 0.20000 0.02000 0.02000 0.02000 0.92000 0.02000 0.92000 0.02000 0.02000 0.02000 0.02000 0.47000 0.02000 0.47000 0.02000 0.02000