Wie viele binäre Suchen müssen in einer Tabelle n-element
ausgeführt werden, um die Vorbereitungszeit zurückzukaufen, die zum Sortieren der Tabelle erforderlich ist?Wann muss ich die binäre Suche anstelle der linearen Suche verwenden?
Antwort
Es ist eine knifflige Frage, denn es hängt vom Algorithmus ab, den Sie zum Sortieren verwenden, Details zur binären Implementierung der Suche und so weiter.
Ohne Kenntnis von spezifischen Implementierungen können wir Analyse nur in Bezug auf die Big-O-Notation beginnen (aber es ist nicht genau, wie die Komplexität für Algorithmus O (2n) gleich O (n), sondern nehmen etwa zwei mal mehr)
Analyse
Binary search = O(logn)
Sorting = O(nlogn)
Linear search = O(n)
Sie benötigen K
Suchen durchführen. Also für den rohen unsortierten Array a[n]
für unterschiedliche Suchanfragen benötigen Sie
Binary Search
- Sortieren
Suche
k
malTOTAL (BS) = O (log n) + k * O (logn)
Linear Suchen
Suche nur
k
malTOTAL (LS) = k * O (n)
Nun versuchen die Gleichung zu lösen, durch k
zu vergleichen und n
nlogn + klogn < kn
log(n^n) + log(n^k) < kn
log(n^(n+k)) < kn
n^(n+k) < 2^kn
2^kn - n^(n+k) > 0
(Ich bin nicht Mathematiker, ist dies als einfachste wie ich bekommen kann)
Wenn Sie nun Eingang für Ihren Algorithmen N
und K
haben, bewerten gerade letzten Ausdruck zu finden, mindestens K
mit binärer Suche zu gewinnen.
Beispiel
sei angenommen, n = 1000
2^(1000k) - 1000^(1000 + k)> 0
Dieser Ausdruck gilt, wenn K> 10, Für n = 10000, Ausdruck gilt, wenn k> 9
Schlussfolgerung
Wenn Ihr Array größer als 1000 Elemente ist, müssen Sie mindestens 10 Binärsuchen ausführen, um die Investition zurück zu senden
Die numerischen Ergebnisse stehen nur unter der Annahme, dass alle in der großen O-Notation versteckten konstanten Faktoren 1 sind. – Henry
Ihre andere "Schlussfolgerung" sollte sein, dass, wenn "n" zunimmt, "k" abnimmt. Das heißt, je größer das Array, desto weniger Suchvorgänge benötigen Sie, um die zum Sortieren benötigte Zeit wiederzuerlangen. Weil 'k * n 'schneller zunimmt als' (n + k) * log (n) '. –
Binäre Suche wird verwendet, wenn Daten in sortierter Reihenfolge vorliegen. Die binäre Suche gibt Ihnen die Leistung von O (logn). Wenn Sie mehr Suchen als Einfügungen haben, wird die binäre Suche eine verbesserte Leistung liefern. wo als lineare Suche ist O (n). Die lineare Suche kann verwendet werden, wenn Daten nicht geordnet sind.
- 1. Binäre Suche C++ STL
- 2. Binäre Suche Bäume
- 3. binäre Suche Terminierungsbedingung
- 4. Dynamische binäre Suche
- 5. Erweiterte binäre Suche
- 6. Verständnis binäre Suche Bug
- 7. Binäre Suche eines Wortes
- 8. Geschachtelte binäre Suche Java
- 9. Binäre Suche Bäume C++
- 10. Wann muss ich die READ_GSERVICES-Berechtigung verwenden?
- 11. Binäre Suche Tree Traversals
- 12. Ein Suchalgorithmus, der lineare Suche und binäre Suche kombiniert
- 13. löschen binäre Suche Baum
- 14. binäre Suche Baum
- 15. STL-Paare und binäre Suche
- 16. binäre Suche auf android.support.v7.util.SortedList
- 17. Java binäre Suche Array-Liste
- 18. Binäre Suche mit Char-Array
- 19. binäre Suche Bäume in Ruby
- 20. Binäre Suche in Objekten implementieren
- 21. Generische binäre Suche in C#
- 22. Wann muss ich @WebServiceRef verwenden?
- 23. Wann muss ich MPI_Barrier() verwenden?
- 24. Excel Find Geschwindigkeit vs VBA binäre Suche?
- 25. Binäre Suche von Wörtern in Python-Liste
- 26. Javascript/lodash binäre Suche nach Funktion
- 27. C++ Hausaufgaben - Binäre Suche Baum Hilfe
- 28. Suche "Ende mit" anstelle der Erweiterung
- 29. binäre Suche in einem Array in Perl
- 30. Python-Wörterbuch - binäre Suche nach einem Schlüssel?
Sie sprechen absolute Zeit - wie in Sekunden und Millisekunden? –
Das hängt von den Implementierungsdetails ab und kann nur experimentell herausgefunden werden. – Henry
Was denkst du? –