📘 CodingMarble Learn

Techniques de conception d'algorithmes

Pour concevoir un algorithme, on commence par spécifier le problème : les données d'entrée, le résultat attendu et les conditions. Ensuite, on écrit des étapes claires et finies, en langage naturel, en liste, en pseudo-code ou en organigramme. Un gros problème se découpe de haut en bas en parties plus petites (raffinement progressif), ou se construit de bas en haut à partir de petits morceaux déjà testés. Les techniques classiques : la force brute (tout essayer), diviser pour régner (découper, résoudre, combiner ; couper en deux comme dans la recherche dichotomique et le tri fusion), le glouton (prendre à chaque fois le choix qui paraît le meilleur ; rapide mais pas toujours optimal), la programmation dynamique (résoudre chaque petit sous-problème une seule fois et le ranger dans un tableau) et le retour sur trace (faire un choix, puis l'annuler dans une impasse). On choisit la technique et les structures de données (tableaux, piles, arbres binaires) en vérifiant la correction et l'efficacité (complexité en temps).

🎬 L'histoire pas à pas

  1. D'abord, on spécifie le problème. Entrée : 8 nombres. Sortie : le plus grand. Étapes : regarder chaque boîte et garder le plus grand vu jusque-là.
  2. Diviser pour régner : pour trouver un nombre de 1 à 16, on demande où il est par rapport au milieu et on jette une moitié. Seulement 4 questions.
  3. Glouton : on prend toujours la plus grosse pièce qui rentre. C'est rapide, mais pour 6 avec les pièces 1, 3, 4, il donne 3 pièces, pas le meilleur résultat qui est 2.
  4. Programmation dynamique : on résout d'abord les petits montants et on note chaque réponse dans un tableau. Le tableau trouve 6 = 3 + 3.
  5. Retour sur trace : on avance sur un chemin ; dans une impasse, on revient au dernier choix et on essaie une autre voie, jusqu'à la sortie.
  6. À toi : choisis un montant et des pièces. Devine : le glouton donne-t-il le moins de pièces ? Compare avec la PD.

Astuce : fais glisser la scène 3D pour la tourner. Utilise deux doigts pour zoomer.

🤔 Les doutes courants, éclaircis

Pourquoi écrire l'entrée et la sortie avant de coder ?

Si tu ne sais pas exactement ce qui entre et ce qui doit sortir, tu ne peux pas tester si les étapes sont justes.

Comment 4 questions peuvent-elles suffire pour 16 nombres ?

Chaque réponse jette une moitié : 16, 8, 4, 2, 1. Les boîtes grisées montrent la moitié écartée.

Si le glouton peut se tromper, pourquoi l'utiliser ?

Il est très rapide et simple, et pour beaucoup de problèmes (pièces normales, activités qui finissent le plus tôt) il est prouvé correct.

En quoi la PD diffère-t-elle d'un simple « tout essayer » ?

Elle résout chaque petit montant une seule fois et le réutilise, donc le tableau grandit pas à pas au lieu d'explorer toutes les combinaisons.

Le retour sur trace recommence-t-il depuis le début ?

Non. Il recule seulement jusqu'au dernier carrefour qui a encore une voie non essayée, puis il continue.

Comment savoir si le glouton marche pour mes pièces ?

Compare-le avec la PD pour beaucoup de montants. Essaie les pièces 1, 7, 10 en jeu libre.

Spécifier un problème : entrée, sortie et étapes

Avant d'écrire du code, on décrit le problème avec précision. C'est la spécification.

Écrire les étapes

Un algorithme est une liste finie d'étapes claires qui transforme toute entrée valide en la bonne sortie. On peut l'écrire :

Teste-le à la main sur de petites entrées, y compris les cas piégeux (tous égaux, nombres négatifs, un seul nombre).

Conception descendante et ascendante

Descendante (raffinement progressif) : on part de la tâche entière, on la coupe en quelques grandes étapes, puis on recoupe chaque étape jusqu'à ce que chaque partie soit facile à programmer. Exemple : « Faire un bulletin » → lire les notes → calculer les moyennes → donner les appréciations → afficher.

