Bin unsicher ob so eine spezifische Frage erlaubt ist, aber versuchen kann ichs mal. Da hier sicher viele Informatiker sind, ist diese Berechnungen sicher nicht neu:
Ich lern im Datenstruktur & Algorithmen Kurs gerade die Laufzeitberechnungen der Such-/Sortier Algorithmen. Grundsärtzlich ist mir das meistens klar, aber ich bin grad den Binary Search (der, bei dem immer alles durch 2 geteilt wird, bis das Ziel gefunden wird) selbst durchgegangen und habe ein kontroverses Ergebnis einmal bekommen.
Angenommen wir haben folgendes Array:
num[8]={ 1, 2, 3, 4, 5, 6, 7, 8 ]
also genau 8 Nummern, aber wie in IT üblich startet die erste Zahl im Array bei Index 0.
Dementsprechend habe ich am Anfang, um die Mitte zu berechnen, die 7 als höchste Zahl
low = 0, high = 7 --> mid = (low + high) / 2 --> 3,5 (abgerundet : 3)
um jetzt zB die Zahl 1 zu finden (also die erste im Array), braucht es nur noch mal 2mal eine Splittung durch 2.
Was ja auch formell bestätigt wird, da der log von 8 = 3 ist. Also 3 Schritte.
Wenn ich aber jetzt nicht die Zahl 1 suchen würde, sondern die letzte Zahl, im Bsp oben, die Zahl 8, dann brauch ich sogar 4 Schritte insgesamt. Aber das kann doch eigentlich nicht sein? Bins mehrmals am Zettel mit Stift&Papier durchgegangen und es ist genau 1 Schritt mehr, wenn man eben die letzte Zahl (ganz rechts) vom Array will und nicht die erste Zahl ganz links. (Was ja auch klar ist, da beim Teilen immer abgerundet wird 7 / 2 = 3; usw ...
Ich lern im Datenstruktur & Algorithmen Kurs gerade die Laufzeitberechnungen der Such-/Sortier Algorithmen. Grundsärtzlich ist mir das meistens klar, aber ich bin grad den Binary Search (der, bei dem immer alles durch 2 geteilt wird, bis das Ziel gefunden wird) selbst durchgegangen und habe ein kontroverses Ergebnis einmal bekommen.
Angenommen wir haben folgendes Array:
num[8]={ 1, 2, 3, 4, 5, 6, 7, 8 ]
also genau 8 Nummern, aber wie in IT üblich startet die erste Zahl im Array bei Index 0.
Dementsprechend habe ich am Anfang, um die Mitte zu berechnen, die 7 als höchste Zahl
low = 0, high = 7 --> mid = (low + high) / 2 --> 3,5 (abgerundet : 3)
um jetzt zB die Zahl 1 zu finden (also die erste im Array), braucht es nur noch mal 2mal eine Splittung durch 2.
Was ja auch formell bestätigt wird, da der log von 8 = 3 ist. Also 3 Schritte.
Wenn ich aber jetzt nicht die Zahl 1 suchen würde, sondern die letzte Zahl, im Bsp oben, die Zahl 8, dann brauch ich sogar 4 Schritte insgesamt. Aber das kann doch eigentlich nicht sein? Bins mehrmals am Zettel mit Stift&Papier durchgegangen und es ist genau 1 Schritt mehr, wenn man eben die letzte Zahl (ganz rechts) vom Array will und nicht die erste Zahl ganz links. (Was ja auch klar ist, da beim Teilen immer abgerundet wird 7 / 2 = 3; usw ...