더북(TheBook)

프로그램 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
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.