forked from menault/2026_TD3_DEV51_Qualite_Algo
Optimiser F7 par tri et parcours à deux pointeurs
This commit is contained in:
@@ -313,3 +313,21 @@ 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.
|
||||
|
||||
### F7 — Tri et deux pointeurs pour les paires opposées
|
||||
|
||||
Une copie des transactions est triée avec F1 pour préserver l'ordre du
|
||||
tableau d'entrée. Deux pointeurs partent ensuite des extrémités : une somme
|
||||
négative fait avancer le pointeur gauche, une somme positive fait reculer
|
||||
le droit. Pour deux montants opposés, on compte leurs multiplicités `a` et
|
||||
`b` et on ajoute `a × b`. Pour un groupe de `z` zéros, on ajoute
|
||||
`z(z - 1) / 2` : chaque paire d'indices distincts est comptée une seule fois.
|
||||
|
||||
Le tri coûte `O(n log n)` et chaque pointeur traverse au plus `n` éléments,
|
||||
soit **`O(n log n)`** au total au lieu de `O(n²)`, avec `O(n)` de mémoire.
|
||||
F7 passe de **M = 4 à M = 3** ; l'auxiliaire `compter_paires_triees` a
|
||||
**M = 9**. Les tests comparent le compteur à l'énumération de toutes les
|
||||
paires sur les **97 655 tableaux** de longueur 1 à 7 à montants dans
|
||||
`[-2, 2]`, ainsi que sur une entrée vide. Ils vérifient aussi que les
|
||||
transactions d'origine restent inchangées, notamment en présence de
|
||||
doublons et de plusieurs zéros.
|
||||
|
||||
Reference in New Issue
Block a user