NSI (terminale) · Chapitre 6 · Exercice de TD
Compter les inversions avec le tri fusion
Diviser pour régner · niveau 3 (difficile)
Énoncé
Compter les inversions avec le tri fusion.
Une inversion est un couple d'indices avec et . Adapter le tri fusion pour compter le nombre total d'inversions en .
Corrigé
lors de la fusion, lorsqu'un élément de la moitié droite est recopié avant des éléments restants de la moitié gauche, ceux-ci forment autant d'inversions.
def fusion_compte(a, b):
res, inv = [], 0
i, j = 0, 0
while i < len(a) and j < len(b):
if a[i] <= b[j]:
res.append(a[i]); i += 1
else:
res.append(b[j]); j += 1
inv += len(a) - i # tous les a[i:] > b[j]
res.extend(a[i:]); res.extend(b[j:])
return res, inv
def compte_inversions(tab):
if len(tab) <= 1:
return tab, 0
m = len(tab) // 2
g, ig = compte_inversions(tab[:m])
d, idr = compte_inversions(tab[m:])
f, ifu = fusion_compte(g, d)
return f, ig + idr + ifu100 % gratuit
Essaie le suivant avec le tuteur
- L'exercice suivant avec le tuteur, sans compte : il guide pas à pas, sans donner la réponse
- 7 autres exercices corrigés dans ce chapitre
- Les 2 QCM du chapitre, le premier sans compte
- Le podcast et la vidéo du chapitre : 2 minutes d'écoute sans compte
Sans compte : le cours, le premier QCM, 2 minutes de podcast et de vidéo et un exercice avec le tuteur. Pour tout le reste : inscription gratuite en 30 secondes, sans carte bancaire.