MINT lernen

Algorithmen mit Schlangen

Drei Programme, ein Prozessor: Wie teilt das Betriebssystem die Rechenzeit gerecht auf? Mit einer Schlange.

1

Eine Schlange durchlaufen

Auch eine Schlange hat keinen Index. Man kommt nur vorn an die Elemente — und kann sie hinten wieder anstellen.

  • Rotieren:x = q.dequeue() und danach q.enqueue(x) — das vorderste Element wandert nach hinten.
  • Ganze Runde:nach n Rotationen steht jedes Element wieder an seinem alten Platz.
  • Anzahl:Man kennt n nicht von vornherein — umladen in eine Hilfsschlange und dabei zählen.
  • Filtern:n-mal entnehmen und nur die Elemente wieder anstellen, die bleiben sollen; die Reihenfolge bleibt erhalten.
public void entferneNegative(Queue<Integer> q) {
    int n = anzahl(q);               // Hilfsmethode wie beim Stapel
    for (int i = 0; i < n; i++) {
        int x = q.dequeue();
        if (x >= 0) {
            q.enqueue(x);            // behalten: hinten wieder anstellen
        }
    }
}
2

Rechenzeit im Rundlauf verteilen

Ein Prozessor kann immer nur ein Programm gleichzeitig ausführen. Damit trotzdem alle vorankommen, wechselt das Betriebssystem reihum — das Rundlauf-Verfahren (Round Robin).

  • Warteschlange:alle rechenbereiten Programme stehen in einer Schlange.
  • Zeitscheibe q:das vorderste Programm darf höchstens q Takte rechnen.
  • Nicht fertig:es wird mit seiner Restzeit hinten wieder angestellt.
  • Fertig:es verlässt die Schlange; seine Fertigstellungszeit wird notiert.

Verändere die Zeitscheibe q und die Rechenzeit von Programm A. Mit ▶ läuft die Zeit Takt für Takt — oben siehst du die Schlange, darunter den Zeitstrahl.

Rundlauf-Planer

Halte fest: Eine kleine Zeitscheibe verteilt die Rechenzeit gerecht, erzeugt aber viele Wechsel. Eine sehr große Zeitscheibe macht aus dem Rundlauf eine einfache Warteschlange ohne Wechsel.

Merke

Rundlauf: x = q.dequeue() → x bis zu q Takte rechnen lassen → nicht fertig: q.enqueue(x)

3

Allgemeine Hinweise

Schleife über n, nicht über isEmpty

Wer beim Rotieren while (!q.isEmpty()) schreibt und wieder anstellt, erzeugt eine Endlosschleife — die Schlange wird nie leer.

Anzahl vorher bestimmen

Beim Filtern ändert sich die Länge. Die Zahl der Durchläufe muss vor der Schleife feststehen.

Tabelle führen

Für Rundlauf-Aufgaben eine Zeile je Zeitscheibe: Zeit, Programm, Restzeit, Schlange danach. So bleibt die Reihenfolge nachvollziehbar.

Videos