Pourquoi couper un problème en deux permet-il de le résoudre beaucoup plus vite ?
Le coût du tri fusion vérifie C(n) = 2C(n/2) + n et C(1) = 0. Pour n = 2^k, une récurrence donne C(n) = n log₂ n : 1 024 éléments demandent environ 10 240 opérations au lieu des 523 776 comparaisons du tri par sélection.
Grand oral session 2027 : exposé de 10 minutes debout, puis 10 minutes d'échange, sans calculatrice. Plan prévu pour 9,5 min.
Pourquoi cette question : un modèle d'introduction
Le jury attend que vous expliquiez pourquoi vous avez choisi la question. Inspirez-vous de ce modèle, mais racontez votre propre parcours.
J'ai été frappé en NSI par l'idée du tri fusion : au lieu de trier une liste, on trie deux listes deux fois plus petites, puis on les fusionne. Cela semblait reporter le problème plutôt que le résoudre. Pourtant, ce tri est bien plus rapide. Je voulais comprendre pourquoi, et la réponse est une suite définie par récurrence que l'on peut résoudre exactement.
L'enjeu et les notions du programme
Traduire un algorithme récursif en une relation de récurrence, la résoudre et la démontrer par récurrence.
Mathématiques
- Suites définies par récurrence (première)
- Raisonnement par récurrence (terminale)
- Logarithme en base 2, puissances (terminale)
Numérique et sciences informatiques
- Méthode « diviser pour régner » (terminale)
- Récursivité, tri fusion (terminale)
Le plan de l'exposé en 9,5 min
1. Introduction
1 minLa méthode « diviser pour régner » découpe un problème en sous-problèmes plus petits, les résout récursivement, puis combine les résultats. Problématique : comment calculer le coût d'une telle méthode, et pourquoi est-il si faible ?
2. Mathématiques : résoudre la récurrence
4 minNotons C(n) le nombre d'opérations pour trier n éléments. Trier deux moitiés coûte 2C (n/2), les fusionner coûte au plus n. D'où C(n)=2C (n/2)+n et C(1)=0.
On pose n=2^(k) et uₖ=C(2^(k)) : uₖ=2uₖ₋₁+2^(k). En divisant par 2^(k) : uₖ/2^(k)=uₖ₋₁/(2^(k-1))+1. La suite vₖ=uₖ/2^(k) est arithmétique de raison 1 et v₀=0, donc vₖ=k et uₖ=k 2^(k).
Conclusion : C(n)=nlog₂ n. Démonstration par récurrence : vrai pour k=0 ; si uₖ₋₁=(k-1)2^(k-1), alors uₖ=2(k-1)2^(k-1)+2^(k)=k 2^(k).
Pour n=1 024=2¹⁰ : C=10 240, contre 1024×1023/2=523 776 pour le tri par sélection, cinquante fois plus.
3. NSI : programmer la fusion
3 minLa fonction fusion parcourt deux listes triées avec deux indices et place à chaque étape le plus petit des deux éléments en tête : au plus n comparaisons. La fonction tri_fusion s'appelle elle-même sur les deux moitiés, avec pour cas de base une liste de longueur 0 ou 1.
Le gain vient de ce que la fusion de deux listes triées est linéaire, alors que trier directement est quadratique. Le prix à payer est une mémoire supplémentaire pour les listes intermédiaires. La même méthode accélère la recherche dichotomique, l'exponentiation rapide ou la multiplication de grands nombres.
4. Conclusion
1,5 minCouper en deux fonctionne parce que les sous-problèmes sont beaucoup moins chers que le problème entier et que la recombinaison est linéaire : la récurrence C(n)=2C(n/2)+n donne nlog₂n. J'ouvre sur les cas où le découpage ne paie pas, quand la recombinaison coûte trop cher.
Ce que j'écris au tableau
Pas de calculatrice ni de support numérique : un calcul clé écrit au tableau rend l'exposé concret et montre la solidité des connaissances.
vₖ=uₖ/2^(k)=vₖ₋₁+1 ⇒ uₖ=k 2^(k) ⇒ C(n)=nlog₂n
Conclusion : la réponse à la question
Le tri fusion se résume à une suite récurrente que l'on résout en la divisant par 2^(k) : son coût est nlog₂ n. Diviser pour régner transforme un coût quadratique en un coût presque linéaire.
Les questions probables du jury
Pendant les 10 minutesd'échange, le jury vous fait préciser et approfondir, sur tout le programme de vos spécialités en lien avec la question.
Calculez C(8) avec la récurrence.
C(2)=2, C(4)=2×2+4=8, C(8)=2×8+8=24=8×3.
Pourquoi la fusion coûte-t-elle au plus n comparaisons ?
Chaque comparaison place un élément dans le résultat ; il y en a n à placer.
Que se passe-t-il si n n'est pas une puissance de 2 ?
On coupe en deux parties de tailles voisines ; le coût reste de l'ordre de n log₂ n.
Pourquoi diviser par 2^k pour résoudre la récurrence ?
Cela transforme la relation en une suite arithmétique, dont on connaît le terme général.
Citez un autre algorithme « diviser pour régner ».
La recherche dichotomique : C(n) = C(n/2) + 1, d'où un coût en log₂ n.
Les pièges qui coûtent des points
- Oublier le coût de la fusion dans la récurrence.
- Confondre log₂ n niveaux et n niveaux.
- Présenter la formule sans la démontrer.
Revoir les notions
Autres questions : algorithmes et complexité
- Pourquoi trier un million de nombres peut-il prendre dix minutes ou un centième de seconde selon l'algorithme ?
- Peut-on inventer un algorithme de tri encore plus rapide, ou existe-t-il une limite infranchissable ?
- Un ordinateur mille fois plus rapide permet-il de résoudre des problèmes mille fois plus grands ?
- Rendre la monnaie avec le moins de pièces possible : faut-il toujours prendre la plus grosse pièce ?
Préparer l'oral, pas seulement le contenu
Gestion des 20 minutes de préparation, usage du tableau, posture debout, réponses au jury : la méthode complète, conforme aux règles de la session 2027.
Méthode : traiter une question de Grand oral →