Ascendante : on construit et on teste d'abord de petits morceaux réutilisables (une fonction qui trouve le maximum, une autre qui trie), puis on les assemble en programme complet.

Dans les vrais projets, on mélange les deux : on planifie de haut en bas, on construit et on teste de bas en haut.

Diviser pour régner et la méthode de la dichotomie

Diviser pour régner se fait en trois temps : découper le problème en parties plus petites du même genre, résoudre chaque partie (souvent par récursivité), combiner les réponses.

Les algorithmes gloutons

Un algorithme glouton fait le choix qui paraît le meilleur tout de suite et ne le change jamais.

Mais le glouton n'a pas toujours raison : avec les pièces 1, 3, 4, payer 6 en glouton donne 4 + 1 + 1 (3 pièces), alors que 3 + 3 n'en utilise que 2. Pour faire confiance à une méthode gloutonne, il faut la prouver, ou la comparer à une méthode sûre.

Programmation dynamique et retour sur trace

Programmation dynamique (PD)

Quand les mêmes petits problèmes reviennent, on résout chacun une seule fois et on range la réponse dans un tableau. Nombre minimal de pièces pour le montant a : best[a] = 1 + min(best[a - c]) sur les pièces c ≤ a, en partant de best[0] = 0. Pour les pièces 1, 3, 4 : best = 0, 1, 2, 1, 1, 2, 2. Remplir le tableau du petit au grand est ascendant ; la récursivité avec une mémoire est descendante (mémoïsation). Voir la leçon séparée sur la programmation dynamique.

Retour sur trace

On construit une solution un choix à la fois. Si un choix casse une règle ou mène à une impasse, on l'annule et on essaie l'option suivante. On l'utilise pour les labyrinthes, le sudoku, le problème des N reines et la liste de tous les sous-ensembles. C'est une force brute soignée : elle saute des branches entières qui ne peuvent pas marcher.

Force brute

On essaie toutes les réponses possibles. Toujours correct, mais souvent beaucoup trop lent (2ⁿ sous-ensembles, n! ordres).

Choisir une technique : correction, efficacité et structures de données

TechniqueÀ utiliser quandExempleTemps typique
Force brutel'entrée est minusculeessayer tous les codes à 3 chiffressouvent 2ⁿ ou n!
Diviser pour régnerles parties sont indépendantesrecherche dichotomique, tri fusionO(log n), O(n log n)
Gloutonun bon choix local est prouvé sûrchoix d'activités, rendu de monnaieO(n log n)
Programmation dynamiqueles sous-problèmes se répètentrendu de monnaie, plus courts cheminstaille du tableau
Retour sur tracerecherche avec des règleslabyrinthe, sudokuexponentiel, mais élagué

Justifier son choix

Correction : montrer que l'algorithme s'arrête toujours et donne la bonne sortie (un invariant de boucle, une preuve, ou des tests sur les cas limites). Efficacité : compter les étapes quand n grandit (grand O) et comparer avec les autres méthodes.

Les structures de données aident

