Problème — Fusion de listes triées
Application directe du cours · niveau 2 · NSI (terminale), chapitre 6 — Diviser pour régner
É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.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.