Trie p-fast amélioré : un algorithme de correspondance de préfixe très efficace

2025-08-10

Cet article présente une structure de données trie p-fast améliorée, un algorithme très efficace pour trouver le préfixe correspondant le plus long ou le prédécesseur/successeur le plus proche d’une chaîne de requête dans un ensemble de chaînes. Comparée aux versions précédentes, cette version améliorée est plus concise et plus économe en espace. Elle utilise une table de hachage pour stocker chaque préfixe unique et un bitmap pour représenter les caractères suivants possibles pour chaque préfixe, atteignant une complexité temporelle de O(log k) (où k est la longueur de la clé). Bien que les recherches de prédécesseurs puissent nécessiter plus de sondages, ses performances surpassent toujours les tries qp traditionnelles.

Lire plus

Optimisation du compilateur : Amélioration de la génération de nombres aléatoires presque sans division de Lemire

2025-03-09

L’auteur a amélioré un algorithme presque sans division pour générer des nombres aléatoires bornés (algorithme de Lemire). Une version précédente réduisait l’inflation du code en intégrant en ligne le chemin rapide, mais l’optimisation du compilateur était limitée. L’auteur a découvert que lorsque la limite est une constante au moment de la compilation, le seuil de rejet peut être précalculé et l’évitement de la division est inutile. La nouvelle implémentation n’effectue qu’un seul appel au générateur de nombres aléatoires, et le compilateur élimine automatiquement la boucle lorsque la limite est une puissance de deux. Ceci est plus efficace que la version de l’année dernière, et l’auteur explore des techniques d’optimisation similaires au moment de la compilation en Rust.

Lire plus