Ga naar hoofdinhoud

13.6 Bouwsteen 4 — itereren tot het stabiel is

Leerdoel: je herhaalt de update voor álle pagina's tot de ranks nauwelijks meer veranderen — dán heb je de PageRank.

Het kip-ei-probleem oplossen

Je kunt de rank van een pagina pas goed berekenen als je de ranks van de anderen kent. De truc: begin met de startverdeling, reken één volledige ronde uit (alle pagina's, op basis van de waarden uit de vorige ronde), en herhaal. Na elke ronde veranderen de waarden minder; je stopt als de grootste verandering kleiner is dan een kleine epsilon.

Let op: bereken een ronde altijd uit de ranks van de vorige ronde, niet uit ranks die je deze ronde al hebt aangepast.

Bouw en test

Python
Code-omgeving wordt voorbereid…
Antwoord
def pagerank(web, d=0.85, epsilon=1e-9):
rank = startverdeling(web)
while True:
nieuw = {p: nieuwe_rank(web, rank, p, d) for p in web}
verschil = max(abs(nieuw[p] - rank[p]) for p in web)
rank = nieuw
if verschil < epsilon:
return rank

De dict-comprehension berekent álle nieuwe ranks uit de oude rank voordat je rank overschrijft — precies wat je nodig hebt.

Door naar stap 7: compleet →.