Die folgende SO url bietet einige gute Praxisbeispiele für Big O-Notation:binäre Suchmuster Details der Implementierung/Nutzung Fragen
What does O(log n) mean exactly?
Ich bin speziell Interesse an dem folgenden Beispiel für eine binäre Suche zur Verfügung gestellt :
„O (log n): den Namen einer Person gegeben, einen zufälligen Punkt etwa auf halbem Weg durch den Teil des Buches die Überprüfung der Telefonnummer finden Sie gesucht haben noch nicht von Kommissionierung, dann, um zu sehen, ob der Name der Person ist Dann wiederhole den Vorgang etwa auf halbem Weg durch den Teil des Buches, in dem der Der Name der Person liegt. (Dies ist eine binäre Suche nach dem Namen einer Person.)“
Es gibt ein paar Dinge über das, was ich bin unklar:
Hat ein Lehrbuch binäre Suche starten, indem auf die exakt auf halbem Wege der Suche Punkt eines Arrays? Wenn es eine gerade Anzahl von Elementen im Array gibt, sollte ein binärer Suchalgorithmus das untere oder höhere Element zufällig auswählen?
Sucht eine Textbuch-Binärsuche eine Suche nach bestimmten Datenpunkten auf halbem Weg Oder sucht es nach Clustergruppen von Datenpunkten, um eine bessere Effizienz zu erzielen, oder unterstützt es auch ein binäres Suchmuster? einer dieser Ansätze?
Kann die binäre Suche auf sortierte oder unsortierte Arrays angewendet werden? Oder wird es immer empfohlen, ein Array vor dem Ausführen einer binären Suche programmgesteuert zu sortieren?
Gibt es ein Problem bei der Verwendung der folgenden Routine, um den Startindex zu identifizieren ?: var startIndex = Math.Round (itemCount/2); –
Wenn itemCount eine Ganzzahl ist (und sollte es sollte, da es ein Index sein wird), sollten Sie sich keine Gedanken über das Runden von Zahlen machen. – attaboy182
Aber wenn meine Menge 5 Elemente hat, wird die folgende startIndex-Routine 2,5 zurückgeben: var startIndex = Math.Round (itemCount/2); Ich kann nicht auf die Sammlung mit einem Index von 2,5 zugreifen, so scheint Math.Round, wie es beide Szenarien der geraden oder ungeraden Anzahl von Elementen abdeckt. Wäre nicht Math.Runde hier die bessere Wahl? Können Sie die Routine ausschreiben, die Sie normalerweise zum Identifizieren von startIndex verwenden? –