Bisektion

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von Intervallhalbierungsverfahren)
Wechseln zu: Navigation, Suche

Die Bisektion, fortgesetzte Bisektion oder auch Intervallhalbierungsverfahren genannt, ist ein Verfahren der Mathematik und der Informatik. Durch sie wird eine konvergente Folge von Intervallschachtelungen erzeugt. Das Wort setzt sich zusammen aus lat. bi „zwei“ und sectio „Schnitt“. Es steht also für Zwei-Teilung.

Grundsätzlich finden Bisektionsverfahren immer dann Anwendung, wenn ein Problem gelöst werden kann, indem es in zwei etwa gleich große Teilprobleme zerlegt wird, die dann einzeln für sich behandelt werden können.

Beispiel[Bearbeiten]

Ein einfaches Beispiel stellt folgende Aufgabe dar: Gesucht ist eine Zahl zwischen 1 und 1000. Die soll ein Spieler erraten, er erhält als Hinweis immer nur „größer“ oder „kleiner“ oder „Treffer“. Angenommen die Zahl sei 512. Verwendet der Spieler zum Raten das Bisektionsverfahren der binären Suche, ergibt sich folgender Dialog:

  1. 500 – größer
  2. 750 – kleiner
  3. 625 – kleiner
  4. 562 – kleiner
  5. 531 – kleiner
  6. 515 – kleiner
  7. 507 – größer
  8. 511 – größer
  9. 513 – kleiner
  10. 512 – Treffer

Hätte der Spieler stattdessen linear gesucht und bei 1 begonnen, so hätte der Dialog folgenden Verlauf genommen:

1. 1 – größer
2. 2 – größer
...
511. 511 – größer
512. 512 – Treffer

Statt zehn Fragen hätte er also 512 Fragen gebraucht, die Bisektion ist hier also deutlich effizienter.

Laufzeit und Konvergenz[Bearbeiten]

Diskreter Fall[Bearbeiten]

Im diskreten Fall, also wenn das zugrundeliegende Problem nur eine endliche Anzahl von zu testenden Lösungen besitzt, kann ein solches Problem immer als eine Suche aufgefasst werden: Aus einer endlichen Menge M soll ein Element x mit der Eigenschaft p(x)=0 gefunden werden. p soll hierbei eine Funktion

p: M \to \mathbb{R}

sein, wobei p(y)=0 genau dann gelten soll, wenn die gesuchte Eigenschaft erfüllt ist, also y=x. Um dieses Problem mittels Bisektion zu lösen, soll weiterhin gelten:

  • p(y)<0 falls y<x
  • p(y)>0 falls y>x

Die Funktion p gibt also nicht nur den Treffer an (bei p(x)=0), sondern weist im anderen Fall auch die Richtung, in der weitergesucht werden muss. Dabei wird natürlich stillschweigend vorausgesetzt, dass M durch eine Relation < geordnet wird.

M wird in zwei möglichst gleich große Hälften geteilt, indem zunächst p für ein Element möglichst nah der Mitte von M ausgewertet wird. Der Fall, dass sich M aufgrund einer ungeraden Anzahl von Elementen lediglich in zwei nur ungefähr gleich große Teile teilen lässt, kann unterschlagen werden, er wirkt sich bei großen Elementzahlen so gut wie nicht aus. Nach jedem Schritt kann also eine Hälfte der zuletzt untersuchten Menge verworfen werden, die Menge halbiert sich mit jeder Auswertung von p. Das Verfahren endet spätestens, wenn die Menge nur noch ein Element enthält, dieses muss das Gesuchte sein, sofern es überhaupt in der Ausgangsmenge enthalten war. Um also eine Menge der Größe m durch fortgesetztes Halbieren auf 1 zu reduzieren, sind n Schritte notwendig, mit:

m < 2^n \Rightarrow \log_2 m < n

Das Verfahren hat also eine Laufzeit von O(log(m)).

Kontinuierlicher Fall[Bearbeiten]

Ablauf der Bisektion (Animation)

Im kontinuierlichen Fall ist als Lösung meist ein Intervall gesucht, dieses ist Teilintervall eines anderen endlichen Intervalls. Die Anzahl der möglichen Lösungen ist unendlich, da jedes Teilintervall (meist einer bestimmten Länge) infrage kommt. Ein Beispiel soll dies verdeutlichen:

