NSI (terminale) · Chapitre 6 · Application directe du cours
Problème — Fusion de listes triées
Diviser pour régner · niveau 2
Énoncé
Problème — Fusion de listes triées.
On dispose de listes déjà triées. Construire une unique liste triée contenant tous leurs éléments, en réutilisant la fusion du tri fusion.
Corrigé
on fusionne les listes deux par deux de façon arborescente, exactement comme dans le tri fusion, ce qui est plus efficace que de fusionner les listes une à une.
def fusion(a, b):
res, 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
res.extend(a[i:]); res.extend(b[j:])
return res
def fusion_k_listes(listes):
if len(listes) == 0:
return []
if len(listes) == 1:
return listes[0]
m = len(listes) // 2
gauche = fusion_k_listes(listes[:m]) # diviser
droite = fusion_k_listes(listes[m:])
return fusion(gauche, droite) # combiner
En notant le nombre total d'éléments, cette approche s'exécute en , contre pour une fusion séquentielle naïve.
100 % 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.