<?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=Bellman-Algorithmus</id>
	<title>Bellman-Algorithmus - 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=Bellman-Algorithmus"/>
	<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bellman-Algorithmus&amp;action=history"/>
	<updated>2026-05-26T17:43:24Z</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=Bellman-Algorithmus&amp;diff=801264&amp;oldid=prev</id>
		<title>imported&gt;Invisigoth67: typo</title>
		<link rel="alternate" type="text/html" href="https://wiki-de.moshellshocker.dns64.de/index.php?title=Bellman-Algorithmus&amp;diff=801264&amp;oldid=prev"/>
		<updated>2024-10-06T14:40:36Z</updated>

		<summary type="html">&lt;p&gt;typo&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Der &amp;#039;&amp;#039;&amp;#039;Algorithmus von Bellman&amp;#039;&amp;#039;&amp;#039; konstruiert aus einer gegebenen Schlüsselliste und einer korrespondierenden Suchwahrscheinlichkeit einen optimalen [[Binärer Suchbaum|binären Suchbaum]]. Der [[Algorithmus]] basiert auf dem von [[Richard Bellman]] 1957 gefundenen Satz über optimale mittlere Suchdauern in binären Suchbäumen und verwendet die Methode der [[Dynamische Programmierung|Dynamischen Programmierung]].&lt;br /&gt;
