각각의 무작위 이동 이 계산의 핵심은 변환 행렬에 정의된 무작위 이동이다. page
변수는 서퍼의 현재 위치를 담고 있다. p[page][j]
요소는 서퍼가 페이지 page
에서 페이지 j
로 이동할 확률이다. 즉, 우리가 할 일은 서퍼가 page
에 있을 때 변환 행렬의 page
행에 정의된 분산에 따라 0
과 n-1
사이의 난수를 생성하는 것이다(p[page]
는 n-1
개의 요소를 가진 배열이다). 어떻게 하면 이 난수를 생성할 수 있을까? random.random()
함수를 사용하면 0
과 1
사이의 실수형 난수를 생성할 수 있지만, 이것을 이용해 어떻게 무작위로 다른 페이지로 이동할 수 있을까? 한 가지 가능한 방법은 (0, 1)
사이를 n
개의 구간으로 나누고, 변환 행렬의 page
행에 있는 확률에 맞게 구간 길이를 설정하는 것이다. 그러면 난수 변수인 r
은 확률만큼의 길이를 가진 각 구간 중 하나에 들어가게 된다. 이 방법을 코드로 표현하면 다음과 같다.
total = 0.0 for j in range(0, n) total += p[page][j] if r < total: page = j break