Übungsaufgaben
Zehn Übungen zum Klicken, Zuordnen, Rechnen und Knobeln — von AFB I bis AFB III. Jede Übung gibt dir sofort Rückmeldung; wenn du nicht weiterkommst, helfen die gestuften Tipps.
Nenne alle zutreffenden Aussagen über die Methode binSuche(a, x, links, rechts).
return — endrekursiv. Bei 1000 Elementen sind es höchstens 10 Vergleiche. links > rechts meldet einen leeren Bereich: nicht gefunden.Ordne jede Zeile der rekursiven binären Suche ihrer Rolle zu.
a.length - 1.Gegeben ist int[] b = {4, 9, 15, 20, 26, 33, 38, 41, 47, 55}; und der Aufruf binSuche(b, 20, 0, 9). Lies aus der Reihung ab, ob die Aussagen stimmen.
Gegeben ist int[] c = {3, 12, 18, 27, 31, 39, 44, 52, 60, 68, 75};. Stelle die Aufrufe von binSuche(c, 50, 0, 10) dar.
wahr oder falsch.| Aufruf | links | rechts | mitte | c[mitte] |
|---|---|---|---|---|
| 1 | 0 | 10 | ||
| 2 | 10 | |||
| 3 | 6 | |||
| 4 | 7 | |||
| 5 | 7 | — | leer → −1 |
Berechne die größte Zahl von Vergleichen mit a[mitte] für verschiedene Längen \(n\).
- n = 100: Vergleiche
- n = 1000: Vergleiche
- n = 1 000 000: Vergleiche
- n = 2 000 000: Vergleiche
Die iterative binäre Suche aus Kapitel 2 und die rekursive Fassung entsprechen sich Zeile für Zeile. Vergleiche sie, indem du passende Teile verbindest.
Überprüfe die Methode und korrigiere die fehlerhaften Zeilen.
>= wird ein Bereich aus einem Element nie geprüft — steht x genau dort, meldet die Methode −1. Mit mitte statt mitte + 1 bleibt bei zwei Elementen der Bereich gleich: StackOverflowError.In {2, 5, 5, 5, 8, 9} findet binSuche die 5 an Index 2 — gesucht ist aber das erste Vorkommen (Index 1). Verändere die Methode, indem du die Lücken füllst.
static int erstes(int[] a, int x, int links, int rechts) {
if (links > rechts) return -1;
int mitte = (links + rechts) / 2;
if (a[mitte] < x) return erstes(a, x, mitte + 1, rechts);
if (a[mitte] > x) return erstes(a, x, links, mitte - 1);
int weiter = erstes(a, x, , );
if (weiter == -1) return ;
return ;
}
mitte das erste. Der Aufwand bleibt logarithmisch, weil jeder Aufruf höchstens einen Selbstaufruf ausführt.mitte liegen.Ermittle die größte Zahl von Vergleichen mit a[mitte], die binSuche bei einer Reihung mit 1024 Elementen braucht.
Eine Reihung steigt erst an und fällt dann, z. B. {1, 4, 9, 12, 7, 3}. Gesucht ist der Index des größten Elements. Entwickle eine rekursive Suche nach dem Muster der binären Suche.
x entscheidet über die Hälfte, sondern die Richtung des Anstiegs. Für {1, 4, 9, 12, 7, 3} liefert die Methode Index 3.