![]() |
AW: Suche nach nächstem gleich-großen oder größeren Wert
Zitat:
Zitat:
Zitat:
|
AW: Suche nach nächstem gleich-großen oder größeren Wert
Zitat:
|
AW: Suche nach nächstem gleich-großen oder größeren Wert
Zitat:
|
AW: Suche nach nächstem gleich-großen oder größeren Wert
Vielen Dank schonmal für eure zahlreichen Antworten. Ich konkretisiere mal ein wenig:
Ich benötige diese spezielle Art der Suche für einen Symbol Resolver (das Ding, was in einem Disassembler numerische Adressen in SymbolName + Offset umwandelt). Hat man beispielsweise ein bekanntes Symbol an Adresse 0x1000 und der Resolver bekommt jetzt Adresse 0x1010 übergeben, dann wäre die Ausgabe SymbolName+0x10. Üblicherweise wird man wohl versuchen die meisten Symbole schon vor dem ersten Resolvevorgang "einzutragen", aber es kann durchaus passieren, dass nachträglich noch eine ganze Reihe von Adressen hinzugefügt werden muss. Ich werde dann mal wohl mal ein wenig mit binärer Suche und B+ Bäumen rumspielen :) Viele Grüße Zacherl |
AW: Suche nach nächstem gleich-großen oder größeren Wert
Brauchst du denn dafür wirklich performante Einfüge- und Löschoperationen? Es müsste doch reichen, die Liste nur einmalig zu Beginn zu initalisieren. Da könntest du wirklich einfach ein sortiertes Array nehmen, wäre deutlich einfacher als balancierte Bäume und vom Zeitaufwand her identisch (n Einfügeoperationen im Baum = O(n log n), n-elementiges Array sortieren ebenfalls = O(n log n)). Das Array wäre nicht nur einfacher zu implementieren sondern in der Praxis wahrscheinlich sogar schneller, weil der Overhead geringer ist.
|
AW: Suche nach nächstem gleich-großen oder größeren Wert
Zitat:
|
AW: Suche nach nächstem gleich-großen oder größeren Wert
Es wird dann aber wahrscheinlich gleich immer ein Haufen Symbole auf einen Schlag eingefügt (und dazwischen längere Zeit nichts), oder? Wenn das Array nur einmal pro geladener DLL neu sortiert werden muss, wäre das ja wahrscheinlich auch noch verschmerzbar.
|
AW: Suche nach nächstem gleich-großen oder größeren Wert
Zitat:
B+ Bäume sind hierfür imho falsch, denn sie basieren auf festen Speicherblöcken (z.B. Dateiblöcken) und sind nichts anderes als binäre Arrays, die als N-ärer Baum untereinander hängen. Für die In-Memory Suche ist das imho overkill. Binäre Listen sind knackig und kurz in der Implementierung, dafür O(n) beim Einfügen (Listeninhalt muss verschoben werden). Das geht aber sehr schnell. Binäre Bäume (RB oder AVL) komplexer in der Umsetzung, aber dafür für diesen Fall optimal. Eine SkipList wäre noch eine Alternative. Es gibt fertige Lösungen, auch hier im Forum, z.B. hier : ![]() |
AW: Suche nach nächstem gleich-großen oder größeren Wert
Die eigentliche Frage lautet wie viel zeit hast Du fürs Sortieren übrig..
Kommen die Werte einzeln rein... - Mit Intervall-Schachtelung die Position suchen - Mit einem Move Platz machen und einfügen Kommen viele Werte auf einmal rein - QSort drüber fertig - Suchen wieder mit Intervall-Schachtelung... Wahrscheinlich kann man in einer eigenen Implementierung einige Taktzyklen sparen, aber i.d.R. "reichen" auch die Bordmittel. Mavarik |
AW: Suche nach nächstem gleich-großen oder größeren Wert
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz