Ich habe gerade gelesen Kann dieser Algorithmus immer noch als Algorithmus für die binäre Suche betrachtet werden? und erinnerte mich, dass ich vor ein paar Jahren einen Indexer / eine Suche nach Protokolldateien geschrieben habe, um Protokolleinträge in großen Nur-Text-Dateien nach Datum / Zeit-Fenster zu finden.
Währenddessen habe ich mich für die Interpolationssuche entschieden (ich wusste nicht, dass es so heißt, ich bin selbst auf die Idee gestoßen). Dann fuhr ich aus irgendeinem Grund mit der Idee fort, die Interpolationsschritte mit den binären Teilungsschritten abzuwechseln: Bei Schritt 0 würde ich interpolieren, um den Testpunkt zu bestimmen, dann würde ich bei Schritt 1 den genauen Mittelpunkt usw. nehmen.
Anschließend habe ich das System mit der reinen Interpolationssuche, der reinen Binärsuche und meinem Kombinationsversuch verglichen. Der Wechselansatz war sowohl in Bezug auf die Zeit als auch auf die Anzahl der erforderlichen Tests ein klarer Gewinner, bevor ein Satz zufällig ausgewählter Zeiten gefunden wurde.
Inspiriert von der verknüpften Frage habe ich gerade eine schnelle Suche nach "abwechselnder Interpolationssuche und binärer Suche" durchgeführt und nichts gefunden. Ich habe auch "Hedged Interpolation Search" ausprobiert, wie in meinem Kommentar zu einer der Antworten vorgeschlagen.
Habe ich über eine bekannte Sache gestolpert? Gibt es eine theoretische Rechtfertigung dafür, dass bestimmte Datentypen schneller sind? Die Protokolldateien waren für die Zeit in der Regel groß (z. B. 1 bis 2 GB Text mit möglicherweise 10 Millionen zu durchsuchenden Zeilen), und die Verteilung der Daten / Zeiten in ihnen war komplex, mit starken Aktivitätsschüben, allgemeinen Stoßzeiten und Ruhezeiten. Meine Benchmark-Tests ermittelten Stichproben aus einer gleichmäßigen Verteilung der Zielzeiten.
quelle
prefetcht0
Anweisungen ) vorab abzurufen, bevor der aktuelle Mittelpunkt geladen wird, für eine speicherinterne Suche auf moderner x86-Hardware. Sie können dies nicht tun, wenn Sie die nächsten Abrufadressen nicht im Voraus vorhersagen können. So können neben theoretischen Überlegungen auch praktische Details der Implementierung von Bedeutung sein .