TuH2 java
Java - Variante zu Teile und Herrsche 2
Um mit den Java Beispielen experimentieren zu können findet ihr folgende vordefinierte Datenstrukturen.
Betrachten wir nun die iterative Variante der binären Suche. Dazu betrachten wir das Intervall in welchem gesucht wird und das Verhalten dessen Größe während der Suche.
<eval></eval>
Unsere Variablen für die Positionen im zu durchsuchenden Feld verantwortlich sind haben beim Start folgende Belegungen:
\begin{array}{lcl} \text{Start} & = & 0 \\ \text{Ende} & = & Feldleange - 1 \\ \text{Feldleange zu Begin} & = & \text{start} + \text{Ende} \\ \text{Mitte des Feldes} & = & \dfrac{\text{Start} + \text{Ende}}{2} \\ \end{array}Das Intervall ändert sich wie folgt:
\begin{array}{lcl} \text{Neue Feldlaenge} & = & \text{Ende} - \text{Start} + 1 \\ & = & \text{Ende} - (\text{Mitte} + 1) + 1 \\ & = & \text{Ende} - \text{Mitte des Feldes} \\ & = & \text{Ende} - \dfrac{\text{Start} + \text{Ende}}{2} \\ & = & \dfrac{2 \cdot \text{Ende}}{2} - \dfrac{\text{Start} + \text{Ende}}{2} \\ & = & \dfrac{\text{Ende} - \text{Start}}{2} \end{array}Kurz gefasst ändert sich das Intervall in jedem Durchlauf der Schleife von der Länge n auf \dfrac{n - 1}{2}. Was heist das nun konkret? Wir haben 2 Intervalle zwischen denen es sich jeweils zu entscheiden gilt und dafür brauchen wir k durchläufe. Somit haben 2^k Operationen um n Elemente zu durchsuchen.
2^k = n Das lässt sich mit dem Logarithmus zur Basis 2 errechnen.
\log_{2} n = k \curvearrowright \mathcal{O}(\log_2 n)
Dieses Ergebnis zaubert ein grinsen ins Gesicht,
da ein Algorithmus mit logarithmischer Laufzeit äußerst Effizient arbeitet.Den Unterschied zwischen linearem und logarithmischen Aufwand kann man sich mittels empirischer Analyse vor Augen halten, dazu findet ihr zwei Aufgaben auf der Übungsseite http://www.michael-hielscher.de/wiki/index.php/Aufgaben - TuH2#Aufgaben zur Bin.C3.A4ren Suche.
<eval> System.out.println("An welcher Stelle ist das Element zu finden? Position:" + binSuch(erzeugeFeld(10), 3)); </eval>