Technopedia Center
PMB University Brochure
Faculty of Engineering and Computer Science
S1 Informatics S1 Information Systems S1 Information Technology S1 Computer Engineering S1 Electrical Engineering S1 Civil Engineering

faculty of Economics and Business
S1 Management S1 Accountancy

Faculty of Letters and Educational Sciences
S1 English literature S1 English language education S1 Mathematics education S1 Sports Education
teknopedia

teknopedia

teknopedia

teknopedia

teknopedia
  • Registerasi
  • Brosur UTI
  • Kip Scholarship Information
  • Performance
  1. Weltenzyklopädie
  2. Radix Heap – Wikipedia
Radix Heap – Wikipedia
aus Wikipedia, der freien Enzyklopädie

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 (von engl. bucket „Eimer“), deren Größe exponentiell zunimmt.

Voraussetzungen

[Bearbeiten | Quelltext bearbeiten]
  1. alle Schlüssel sind aus den natürlichen Zahlen
  2. max. Schlüssel – min. Schlüssel ≤ {\displaystyle \leq } {\displaystyle \leq } 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

[Bearbeiten | Quelltext bearbeiten]

Die drei wichtigsten Felder sind:

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

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 ] ≤ {\displaystyle u[i]\leq } {\displaystyle u[i]\leq } Schlüssel in b [ i ] < u [ i + 1 ] {\displaystyle b[i]<u[i+1]} {\displaystyle b[i]<u[i+1]}: die Schlüssel in b [ i ] {\displaystyle b[i]} {\displaystyle b[i]} sind nach oben bzw. unten durch die Werte in u [ i + 1 ] {\displaystyle u[i+1]} {\displaystyle u[i+1]} bzw. u [ i ] {\displaystyle u[i]} {\displaystyle u[i]} beschränkt.
  2. u [ 0 ] = 0 , u [ 1 ] = u [ 0 ] + 1 , u [ B ] = ∞ {\displaystyle u[0]=0,u[1]=u[0]+1,u[B]=\infty } {\displaystyle u[0]=0,u[1]=u[0]+1,u[B]=\infty } und 0 ≤ u [ i + 1 ] − u [ i ] ≤ 2 i − 1 {\displaystyle 0\leq u[i+1]-u[i]\leq 2^{i-1}} {\displaystyle 0\leq u[i+1]-u[i]\leq 2^{i-1}} für i = 1 , … , B − 1 {\displaystyle i=1,\ldots ,B-1} {\displaystyle 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 {\displaystyle C} {\displaystyle C}, der maximalen Differenz zweier Schlüsselwerte.

Operationen

[Bearbeiten | Quelltext bearbeiten]

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

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

Bei decreaseKey wird nun das Feld b N u m {\displaystyle bNum} {\displaystyle 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 ) {\displaystyle O(1)} {\displaystyle O(1)} (amortisiert).

Die Operation extractMin gibt ein Element aus dem Bucket b [ 0 ] {\displaystyle b[0]} {\displaystyle b[0]} zurück und entfernt es. Ist der Bucket b [ 0 ] {\displaystyle b[0]} {\displaystyle b[0]} noch nicht leer, so ist die Operation beendet. Ist er jedoch nun leer, so wird der nächstgrößere nicht leere Bucket gesucht, dessen kleinstes Element k {\displaystyle k} {\displaystyle k} ausfindig gemacht und u [ 0 ] {\displaystyle u[0]} {\displaystyle 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 ] {\displaystyle b[i]} {\displaystyle b[i]} auf die neu entstandenen Buckets aufgeteilt; Laufzeit O ( 1 ) {\displaystyle O(1)} {\displaystyle O(1)} (amortisiert).

Wenn jeweils angezeigt, dann muss zusätzlich das Feld b N u m {\displaystyle bNum} {\displaystyle bNum} aktualisiert werden.

Literatur

[Bearbeiten | Quelltext bearbeiten]
  • B.V. Cherkassky, A.V. Goldberg, C. Silverstein: Buckets, Heaps, Lists and Monotone Priority Queues (Abstract), in: Proceedings of the Eight Annual ACM-SIAM Symposium on Discrete Algorithms. Januar 1997, S. 83–92.
Abgerufen von „https://de.teknopedia.teknokrat.ac.id/w/index.php?title=Radix_Heap&oldid=244817105“
Kategorie:
  • Datenstruktur

  • indonesia
  • Polski
  • العربية
  • Deutsch
  • English
  • Español
  • Français
  • Italiano
  • مصرى
  • Nederlands
  • 日本語
  • Português
  • Sinugboanong Binisaya
  • Svenska
  • Українська
  • Tiếng Việt
  • Winaray
  • 中文
  • Русский
Sunting pranala
Pusat Layanan

UNIVERSITAS TEKNOKRAT INDONESIA | ASEAN's Best Private University
Jl. ZA. Pagar Alam No.9 -11, Labuhan Ratu, Kec. Kedaton, Kota Bandar Lampung, Lampung 35132
Phone: (0721) 702022
Email: pmb@teknokrat.ac.id