Gesucht ist die Nullstelle einer stetigen streng monoton steigenden Funktion f im Intervall [a,b]. Diese soll mit einer Genauigkeit \varepsilon angegeben werden, es wird also ein Teilintervall von [a,b] gesucht, das die Nullstelle enthält und höchstens die Länge \varepsilon hat. Da es unendlich viele derartige Intervalle gibt, können diese nicht einfach alle durchprobiert werden. Es gilt jedoch:

  • Eine stetige streng monoton steigende Funktion f hat in einem Intervall [l,r] genau dann eine Nullstelle, wenn f(l)<0 und f(r)>0 ist.

Dies führt zu folgendem Algorithmus:

  1. Setze l=a und r=b.
  2. Teste, ob [l,r] eine Nullstelle enthält. Wenn nicht: Abbruch.
  3. Teste, ob r-l < \varepsilon ist. Wenn ja, ist das Lösungsintervall gefunden.
  4. Sonst teile [l,r] in der Mitte und setze das Verfahren mit beiden Teilintervallen rekursiv bei 2. fort.

Ähnlich wie im diskreten Fall endet der Algorithmus spätestens, wenn das Intervall die Länge \varepsilon unterschreitet. Also:

\frac{b-a}{2^n} < \varepsilon \Rightarrow \log_2 \frac{b-a}{\varepsilon} < n

Es ergibt sich somit eine logarithmische Laufzeit in Abhängigkeit vom Verhältnis der Intervalllänge zur gewünschten Genauigkeit.

Vor- und Nachteile des Verfahrens[Bearbeiten]

Die Bisektion eignet sich für folgende Fälle:

  • Ein Vorzeichenwechsel liegt im gegebenen Intervall vor und die Funktion ist stetig
  • Die Startwerte der klassischen Verfahren (Newton-Verfahren, Regula Falsi) liegen nicht hinreichend nah genug an der Nullstelle, so dass dort keine lokale Konvergenz eintritt
  • Mehrfache Nullstellen mindern die Konvergenzgeschwindigkeit der klassischen Verfahren

Nachteile der Bisektion:

  • Bei einfachen Fällen (streng monotone Funktion) ist sie langsamer als ein quadratisch konvergentes Verfahren
  • Ohne Vorzeichenwechsel im gegebenen Intervall sind Zusatzprüfungen notwendig, um ein lokales Minimum von einer Nullstelle zu unterscheiden

Bisektion und Binärbäume[Bearbeiten]

Es besteht ein enger Zusammenhang zwischen Bisektion und Binärbäumen. Während einer Bisektion wird in jedem Schritt eine Entscheidung getroffen, ob mit der linken oder der rechten Teilmenge fortgesetzt werden soll, und beim Durchlaufen eines Binärbaums von der Wurzel aus muss in jedem Knoten entschieden werden, ob der linken oder der rechten Kante gefolgt werden soll. Zu einer gegebenen Mengengröße und einem Bisektionsverfahren gibt es also genau einen zugeordneten Binärbaum, der alle potentiellen Verläufe der Bisektion beschreibt. Der Baum hat dabei genau so viele Blätter, wie das gegebene Problem mögliche Ergebnisse liefern kann. Da sich mit jeder Entscheidung in einem Knoten die Anzahl der noch möglichen Ergebnisse etwa halbiert, hat er ungefähr

\log_2 m

Ebenen. Dies entspricht der Laufzeit der Bisektion, da die Anzahl der Ebenen die Weglänge von oben nach unten festlegt, die wiederum gleich der Laufzeit ist. Der sich durch diese Zuordnung ergebende Baum entspricht einem balancierten binären Suchbaum.

Bisektion und binäre Zahlen[Bearbeiten]

Bisektion lässt sich beispielsweise auch verwenden, um die binäre Darstellung einer Zahl zu ermitteln. Eine Zahl zwischen 0 und m-1 kann durch eine Folge von „größer-oder-gleich“- und „kleiner“-Entscheidungen gekennzeichnet werden. Wird m als eine Potenz von 2 gewählt, so kann immer auf das Element „rechts der Mitte“ getippt werden, da die Menge eine gerade Größe hat. Für m=8 ergibt sich zum Beispiel die Menge { 0,...,7 } – die Suche nach der 2 liefe nun wie folgt ab:

  • 4 – kleiner
  • 2 – größer oder gleich (auf einen „Treffer“ wird verzichtet)
  • 3 – kleiner

Damit ist die 2 genau beschrieben. Setzen wir nun für „kleiner“ die 0 und für „größer oder gleich“ die 1, so ergibt sich 010. Dies ist gerade die binäre Darstellung der 2.

Weblinks[Bearbeiten]