Optimiser F6 avec un index direct par identifiant

This commit is contained in:
rabot
2026-10-21 11:14:00 +02:00
parent 285afd80a7
commit 1c7970b554
3 changed files with 51 additions and 5 deletions
+14
View File
@@ -299,3 +299,17 @@ conservés comme dans les boucles initiales. Les **97 655 séries** de longueur
1 à 7 à valeurs dans `[-2, 2]` sont comparées à la version cubique, sur la
somme et sur les deux bornes : elles couvrent notamment les zéros, les
égalités et les séries entièrement négatives.
### F6 — Index direct par identifiant
Les identifiants sont une permutation de `[0, n - 1]`. Un index de pointeurs
est construit en **`O(n)`** avant la boucle des requêtes. Chaque recherche
contrôle les bornes et renvoie `index_ids[id]` en **`O(1)`**, au lieu de
parcourir les transactions en `O(n)`. Le coût des `Q` requêtes, construction
comprise, devient **`O(n + Q)`**, avec `O(n)` de mémoire supplémentaire.
Les recherches ont toutes lieu avant le tri des transactions : un déplacement
des transactions imposerait de reconstruire l'index. F6 garde **M = 3** et
`indexer_par_id` a **M = 2**. Les tests comparent les pointeurs renvoyés
à une recherche linéaire sur des identifiants permutés pour les tailles
1 à 128, et vérifient les recherches hors bornes et dans un tableau vide.