Logo des digitalen Schulbuchs inf-schule.de. Schriftzug in Zustandsübergangsdiagramm eines endlichen Automaten.

Ein Ranking-Algorithmus

Bestimmung von Rankingwerten

Die Relevanz von Webseiten lässt sich mit dem folgenden Simulationsverfahren bestimmen, bei dem das Surfverhalten einer vorgegebenen Anzahl von Webseitenbesuchern nach einfachen Regeln durchgespielt wird.

ALGORITHMUS PageRank:
Lege die Anzahl der Simulationsschritte fest.
Lege den Surf- und Sprunganteil fest.
Lege die Ausgangsbesucherzahlen fest.
Setze einen Zähler auf 0.
SOLANGE der Zähler kleiner als die Anzahl der Simulationsschritte ist:
    Berechne die neuen Besucherzahlen.
    Erhöhe den Zähler um 1.
Gib die Besucherzahlen (als gesuchte Rankingwerte) aus.

Zur Konkretisierung betrachten wie die folgende sehr einfache Webseitenwelt:

Graph - Webseiten

Das oben informell beschriebene Verfahren lässt sich jetzt wie folgt präzisieren:

Algorithmus

Wenn man dieses Verfahren in ein Python-Programm übersetzt, dann kann es von einem Computer automatisiert ausgeführt werden.

# Anzahl der Simulationsschritte
anzahlSchritte = 1000
# Surf- und Sprunganteile
p = 0.8
q = 1-p
# Besucherzahlen zu Beginn
n = 1000
a = n/6
b = n/6
c = n/6
d = n/6
e = n/6
f = n/6
# Initialisierung des Zaehlers
zaehler = 0
# wiederholte Berechnung der Besucherzahlen
while zaehler < anzahlSchritte:
    # Bestimmung der neuen Besucherzahlen 
    a_neu = (p*c)/3 +                         \
            (q*(a+b+c+d+e+f))/6 +             \
            (p*f)/6                                      
    b_neu = (p*a)/2 + (p*e) +                 \
            (q*(a+b+c+d+e+f))/6 +             \
            (p*f)/6                                      
    c_neu = (p*a)/2 + (p*b)/2 + (p*d) +       \
            (q*(a+b+c+d+e+f))/6 +             \
            (p*f)/6                                      
    d_neu = (p*c)/3 + (p*b)/2 +               \
            (q*(a+b+c+d+e+f))/6 +             \
            (p*f)/6                                      
    e_neu = 0 +                               \
            (q*(a+b+c+d+e+f))/6 +             \
            (p*f)/6                                      
    f_neu = (p*c)/3 +                         \
            (q*(a+b+c+d+e+f))/6 +             \
            (p*f)/6                                      
    # Übernahme der neu berechneten Besucherzahlen
    a = a_neu
    b = b_neu
    c = c_neu
    d = d_neu
    e = e_neu
    f = f_neu
    # Aktualisierung des Zaehlers
    zaehler = zaehler+1
# Ausgabe der Besucherzahlen
print(a)
print(b)
print(c)
print(d)
print(e)
print(f)

Aufgabe 1

(a) Teste das Programm mit verschiedenen Anzahlen von Simulationsschritten. Was fällt auf, wenn man die Anzahl vergrößert?

(b) Für die oben beschriebene Webseitenwelt erhält man nach mehreren Simulationsschritten folgende Rankingwerte (in alphabetischer Reihenfolge):

>>> 
138.428427512
148.594193607
324.892389413
197.866104955
51.7904570016
138.428427512

Welche Schlüsse kann man jetzt über die Bedeutung der Webseiten ziehen?

(c) Bei einer Suche nach einem Stichwort wird man auf den Webseiten A, B und F fündig. In welcher Reihenfolge werden die Webseiten von einer Suchmaschine angezeigt, die den oben gezeigten Ranking-Algorithmus benutzt.

(d) Wovon hängt ein hoher Rankingwert ab? Begründe deine Aussage.

Aufgabe 2

Die Suchmaschine Google benutzt - in einer Grundversion - das folgende Simulationsprogramm. Vergleiche die hier benutzte Modellierung des Surfverhaltens mit der bisher benutzten Modellierung.

# Anzahl der Simulationsschritte
anzahlSchritte = 100
# Surf- und Sprunganteile
p = 0.8
q = 1-p
# Besucherzahlen zu Beginn
n = 1000
a = n/6
b = n/6
c = n/6
d = n/6
e = n/6
f = n/6
# Initialisierung des Zaehlers
zaehler = 0
# wiederholte Berechnung der Besucherzahlen
while zaehler < anzahlSchritte:
    # Bestimmung der neuen Besucherzahlen
    a_neu = (p*c)/3 +                (q*n)/6
    b_neu = (p*a)/2 + p*e +          (q*n)/6
    c_neu = (p*a)/2 + (p*b)/2+ p*d + (q*n)/6
    d_neu = (p*c)/3 + (p*b)/2 +      (q*n)/6
    e_neu = (p*0) +                  (q*n)/6
    f_neu = (p*c)/3 +                (q*n)/6
    # Übernahme der neu berechneten Besucherzahlen
    a = a_neu
    b = b_neu
    c = c_neu
    d = d_neu
    e = e_neu
    f = f_neu
    # Aktualisierung des Zaehlers
    zaehler = zaehler+1
# Ausgabe der Besucherzahlen
n_neu = a+b+c+d+e+f
print(n_neu)
print(a/n_neu)
print(b/n_neu)
print(c/n_neu)
print(d/n_neu)
print(e/n_neu)
print(f/n_neu)
X

Fehler melden

X

Suche