Exercice 1 sur 8
QCMQuelles sont, dans l’ordre, les trois étapes de la méthode « diviser pour régner » ?

Numérique et sciences informatiques (NSI) · Terminale
22 exercices avec correction détaillée, en 3 séries. Aucune inscription : ta progression reste sur ton appareil.

ULUMINE · Numérique et sciences informatiques (NSI) · Terminale
Feuille d’exercices
Prénom : ……………………………Date : ……………………Score : ……… / 8
Les fonctions dicho, fusion et tri_fusion sont celles du cours.
Exercice 1 — Coche la bonne réponse.
Quelles sont, dans l’ordre, les trois étapes de la méthode « diviser pour régner » ?
Exercice 2 — Coche la bonne réponse.
Que renvoie fusion([1, 4, 9], [2, 3, 10]) ?
Exercice 3
Combien de comparaisons A[i] <= B[j] effectue l’appel fusion([1, 4, 9], [2, 3, 10]) ?
def fusion(A, B):
"""Fusionne deux listes triées en une liste triée."""
R = []
i = 0
j = 0
while i < len(A) and j < len(B):
if A[i] <= B[j]:
R.append(A[i])
i = i + 1
else:
R.append(B[j])
j = j + 1
return R + A[i:] + B[j:]
def tri_fusion(L):
if len(L) <= 1:
return L
m = len(L) // 2
return fusion(tri_fusion(L[:m]), tri_fusion(L[m:]))Écris tes calculs :
Réponse : ………………
Exercice 4
Combien d’appels à dicho sont effectués pour rechercher 40 dans L = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91] avec dicho(L, 40, 0, 9) ?
def dicho(L, x, g, d):
"""Indice de x dans la liste triée L, entre les indices g et d, ou -1."""
if g > d:
return -1
m = (g + d) // 2
if L[m] == x:
return m
if L[m] < x:
return dicho(L, x, m + 1, d)
return dicho(L, x, g, m - 1)Écris tes calculs :
Réponse : ………………
Exercice 5 — Coche « Vrai » ou « Faux ».
Le tri fusion a, dans le pire des cas, un coût de l’ordre de n log₂(n) pour une liste de n éléments.
VraiFaux
Exercice 6
Combien de fois faut-il diviser 1 024 par 2 pour obtenir 1 ?
Écris tes calculs :
Réponse : ………………
Exercice 7 — Complète les trous.
Complète la description du tri fusion.
On la liste en deux moitiés, on trie chacune par un appel , puis on les deux moitiés triées.
Exercice 8
Écris une fonction récursive maximum(L, g, d) qui renvoie le plus grand élément de L entre les indices g et d (inclus), en appliquant la méthode diviser pour régner.
ulumine.com — exercices corrigés gratuits

ULUMINE · Numérique et sciences informatiques (NSI) · Terminale
Corrigé détaillé — pour les parents et les enseignants
Exercice 1
Réponse : Diviser, régner, combiner
On divise le problème, on résout (règne sur) les sous-problèmes récursivement, puis on combine leurs solutions.
Exercice 2
Réponse : [1, 2, 3, 4, 9, 10]
La fusion prend à chaque étape le plus petit des deux premiers éléments restants : 1, 2, 3, 4, 9, puis le 10 restant.
Exercice 3
Réponse : 5
On compare 1/2, 4/2, 4/3, 4/10, 9/10. La liste A est alors épuisée : le 10 est ajouté sans comparaison.
Exercice 4
Réponse : 5
On suit les bornes g et d.
Exercice 5
Réponse : Vrai
Il y a environ log₂(n) niveaux de découpage et chaque niveau demande de l’ordre de n opérations de fusion.
Exercice 6
Réponse : 10
1 024 = 2¹⁰ : il faut 10 divisions par 2. C’est log₂(1 024) = 10, l’ordre de grandeur du nombre d’étapes d’une dichotomie sur 1 024 éléments.
Exercice 7
Réponse : divise · récursif · fusionne
Ce sont les trois étapes : diviser, régner (récursivement), combiner (fusionner).
Exercice 8
Exemple de réponse : Cas de base : si g == d, il n’y a qu’un élément, on renvoie L[g]. Sinon on calcule m = (g + d) // 2, le maximum de la partie gauche (g à m) et celui de la partie droite (m + 1 à d), puis on renvoie le plus grand des deux.
Les trois étapes apparaissent clairement : découpage au milieu, deux appels récursifs, comparaison des résultats.
def maximum(L, g, d):
if g == d:
return L[g]
m = (g + d) // 2
return max(maximum(L, g, m), maximum(L, m + 1, d))Les fonctions dicho, fusion et tri_fusion sont celles du cours.
Quelles sont, dans l’ordre, les trois étapes de la méthode « diviser pour régner » ?
Que renvoie fusion([1, 4, 9], [2, 3, 10]) ?
Combien de comparaisons A[i] <= B[j] effectue l’appel fusion([1, 4, 9], [2, 3, 10]) ?
def fusion(A, B):
"""Fusionne deux listes triées en une liste triée."""
R = []
i = 0
j = 0
while i < len(A) and j < len(B):
if A[i] <= B[j]:
R.append(A[i])
i = i + 1
else:
R.append(B[j])
j = j + 1
return R + A[i:] + B[j:]
def tri_fusion(L):
if len(L) <= 1:
return L
m = len(L) // 2
return fusion(tri_fusion(L[:m]), tri_fusion(L[m:]))Combien d’appels à dicho sont effectués pour rechercher 40 dans L = [2, 5, 8, 12, 16, 23, 38, 56, 72, 91] avec dicho(L, 40, 0, 9) ?
def dicho(L, x, g, d):
"""Indice de x dans la liste triée L, entre les indices g et d, ou -1."""
if g > d:
return -1
m = (g + d) // 2
if L[m] == x:
return m
if L[m] < x:
return dicho(L, x, m + 1, d)
return dicho(L, x, g, m - 1)Le tri fusion a, dans le pire des cas, un coût de l’ordre de n log₂(n) pour une liste de n éléments.
Combien de fois faut-il diviser 1 024 par 2 pour obtenir 1 ?
Complète la description du tri fusion.
Écris une fonction récursive maximum(L, g, d) qui renvoie le plus grand élément de L entre les indices g et d (inclus), en appliquant la méthode diviser pour régner.
Terminale · Numérique et sciences informatiques (NSI)
Fonctions récursives en Python : cas de base, appels récursifs, pile d’appels, terminaison et comparaison avec l’itératif. Cours et exercices de NSI Terminale.
Terminale · Numérique et sciences informatiques (NSI)
Classes, objets, attributs et méthodes en Python : constructeur __init__, self, interface et références. Cours et exercices de programmation objet en NSI Terminale.
Terminale · Numérique et sciences informatiques (NSI)
Interface et implémentation des structures linéaires : listes chaînées, piles (LIFO), files (FIFO) et dictionnaires en Python. Cours et exercices de NSI Terminale.