<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Radix_Heap</id>
	<title>Radix Heap - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://wiki-de.moshellshocker.dns64.de/index.php?action=history&amp;feed=atom&amp;title=Radix_Heap"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Radix_Heap&amp;action=history"/>
	<updated>2026-06-01T20:28:39Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Wikipedia (Deutsch) – Lokale Kopie</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://wiki-de.moshellshocker.dns64.de/index.php?title=Radix_Heap&amp;diff=1318844&amp;oldid=prev</id>
		<title>imported&gt;Thomas Dresler: Kommasetzung</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Radix_Heap&amp;diff=1318844&amp;oldid=prev"/>
		<updated>2024-05-09T16:20:44Z</updated>

		<summary type="html">&lt;p&gt;Kommasetzung&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Ein &amp;#039;&amp;#039;&amp;#039;Radix Heap&amp;#039;&amp;#039;&amp;#039; 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.&lt;br /&gt;
Die Datenstruktur besteht hauptsächlich aus einer Reihe von Buckets (von engl. &amp;#039;&amp;#039;bucket&amp;#039;&amp;#039; „[[Eimer]]“), deren Größe [[exponentiell]] zunimmt.&lt;br /&gt;
&lt;br /&gt;
== Voraussetzungen ==&lt;br /&gt;
# alle Schlüssel sind aus den [[Natürliche Zahl|natürlichen Zahlen]]&lt;br /&gt;
# max. Schlüssel – min. Schlüssel &amp;lt;math&amp;gt;\le&amp;lt;/math&amp;gt; C für ein festes C&lt;br /&gt;
# Monotonie von [[Vorrangwarteschlange#Operationen|&amp;#039;&amp;#039;extractMin&amp;#039;&amp;#039;]], d.&amp;amp;nbsp;h. die von aufeinander folgenden &amp;#039;&amp;#039;extractMin&amp;#039;&amp;#039;-Aufrufen zurückgegebenen Werte sind [[Monoton steigende Funktion|monoton steigend]].&lt;br /&gt;
&lt;br /&gt;
== Beschreibung der Datenstruktur ==&lt;br /&gt;
Die drei wichtigsten [[Feld (Datentyp)|Felder]] sind:&lt;br /&gt;
# &amp;lt;math&amp;gt;b&amp;lt;/math&amp;gt; der Größe &amp;lt;math&amp;gt;B := \lfloor \log(C+1)\rfloor + 1&amp;lt;/math&amp;gt;, mit 0 als niedrigstem Index; speichert die Buckets&lt;br /&gt;
# &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; der Größe &amp;lt;math&amp;gt;B+1&amp;lt;/math&amp;gt;, mit 0 als niedrigstem Index; speichert die (unteren) Schranken der Buckets&lt;br /&gt;
# &amp;lt;math&amp;gt;bNum&amp;lt;/math&amp;gt;, hält für jedes Element &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; im Heap den Bucket, in dem es gespeichert ist&lt;br /&gt;
&lt;br /&gt;
[[Bild:RadixHeap1.png]]&lt;br /&gt;
&lt;br /&gt;
In der obigen Skizze ist die Datenstruktur noch einmal skizziert. Zu beachten ist nun, dass stets die folgenden [[Invariante (Informatik)|Invarianten]] gelten müssen:&lt;br /&gt;
# &amp;lt;math&amp;gt;u[i] \le&amp;lt;/math&amp;gt; Schlüssel in &amp;lt;math&amp;gt;b[i] &amp;lt; u[i+1]&amp;lt;/math&amp;gt;: die Schlüssel in &amp;lt;math&amp;gt;b[i]&amp;lt;/math&amp;gt; sind nach oben bzw. unten durch die Werte in &amp;lt;math&amp;gt;u[i+1]&amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt;u[i]&amp;lt;/math&amp;gt; beschränkt.&lt;br /&gt;
# &amp;lt;math&amp;gt;u[0] = 0, u[1] = u[0] + 1, u[B] = \infty&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;0 \le u[i+1]-u[i] \le 2^{i-1}&amp;lt;/math&amp;gt; für &amp;lt;math&amp;gt;i = 1, \ldots, B-1&amp;lt;/math&amp;gt;: die Größen der Buckets nehmen exponentiell zu.&lt;br /&gt;
&lt;br /&gt;
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 &amp;lt;math&amp;gt;C&amp;lt;/math&amp;gt;, der maximalen Differenz zweier Schlüsselwerte.&lt;br /&gt;
&lt;br /&gt;
== Operationen ==&lt;br /&gt;
Während der &amp;#039;&amp;#039;Initialisierung&amp;#039;&amp;#039; werden leere Buckets erzeugt und die unteren Schranken &amp;lt;math&amp;gt;u&amp;lt;/math&amp;gt; berechnet (gemäß der Invariante 2); Laufzeit &amp;lt;math&amp;gt;O(B)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Beim &amp;#039;&amp;#039;insert&amp;#039;&amp;#039; eines neuen Elements &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; wird linear von rechts nach links durch die Buckets gegangen und das neue Element mit &amp;lt;math&amp;gt;k(x)&amp;lt;/math&amp;gt; wird in den linkesten Bucket gespeichert, so dass gilt: &amp;lt;math&amp;gt;u[i] \ge k(x)&amp;lt;/math&amp;gt;. Laufzeit &amp;lt;math&amp;gt;O(B)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Bei &amp;#039;&amp;#039;decreaseKey&amp;#039;&amp;#039; wird nun das Feld &amp;lt;math&amp;gt;bNum&amp;lt;/math&amp;gt; benötigt. Von dem nun bekannten Bucket aus wird analog zur Operation &amp;#039;&amp;#039;insert&amp;#039;&amp;#039; nun nach der [[Inkrement und Dekrement|Dekrementierung]] des Schlüsselwertes nach links iteriert (es muss zusätzlich auf Einhaltung der Invarianten geprüft werden); Laufzeit &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt; (amortisiert).&lt;br /&gt;
&lt;br /&gt;
Die Operation &amp;#039;&amp;#039;extractMin&amp;#039;&amp;#039; gibt ein Element aus dem Bucket &amp;lt;math&amp;gt;b[0]&amp;lt;/math&amp;gt; zurück und entfernt es. Ist der Bucket &amp;lt;math&amp;gt;b[0]&amp;lt;/math&amp;gt; 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 &amp;lt;math&amp;gt;k&amp;lt;/math&amp;gt; ausfindig gemacht und &amp;lt;math&amp;gt;u[0]&amp;lt;/math&amp;gt; auf k gesetzt (hierfür wird die Monotonie benötigt). Dann werden gemäß der Invarianten die Bucketgrenzen neu bestimmt und die Elemente aus &amp;lt;math&amp;gt;b[i]&amp;lt;/math&amp;gt; auf die neu entstandenen Buckets aufgeteilt; Laufzeit &amp;lt;math&amp;gt;O(1)&amp;lt;/math&amp;gt; (amortisiert).&lt;br /&gt;
&lt;br /&gt;
Wenn jeweils angezeigt, dann muss zusätzlich das Feld &amp;lt;math&amp;gt;bNum&amp;lt;/math&amp;gt; aktualisiert werden.&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* B.V. Cherkassky, A.V. Goldberg, C. Silverstein: [http://xenon.stanford.edu/~csilvers/papers/hotq-soda.ps &amp;#039;&amp;#039;Buckets, Heaps, Lists and Monotone Priority Queues&amp;#039;&amp;#039;] ([http://xenon.stanford.edu/~csilvers/papers/hotq-soda-abstract.txt Abstract]), in: Proceedings of the Eight Annual ACM-SIAM Symposium on Discrete Algorithms. Januar 1997, S. 83–92.&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Datenstruktur]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Thomas Dresler</name></author>
	</entry>
</feed>