Adloun

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

Faire l'exercice suivant avec le tuteur

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.

Le cours du chapitre · Tous les exercices du chapitre

Exercice suivant avec le tuteur →