„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Können Sie in C++ einen effizienten binären Suchalgorithmus implementieren, der einen Iterator zum Suchergebnis zurückgibt?

Können Sie in C++ einen effizienten binären Suchalgorithmus implementieren, der einen Iterator zum Suchergebnis zurückgibt?

Veröffentlicht am 08.11.2024
Durchsuche:546

Can You Implement an Efficient Binary Search Algorithm in C   that Returns an Iterator to the Search Result?

Suche nach einem effizienten binären Suchalgorithmus in C

Programmierer versuchen oft, effiziente binäre Suchalgorithmen zu implementieren, die die Vorteile der logarithmischen Zeitkomplexität bieten . Eine häufige Anforderung besteht darin, dass der Algorithmus einen Iterator zurückgibt, der auf das Suchergebnis zeigt, und nicht einen einfachen booleschen Wert, der dessen Existenz angibt.

Die C-Standardbibliothek stellt std::binary_search im -Header bereit, aber nur diesen gibt einen booleschen Wert zurück. Wie der Fragesteller anmerkte, kann dies in Situationen frustrierend sein, in denen die Geschwindigkeit einer binären Suche gewünscht ist und die Daten bekanntermaßen sortiert sind.

Glücklicherweise gibt es alternative Implementierungen, die die gewünschte Funktionalität bieten. Eine beliebte Option ist die Verwendung eines benutzerdefinierten Algorithmus, der die Funktionen std::lower_bound, std::upper_bound oder std::equal_range nutzt. Hier ist eine vereinfachte Version einer solchen Implementierung:

template
Iter binary_find(Iter begin, Iter end, T val) {
    // Determine the lower bound using binary search
    Iter i = std::lower_bound(begin, end, val);

    // If the element is found, return the iterator to it
    if (i != end && !(val 

Alternativ kann ein std::set verwendet werden, das die Reihenfolge der Elemente garantiert und die Find-Methode bereitstellt, die einen Iterator zum gewünschten Element zurückgibt. Es ist jedoch wichtig zu prüfen, ob die Anforderungen mit der Verwendung eines Satzes kompatibel sind, insbesondere in Fällen, in denen mehrere Instanzen desselben Elements gespeichert werden müssen.

Freigabeerklärung Dieser Artikel wird unter folgender Adresse abgedruckt: 1729693891 Bei Verstößen wenden Sie sich bitte an [email protected], um ihn zu löschen
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3