Vorrangwarteschlange
aus Wikipedia, der freien Enzyklopädie
In der Informatik ist eine Vorrangwarteschlange (auch Prioritätswarteschlange oder engl. Priority Queue genannt) eine spezielle abstrakte Datenstruktur, genauer eine erweiterte Form einer Warteschlange. Den Elementen, die in die Warteschlange gelegt werden, wird ein Schlüssel mitgegeben, der die Reihenfolge der Abarbeitung der Elemente bestimmt.
Inhaltsverzeichnis |
[Bearbeiten] Operationen
Vorrangwarteschlangen müssen die Operationen
- insert, zum Einfügen eines Elementes und
- extractMin, zur Rückgabe und zum Entfernen des Elements mit dem kleinsten Schlüssel (= höchster Priorität)
unterstützen.
Daneben gibt es noch Operationen, die vor allem für Online-Algorithmen wichtig sind:
- remove entfernen eines Elements
- decreaseKey den Schlüsselwert verringern (=die Priorität erhöhen)
[Bearbeiten] Implementierung
Die Implementierung von Vorrangwarteschlangen kann über AVL-Bäume erfolgen. Sowohl insert als auch extractMin können dann in O(log n) Zeit ausgeführt werden. Eine andere Möglichkeit besteht in der Verwendung partiell geordneter Bäume (Heaps). Auch hier liegt die Zeitkomplexität bei O(log n).
Beispiele für Datenstrukturen, die Vorrangwarteschlangen effizient implementieren sind
- AVL-Baum
- Binärer Heap
- Binomial-Heap
- Fibonacci-Heap (armotisierte Laufzeit für remove und decreaseKey O(log n), ansonsten O(1), Worst Case O(n) bzw. O(log n))
- k-Level Buckets
- Radix Heap
- Van-Emde-Boas Vorrangwarteschlange
[Bearbeiten] Anwendungen
Prioritätswarteschlangen können für die Implementierung diskreter Ereignissimulationen genutzt werden. Dabei werden zu den jeweiligen Ereignissen als Schlüssel die Zeiten berechnet, das Ereignis-Zeit-Paar in die Vorrangwarteschlange eingefügt und die Vorrangwarteschlange gibt dann das jeweils aktuelle (d.h. als nächstes zu verarbeitende) Ereignis aus.
[Bearbeiten] Erweiterungen
Neben der klassischen, einendigen Vorrangwarteschlange existieren auch zweiendige. Diese unterstützen zusätzlich eine Operationen extractMax, um das Element mit dem größten Schlüssel herauszuziehen. Eine Möglichkeit für die Implementierung solcher Datenstrukturen bieten Doppelheaps. Alternativ können auch Datenstrukturen wie Min-Max-Heaps genutzt werden, die direkt zweiendige Prioritätswarteschlangen unterstützen.