Radix Heap

Radix Heap

Ein Radix Heap ist eine Datenstruktur zur Realisation der Operationen einer Vorrangwarteschlange. Hiermit kann dann eine Menge von Elementen, denen jeweils ein Schlüssel zugeordnet ist, verwaltet werden. Die Laufzeit der Operationen ist abhängig von der Differenz des größten und kleinsten Schlüssels bzw. konstant. Die Datenstruktur besteht hauptsächlich aus einer Reihe von Buckets, deren Größe exponentiell zunimmt.

Inhaltsverzeichnis

Voraussetzungen

  1. alle Schlüssel sind aus den natürlichen Zahlen
  2. max. Schlüssel - min. Schlüssel \le C für ein festes C
  3. Monotonie von ExtractMin, d.h. die von aufeinander folgenden ExtractMin-Aufrufen zurückgegebenen Werte sind monoton steigend

Beschreibung der Datenstruktur

Die drei wichtigsten Felder sind:

  1. b der Größe B := \lfloor log(C+1)\rfloor + 1, mit 0 als niedrigstem Index; speichert die Buckets
  2. u der Größe B + 1, mit 0 als niedrigstem Index; speichert die (unteren) Schranken der Buckets
  3. bNum, hält für jedes Element x im Heap den Bucket in dem es gespeichert ist

RadixHeap1.png

In der obigen Skizze ist die Datenstruktur noch einmal skizziert. Zu beachten ist nun, dass stets die folgenden Invarianten gelten müssen:

  1. u[i] \le Schlüssel in b[i] < u[i + 1]: die Schlüssel in b[i] sind nach oben bzw. unten durch die Werte in u[i + 1] bzw. u[i] beschränkt.
  2. u[0] = 0, u[1] = u[0] + 1, u[B] = \infty und 0 \le u[i+1]-u[i] \le 2^{i-1} für i = 1, \ldots, B-1: die Größen der Buckets nehmen exponentiell zu.

Zu beachten ist das exponentielle Wachstum der Schranken (und damit des Bereiches, den ein Bucket fasst). Hierdurch kommt die logarithmische Abhängigkeit der Feldgrößen zum Wert C, der maximalen Differenz zweier Schlüsselwerte.

Operationen

Während der Initialisierung werden leere Buckets erzeugt und die unteren Schranken u berechnet (gemäß der Invariante 2); Laufzeit O(B).

Beim Insert eines neuen Elements x wird linear von rechts nach links durch die Buckets gegangen und das neue Element mit k(x) wird in den linkesten Bucket gespeichert, so dass gilt: u[i] \ge k(x). Laufzeit O(B).

Bei DecreaseKey wird nun das Feld bNum benötigt. Von dem nun bekannten Bucket aus wird analog zur Operation Insert nun nach der Dekrementierung des Schlüsselwertes nach links iteriert (es muss zusätzlich auf Einhaltung der Invarianten geprüft werden); Laufzeit O(1) (amortisiert).

ExtractMin gibt ein Element aus dem Bucket b[0] zurück und entfernt es. Ist der Bucket b[0] noch nicht leer, so ist die Operation beendet. Ist er jedoch nun leer, so wird der nächstgrößere nichtleere Bucket gesucht, dessen kleinstes Element k ausfindig gemacht und u[0] auf k gesetzt (hierfür wird die Monotonie benötigt). Dann werden gemäß der Invarianten die Bucketgrenzen neu bestimmt und die Elemente aus b[i] auf die neu entstandenen Buckets aufgeteilt; Laufzeit O(1) (amortisiert).

Wenn jeweils angezeigt, dann muss zusätzlich das Feld bNum aktualisiert werden.

Literatur

  • B.V. Cherkassky, A.V. Goldberg, C. Silverstein: Buckets, Heaps, Lists and Monotone Priority Queues

Wikimedia Foundation.

Игры ⚽ Нужен реферат?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Heap (Datenstruktur) — In der Informatik ist ein Heap (wörtlich Haufen oder Halde) eine zumeist auf Bäumen basierende abstrakte Datenstruktur. In einem Heap können Objekte oder Elemente abgelegt und aus diesem wieder entnommen werden. Sie dienen damit der Speicherung… …   Deutsch Wikipedia

  • Radix tree — In computer science, a radix tree (also patricia trie or radix trie) is a space optimized trie data structure where each node with only one child is merged with its child. The result is that every internal node has at least two children. Unlike… …   Wikipedia

  • Heap (data structure) — This article is about the programming data structure. For the dynamic memory area, see Dynamic memory allocation. Example of a complete binary max heap In computer science, a heap is a specialized tree based data structure that satisfies the heap …   Wikipedia

  • Max-Heap — In der Informatik ist ein Heap (wörtlich Haufen oder Halde) eine zumeist auf Bäumen basierende abstrakte Datenstruktur. In einem Heap können Objekte oder Elemente abgelegt und aus diesem wieder entnommen werden. Sie dienen damit der Speicherung… …   Deutsch Wikipedia

  • Min-Heap — In der Informatik ist ein Heap (wörtlich Haufen oder Halde) eine zumeist auf Bäumen basierende abstrakte Datenstruktur. In einem Heap können Objekte oder Elemente abgelegt und aus diesem wieder entnommen werden. Sie dienen damit der Speicherung… …   Deutsch Wikipedia

  • Deap — In der Informatik ist ein Heap (wörtlich Haufen oder Halde) eine zumeist auf Bäumen basierende abstrakte Datenstruktur. In einem Heap können Objekte oder Elemente abgelegt und aus diesem wieder entnommen werden. Sie dienen damit der Speicherung… …   Deutsch Wikipedia

  • Doppelheap — In der Informatik ist ein Heap (wörtlich Haufen oder Halde) eine zumeist auf Bäumen basierende abstrakte Datenstruktur. In einem Heap können Objekte oder Elemente abgelegt und aus diesem wieder entnommen werden. Sie dienen damit der Speicherung… …   Deutsch Wikipedia

  • Priority Queue — 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… …   Deutsch Wikipedia

  • Prioritätswarteschlange — 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… …   Deutsch Wikipedia

  • Prioritätswarteschlangen — 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… …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”