프로그램 1.6.3 마르코프 연쇄의 혼합 (markov.py)
import sys import stdarray import stdio moves = int(sys.argv[1]) n = stdio.readInt() stdio.readInt() p = stdarray.create2D(n, n, 0.0) for i in range(n): for j in range(n): p[i][j] = stdio.readFloat() ranks = stdarray.create1D(n, 0.0) ranks[0] = 1.0 for i in range(moves): newRanks = stdarray.create1D(n, 0.0) for j in range(n): for k in range(n): newRanks[j] += ranks[k] * p[k][j] ranks = newRanks for i in range(n): stdio.writef('%8.5f', ranks[i]) stdio.writeln()
moves n p[][] ranks[] newRanks[] |
반복 수 페이지 수 변환 행렬 페이지 랭크 새로 계산한 페이지 랭크 |
이 프로그램은 명령 줄 인수로 정수 moves를 받고 표준 입력에서 변환 행렬을 입력받는다. 랜덤 서퍼가 moves만큼 이동한 후 각 페이지에 도달할 확률(페이지 랭크)을 계산하기 위해 행렬-벡터 곱셈을 moves만큼 수행하고 표준 출력 장치에 출력한다.
% python3 transition.py < tiny.txt | python3 markov.py 20 0.27245 0.26515 0.14669 0.24764 0.06806 % python3 transition.py < tiny.txt | python3 markov.py 40 0.27303 0.26573 0.14618 0.24723 0.06783