Les tableaux pour les tables (PD), les piles pour le retour sur trace (se souvenir d'où revenir), les files pour un parcours niveau par niveau. Un arbre binaire range les éléments de façon que chaque nœud ait au plus deux enfants ; dans un arbre binaire de recherche, les clés plus petites vont à gauche et les plus grandes à droite, donc la recherche coupe le travail en deux à chaque niveau, comme la recherche dichotomique.

À toi de jouer : pièces et jeu de devinettes

  1. Joue au jeu « devine le nombre de 1 à 100 » avec un ami. Demande toujours par rapport au milieu. Peux-tu toujours gagner en 7 questions ? (2⁷ = 128.)
  2. Avec les pièces 1, 3, 4, écris sur papier le tableau de PD pour les montants de 0 à 10. Où le glouton échoue-t-il ?
  3. Ouvre la dernière étape 3D. Essaie les pièces 1, 7, 10 et le montant 14. Le glouton donne 10 + 1 + 1 + 1 + 1 ; la PD donne 7 + 7.
  4. Écris une liste d'étapes pour « trouver le plus petit nombre d'une liste » et teste-la sur 5, 5, 5 et sur un seul nombre.

Formules et définitions clés

Exemples résolus

1. Écris une spécification et une liste d'étapes pour trouver le plus grand de n nombres.

Entrée : n ≥ 1 nombres. Sortie : le plus grand. Étapes : 1. meilleur ← premier nombre. 2. Pour chaque autre nombre x : si x > meilleur, meilleur ← x. 3. Afficher meilleur. Pour 4, 9, 2, 7, 12, 5, 10, 3, la sortie est 12 après 7 comparaisons.

2. Combien de questions la dichotomie demande-t-elle pour trouver un nombre de 1 à 1000 ?

Chaque question coupe l'intervalle en deux : 1000 → 500 → 250 → 125 → 63 → 32 → 16 → 8 → 4 → 2 → 1. Cela fait 10 questions (2¹⁰ = 1024 ≥ 1000).

3. Payer 87 en glouton avec les pièces 50, 20, 10, 5, 2, 1.

50 (reste 37), 20 (17), 10 (7), 5 (2), 2 (0) : 50 + 20 + 10 + 5 + 2 = 5 pièces.

4. Remplis le tableau de PD pour les pièces 1, 3, 4 jusqu'au montant 7.

best[0]=0, [1]=1, [2]=2, [3]=1, [4]=1, [5]=min(best4, best2, best1)+1=2, [6]=min(best5, best3, best2)+1=2, [7]=min(best6, best4, best3)+1=2 (3 + 4).

5. Activités (début-fin) : A 9-11, B 10-12, C 11-13, D 12-14, E 13-15. Choisis le plus d'activités qui ne se chevauchent pas.

Glouton par fin la plus tôt : A (finit à 11), puis C (commence à 11, finit à 13), puis E (commence à 13). 3 activités : A, C, E.

6. Planifie de haut en bas : un programme qui donne à une classe sa moyenne et le meilleur élève.

Niveau 1 : lire les données → calculer → afficher. Niveau 2 : lire les noms et les notes dans des listes ; calculer le total et la moyenne ; trouver la note maximale et son nom ; afficher les deux. Chaque morceau est ensuite programmé et testé de bas en haut.

Erreurs fréquentes

Quiz d'entraînement

1. La spécification d'un problème doit indiquer :
2. La recherche dichotomique sur 16 éléments triés demande au plus environ :
3. Quelle technique prend toujours le choix qui paraît le meilleur tout de suite ?
4. La programmation dynamique marche bien quand :
5. Dans un labyrinthe, revenir au dernier carrefour après une impasse, c'est :

Entraînement : réponds toi-même

Écris ou choisis ta réponse, puis appuie sur Vérifier. Prends un indice si tu bloques ; la solution complète s'affiche après ta réponse.

Questions fréquentes

Quelles sont les principales techniques de conception d'algorithmes ?

La force brute, diviser pour régner, le glouton, la programmation dynamique et le retour sur trace, choisies après avoir spécifié l'entrée et la sortie.

Quelle est la différence entre glouton et programmation dynamique ?

Le glouton fait un seul choix qui paraît le meilleur à chaque étape et ne revient jamais en arrière. La PD examine tous les choix pour les petits sous-problèmes et mémorise les meilleures réponses, donc elle trouve le vrai optimum quand les sous-problèmes se chevauchent.

Quelle est la différence entre conception descendante et ascendante ?

La descendante découpe la tâche entière en étapes plus petites ; l'ascendante construit et teste d'abord de petites parties puis les assemble. La plupart des programmes utilisent les deux.

Où c'est enseigné

PolandSzkoła podstawowa, klasa VIIUnderstanding, analysing and solving problems
PolandSzkoła podstawowa, klasa VIIIUnderstanding, analysing and solving problems
PolandLiceum ogólnokształcące, klasa IUnderstanding, analysing and solving problems
China高三Electives (选修)

À voir d'abord

À voir ensuite

Leçons liées

Toutes les leçons de Computer Science