&lt;br /&gt;
== Algorithmus ==&lt;br /&gt;
;Eingabe:&lt;br /&gt;
&amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; Suchschlüssel, die in einer Sequenz &amp;lt;math&amp;gt;k_i, 0&amp;lt;i\le n&amp;lt;/math&amp;gt; geordnet sind. Außerdem ist für jeden Schlüssel &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt; die Suchwahrscheinlichkeit &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; gegeben. Für jedes &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt; bezeichnet &amp;lt;math&amp;gt;q_{i-1}&amp;lt;/math&amp;gt; die Wahrscheinlichkeit, dass nach einem nichtvorhandenen Schlüssel &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt;, mit &amp;lt;math&amp;gt;k_{i-1}&amp;lt;x&amp;lt;k_i&amp;lt;/math&amp;gt; für &amp;lt;math&amp;gt;1&amp;lt;i\le n&amp;lt;/math&amp;gt; bzw. &amp;lt;math&amp;gt;x&amp;lt;k_i&amp;lt;/math&amp;gt; für &amp;lt;math&amp;gt;i=1&amp;lt;/math&amp;gt;, gesucht wird.&lt;br /&gt;
&lt;br /&gt;
Da &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt; Wahrscheinlichkeiten sind, muss die Summe aller &amp;lt;math&amp;gt;p_i&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;q_i&amp;lt;/math&amp;gt; 1 ergeben:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\sum_{i=1}^n p_i + \sum_{i=0}^n q_i = 1&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
;Ausgabe:&lt;br /&gt;
Die minimale erwartete Suchdauer in einem optimalen binären Suchbaum zu der Schlüsselmenge &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt; und der optimale Suchbaum, unter dem die minimale erwartete Suchdauer erreicht wird.&lt;br /&gt;
&lt;br /&gt;
Gibt es allerdings geometrisch fallende Wahrscheinlichkeiten, dann kann die Suchdauer zu den zugehörigen sehr seltenen Schlüsseln nicht logarithmisch beschränkt werden.&lt;br /&gt;
&lt;br /&gt;
;Berechnung der Suchdauer:&lt;br /&gt;
Mit der Suchdauer einer Schlüsselsuche bzw. den Suchkosten für eine Schlüsselsuche wird die Anzahl der besuchten Knoten auf einem [[Pfad (Graphentheorie)|Pfad]] von der [[Wurzel (Graphentheorie)|Wurzel]] bis zum Schlüsselknoten in einem binären Suchbaum bezeichnet. Wenn also ein Schlüssel &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt; eine [[Tiefe (Graphentheorie)#Tiefe|Tiefe]] von &amp;lt;math&amp;gt;d(k_i)&amp;lt;/math&amp;gt; im Baum hat, dann sind seine Suchkosten &amp;lt;math&amp;gt;d(k_i)+1&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Um die Suchdauer nach nichtvorhandenen Schlüsseln zu modellieren, erhält jedes Blatt &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt; zwei Kinder-Knoten &amp;lt;math&amp;gt;d_{i-1}&amp;lt;/math&amp;gt; und &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;. Wenn bei der Suche ein &amp;lt;math&amp;gt;d_i&amp;lt;/math&amp;gt;-Blatt erreicht wird, dann ist der Knoten nicht in dem binären Suchbaum enthalten.&lt;br /&gt;
&lt;br /&gt;
Für einen gegebenen Suchbaum &amp;lt;math&amp;gt;T&amp;lt;/math&amp;gt; lässt sich die [[Erwartungswert|erwartete]] Suchdauer berechnen:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;\begin{align}&lt;br /&gt;
E(T) &amp;amp; = &amp;amp; \sum_{i=1}^n (d(k_i)+1) p_i + \sum_{i=0}^n (d(d_i) +1) q_i \\&lt;br /&gt;
     &amp;amp; = &amp;amp; \sum_{i=1}^n d(k_i) p_i + \sum_{i=1}^n p_i + \sum_{i=0}^n d(d_i) q_i + \sum_{i=0}^n q_i \\&lt;br /&gt;
     &amp;amp; = &amp;amp; 1 + \sum_{i=1}^n d(k_i) p_i + \sum_{i=0}^n d(d_i) q_i&lt;br /&gt;
\end{align}&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
; Rekursive Berechnung:&lt;br /&gt;
Der Bellman-Algorithmus berechnet die erwartete Suchdauer unter einem optimalen binären Suchbaum rekursiv auf der Sequenz der Suchschlüssel. Die Spezifikation des Algorithmus erfolgt durch Matrix-Rekurrenzen.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Initialisierung:&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;&lt;br /&gt;
M[i,i-1] = q_{i-1}, 0&amp;lt;i\le n&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;Rekursion:&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;M[i,j] = \begin{Bmatrix}&lt;br /&gt;
\min_{i\le r\le j} M[i, r-1] + M[r+1,j] + w(i,j)&lt;br /&gt;
\end{Bmatrix}, 0\le i\le n, 0&amp;lt;j\le n, i\le j&lt;br /&gt;
&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
In jeder Zelle &amp;lt;math&amp;gt;M[i,j]&amp;lt;/math&amp;gt; steht die minimale Suchdauer unter einem optimalen Suchbaum für die Teilsequenz &amp;lt;math&amp;gt;i,j&amp;lt;/math&amp;gt; der Suchschlüsselsequenz &amp;lt;math&amp;gt;k_i&amp;lt;/math&amp;gt;, wobei &amp;lt;math&amp;gt;w(i,j)&amp;lt;/math&amp;gt; die Summe aller Suchwahrscheinlichkeiten der Schlüssel in dem Baum zur Teilsequenz bezeichnet. Also ist die minimale Suchdauer für die gesamte Sequenz in der Zelle &amp;lt;math&amp;gt;M[1,n]&amp;lt;/math&amp;gt; gespeichert.&lt;br /&gt;
&lt;br /&gt;
In der Rekursion entspricht jede Wahl für &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; der Auswahl von &amp;lt;math&amp;gt;k_r&amp;lt;/math&amp;gt; als Wurzel des Baums der Teilsequenz &amp;lt;math&amp;gt;i,j&amp;lt;/math&amp;gt;. Die Erzeugung der Wurzel erhöht die Tiefe jedes Knoten in diesem Baum um 1. Also muss die erwartete Suchdauer in diesem Baum um &amp;lt;math&amp;gt;w(i,j)&amp;lt;/math&amp;gt; erhöht werden.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w(i,j)&amp;lt;/math&amp;gt; ist definiert als&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;w(i,j) = \sum_{l=i}^j p_l + \sum_{l=i-1}^j q_l&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
und kann effizient mit einer Matrix-Rekurrenz berechnet werden.&lt;br /&gt;
&lt;br /&gt;
;Backtracking:&lt;br /&gt;
Um einen optimalen Suchbaum mit der minimalen erwarteten Suchdauer zu konstruieren, muss die Berechnung des optimalen Wertes in &amp;lt;math&amp;gt;M[1,n]&amp;lt;/math&amp;gt; mittels [[Backtracking]] zurückverfolgt werden. Alternativ kann in einer Implementation des Algorithmus eine zusätzliche Hilfs-Matrix verwendet werden, welche bei der Berechnung von &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; mit den optimalen Werten von &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; für jedes &amp;lt;math&amp;gt;i,j&amp;lt;/math&amp;gt; gefüllt und nach der abgeschlossenen Berechnung von &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; ausgewertet wird.&lt;br /&gt;
&lt;br /&gt;
== Komplexität ==&lt;br /&gt;
&lt;br /&gt;
Die Laufzeit der Berechnung der Matrix für die &amp;lt;math&amp;gt;w(i,j)&amp;lt;/math&amp;gt;-Werte liegt in &amp;lt;math&amp;gt;\mathcal O(n^2)&amp;lt;/math&amp;gt;. Die Matrix &amp;lt;math&amp;gt;M&amp;lt;/math&amp;gt; enthält &amp;lt;math&amp;gt;\mathcal O(n^2)&amp;lt;/math&amp;gt; Einträge und für jeden Eintrag muss über &amp;lt;math&amp;gt;\mathcal O(n)&amp;lt;/math&amp;gt;-Elemente optimiert werden. Also liegt die Laufzeitkomplexität des Algorithmus in &amp;lt;math&amp;gt;\mathcal O(n^3)&amp;lt;/math&amp;gt; und der Speicherbedarf in &amp;lt;math&amp;gt;\mathcal O(n^2)&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Die Iteration über &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; in der Rekursion lässt sich weiter einschränken, so dass die Gesamtlaufzeit aller Iterationen in &amp;lt;math&amp;gt;\mathcal O(n)&amp;lt;/math&amp;gt; liegt. Also liegt dann die Gesamtlaufzeit des so modifizierten Algorithmus in &amp;lt;math&amp;gt;\mathcal O(n^2)&amp;lt;/math&amp;gt;.&amp;lt;ref&amp;gt;{{Literatur |Autor=[[Donald E. Knuth]] |Titel=The Art of Computer Programming 3. Sorting and Searching |Verlag=Addison-Wesley Longman |Ort=Amsterdam |Jahr=1998 |ISBN=0201896850 |Auflage=2. |Seiten=436–442}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Literatur ==&lt;br /&gt;
* {{BibISBN|0262032937|Seite=356–363}}&lt;br /&gt;
* {{Literatur |Autor=[[Donald E. Knuth]] |Titel=The Art of Computer Programming 3. Sorting and Searching |Verlag=Addison-Wesley Longman |Ort=Amsterdam |Jahr=1998 |ISBN=0201896850 |Auflage=2. |Seiten=436–442}}&lt;br /&gt;
&lt;br /&gt;
== Quellen ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Kategorie:Dynamische Programmierung]]&lt;br /&gt;
&lt;br /&gt;
[[en:Binary search tree#Optimal binary search trees]]&lt;/div&gt;</summary>
		<author><name>imported&gt;Invisigoth67</name></author>
	</entry>
</feed>