for _ in range(max_iterations): new_ranks = np.zeros(n) for page, out_links in links.items(): if out_links: share = ranks[page_index[page]] / len(out_links) for linked_page in out_links: new_ranks[page_index[linked_page]] += share else: # If a page has no out-links, it is a "dangling node" # We distribute its rank evenly across all pages new_ranks += ranks[page_index[page]] / n