Verbesserter p-fast Trie: Ein hocheffizienter Algorithmus für Präfixübereinstimmungen

2025-08-10

Dieser Artikel präsentiert eine verbesserte p-fast Trie-Datenstruktur, einen hocheffizienten Algorithmus zum Auffinden des längsten übereinstimmenden Präfix oder des nächsten Vorgängers/Nachfolgers einer Abfragezeichenkette in einer Menge von Zeichenketten. Im Vergleich zu früheren Versionen ist diese verbesserte Version prägnanter und speichereffizienter. Sie verwendet eine Hash-Tabelle, um jedes eindeutige Präfix zu speichern, und ein Bitmap, um die möglichen nächsten Zeichen für jedes Präfix darzustellen, wodurch eine Zeitkomplexität von O(log k) erreicht wird (wobei k die Schlüssellänge ist). Obwohl Vorgängersuchen möglicherweise mehr Prüfungen erfordern, übertrifft ihre Leistung dennoch traditionelle qp-Tries.

Mehr lesen

Compileroptimierung: Verbesserung der nahezu divisionslosen Zufallszahlengenerierung von Lemire

2025-03-09

Der Autor hat einen nahezu divisionslosen Algorithmus zur Erzeugung beschränkter Zufallszahlen (Lemires Algorithmus) verbessert. Eine vorherige Version reduzierte Code-Bloat durch Inline-Einbindung des schnellen Pfads, aber die Compileroptimierung war begrenzt. Der Autor entdeckte, dass, wenn die Grenze eine Kompilierzeitkonstante ist, die Ablehnungsschwelle zur Kompilierzeit berechnet werden kann und die Vermeidung der Division unnötig ist. Die neue Implementierung hat nur einen Aufruf an den Zufallszahlengenerator, und der Compiler eliminiert die Schleife automatisch, wenn die Grenze eine Zweierpotenz ist. Dies ist effizienter als die Version des letzten Jahres, und der Autor untersucht ähnliche Kompilierzeitoptimierungstechniken in Rust.

Mehr lesen