Wir haben eine Anwendung, die auf einem Low-Power-Prozessor ausgeführt wird, der schnelle Antwort auf eingehende Daten haben muss. Die Daten kommen mit einem zugehörigen Schlüssel. Jede Taste reicht von 0 - 0xFE (max 0xFF). Die Daten selbst reichen von 1kB bis 4kB. Das System verarbeitet Daten wie:Schneller Such-Einfüge-Lösch-Algorithmus für Low-Power-Prozessor
data in
key lookup -> insert key & data if not found
buffer data in existing key
Nach einem Ereignis werden ein Schlüssel und zugehörige Daten zerstört.
Wir sind ein paar Lösungen trialing:
Pre-zugewiesen
std::vector<std::pair<int,unsigned char *>>
, die einen Schlüsselwert auf der Grundlage der Indexposition nachschlägt.std::map<int, unsigned char *>
Rot-Schwarz-Baum
std::vector<...>
mit einer binären Art und binärer Suche nach dem Schlüssel des
Gibt es andere Algorithmen, die schnell auf Einfügen- sein könnte Suchen-Löschen?
Danke.
Sie werden Duplikate für einen einzelnen Schlüssel haben, oder werden neue Daten mit einem vorhandenen Schlüssel die alten Daten ersetzen? –
Da Sie über sehr kleine Datensätze (1-Byte-Schlüssel) auf einem Low-Power-Prozessor sprechen, sollten Sie das Denken über traditionelle algorithmische Leistung und große O-Notation für Algorithmen definitiv ignorieren. Denken Sie daran, dass all dies nur gilt, wenn Datensätze in Richtung Unendlichkeit wachsen. Die praktische Leistung für kleine Sets folgt diesen Mustern nicht. Machen Sie 1) oder 2) und profilieren Sie die Leistung – TJD
@Mark - Single Key, neue Daten werden gegen diesen Schlüssel gepuffert – user626201