Die naive binäre Suche ist ein sehr effizienter Algorithmus: Sie nehmen den Mittelpunkt Ihrer oberen und unteren Punkte in einem sortierten Array und passen Ihren oberen oder unteren Punkt entsprechend an. Dann berechnen Sie Ihren Endpunkt neu und iterieren, bis Sie Ihren Zielwert finden (oder natürlich nicht.)Gibt es einen effizienteren Suchfaktor als den Mittelpunkt für die binäre Suche?
Nun, ganz klar, wenn Sie den Mittelpunkt nicht verwenden, führen Sie ein gewisses Risiko für das System ein. Angenommen, Sie verschieben Ihr Suchziel vom Mittelpunkt weg und Sie erstellen zwei Seiten - ich nenne sie eine große Seite und eine kleine Seite. (Es spielt keine Rolle, ob die Verschiebung zu hoch oder zu niedrig ist, weil es symmetrisch wäre.) Das Risiko besteht darin, dass Ihr Suchraum größer ist, als Sie es wären: Sie müssen die große Seite suchen, die ist größer. Aber die Belohnung ist, dass, wenn Sie Ihren Suchraum treffen, kleiner ist.
Es fällt mir auf, dass die Anzahl der belasteten Räume gleich ist und (ohne Muster, von denen ich annehme, dass es keine gibt) die Wahrscheinlichkeit, dass ein Element höher und niedriger als der Mittelpunkt ist, gleich ist. Das Risiko besteht also darin, dass es zwischen dem neuen Ziel und dem Mittelpunkt liegt.
Jetzt, da die Anzahl der Leerzeichen den Suchraum beeinflusst und der Suchraum logarithmisch gemessen wird, scheint es mir, wenn ich verwendet habe, sagen wir 1/4 und 3/4 für unsere Suchräume, die ich geschnitten habe Log von dem kleinen Raum in der Mitte, wo der große Raum nur um etwa 0,6 oder 0,7 gestiegen ist.
Also mit all dem im Hinterkopf: Gibt es eine effizientere Art der Durchführung einer binären Suche als nur die Verwendung des Mittelpunkts?
Nein, der Mittelpunkt ist der effektivste Weg für die Binärsuche, wenn wir keine anderen Informationen kennen. Je kleiner das Verhältnis zwischen Ihrer kleineren und der größeren Seite ist, desto weniger effektiv ist Ihre Suche. Wenn Sie sich für 1/4 und 3/4 entscheiden, warum nicht bis zum Äußersten gehen? Wählen wir die Annäherung an 0 und die Annäherung an 1. Sie werden nach jedem Suchschritt fortlaufend auf der sich nähernden 1 Seite platziert, wobei Sie bei jeder Suche eine Suchgröße von fast 0 abschneiden. Dies ist nicht effizient. –
Josh, kannst du das beweisen? – corsiKa
Natürlich. Nehmen wir eine Sammlung von 10 Elementen. [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]. Nun benutzen wir das Extrem und trennen den Abschnitt in [1] und [2, 3, 4, 5, 6, 7, 8, 9, 10]. Gefunden, dass es in der größeren Sektion ist, gehen wir zurück und trennen [2] und [3, 4, 5, 6, 7, 8, 9, 10]. Wie Sie sehen können, fällt Ihre Suche auf eine O (n) Suche. –