Dichotomie et algorithmes gloutons

Rechercher dans un tableau trié par dichotomie, justifier la terminaison et comprendre quand un choix glouton peut échouer à produire un optimum.

Environ 35 minutes

  • Délimiter une zone de recherche dichotomique
  • Justifier invariant et terminaison
  • Comparer coût logarithmique et linéaire
  • Construire et réfuter un algorithme glouton
Sommaire
  1. 1. Exploiter un tableau trié
  2. 2. Justifier correction, arrêt et coût
  3. 3. Choisir localement sans revenir en arrière
  4. 4. Reconnaître les limites du choix local
  5. 5. Annoncer la garantie réellement établie

Peut-on examiner peu de valeurs et pourtant justifier une décision ?

Deux stratégies réduisent le travail de façons différentes. La dichotomie utilise l’ordre d’un tableau pour éliminer des zones entières sans les parcourir. Une stratégie gloutonne effectue un choix local jugé avantageux puis poursuit sans revenir dessus. La première repose sur une propriété précise des données ; la seconde doit être évaluée selon le problème. Nous apprendrons à expliquer les conditions de réussite et à construire un contre-exemple lorsqu’une promesse d’optimalité est trop forte.

1. Exploiter un tableau trié

La recherche dichotomique exige un tableau trié selon l’ordre utilisé pour comparer les valeurs. On maintient une zone possible, délimitée ici par deux indices inclusifs g et d. Au départ, g vaut 0 et d vaut n − 1. Si g ≤ d, on choisit le milieu entier m = (g + d) // 2. On compare la valeur t[m] à la cible x. Une égalité termine la recherche ; sinon, l’ordre permet d’éliminer le milieu et tout un côté.

Si t[m] < x, toutes les valeurs situées avant ou au milieu sont trop petites : on affecte m + 1 à g. Si t[m] > x, les valeurs au milieu et après sont trop grandes : on affecte m − 1 à d. Les deux décalages excluent la case déjà examinée. On poursuit tant que la zone n’est pas vide. Si g dépasse d sans égalité, on conclut à l’absence. Dans notre convention, une recherche d’indice renvoie −1 pour cette absence.

Chaque comparaison élimine une partie de la zone possible ; les indices restent ceux du tableau initial.

Exemple résolu

Recherche 23 dans [2, 5, 8, 12, 16, 23, 31, 40, 51] en utilisant les bornes inclusives.

  1. Étape 1 : Au départ, g = 0 et d = 8. Le milieu m = 4 contient 16. Comme 16 < 23, on fixe g = 5 et on conserve les indices de 5 à 8.
  2. Étape 2 : Le nouveau milieu est (5 + 8) // 2 = 6. Sa valeur 31 dépasse 23 ; on fixe d = 5.
  3. Étape 3 : La zone comporte seulement l’indice 5. Le milieu vaut 5 et t[5] = 23 : la recherche s’arrête.

Résultat : La valeur est présente à l’indice 5 après trois examens d’une valeur médiane. Les indices utilisés dans le calcul sont ceux du tableau initial.

Piège à éviter : Conserver m lui-même après un échec peut empêcher la zone de diminuer, notamment lorsqu’elle ne contient plus qu’une case.

Le tableau vide se traite naturellement : n = 0 donne g = 0 et d = −1, donc la boucle ne démarre pas. Avec des valeurs répétées, cette version peut renvoyer n’importe quelle occurrence rencontrée ; elle ne garantit pas la première. La demande doit le préciser. Si le tableau n’est pas trié, les éliminations ne sont plus justifiées. Un résultat correct obtenu par hasard sur une entrée désordonnée ne valide pas l’algorithme dans ce cas.

À toi d'essayer

Sur [1, 3, 3, 3, 7], le premier milieu est l’indice 2. Si la cible vaut 3, quel indice renvoie cette recherche ? Est-ce la première occurrence ? Que faut-il changer pour demander une autre garantie ?

Voir la réponse

La recherche renvoie 2 dès l’égalité. La première occurrence est pourtant à l’indice 1. Il faut spécifier une recherche de première occurrence et modifier l’algorithme pour continuer à explorer vers la gauche après une égalité ; la version décrite ne promet pas ce résultat.

2. Justifier correction, arrêt et coût

L’invariant peut s’énoncer ainsi : si la cible est présente et n’a pas été trouvée, au moins une de ses occurrences appartient à la zone de g à d. Au départ, cette zone couvre tout le tableau. Lors d’une comparaison, le tri justifie que la partie éliminée ne contient pas la cible. L’invariant est donc conservé. Si la zone devient vide, il ne reste aucune occurrence possible ; si une égalité est trouvée, l’indice renvoyé désigne effectivement la cible.

Un variant est une quantité entière non négative qui diminue strictement lorsque la boucle continue. Ici, le nombre de cases de la zone, d − g + 1, convient tant que la zone est non vide. Après une comparaison sans égalité, le milieu est exclu et la zone restante est strictement plus petite. La boucle ne peut donc pas continuer indéfiniment. L’invariant explique la validité du résultat ; le variant explique l’arrêt. Ces deux arguments répondent à des questions différentes.

Exemple résolu

Recherche maintenant 24 dans le même tableau. Indique les zones, le résultat et l’évolution de leur taille.

  1. Étape 1 : La zone initiale a 9 cases. Le milieu contient 16 ; la cible est plus grande, donc on garde les indices 5 à 8, soit 4 cases.
  2. Étape 2 : Le milieu d’indice 6 contient 31 ; on garde seulement l’indice 5, soit 1 case.
  3. Étape 3 : Cette dernière case contient 23, inférieur à 24. On fixe g = 6 alors que d = 5 ; la zone devient vide.

Résultat : La recherche renvoie −1. Les tailles successives sont 9, 4, 1 et 0 ; aucun accès n’est effectué après que la zone est devenue vide.

Piège à éviter : Conclure que 24 est présent parce que l’on a trouvé une valeur proche confond recherche exacte et recherche d’une approximation.

La taille de la zone est divisée approximativement par deux à chaque étape. Pour n ≥ 1, au plus floor(log₂ n) + 1 valeurs médianes sont examinées dans cette version. Le coût en examens est logarithmique, contrairement au parcours linéaire. Ce compte ne désigne pas toutes les opérations élémentaires du code : une étape peut contenir un test d’égalité puis une comparaison d’ordre. Si les données doivent d’abord être triées, le coût de ce tri doit aussi être pris en compte.

À toi d'essayer

Un tableau trié contient 1 024 valeurs. Quelle borne donne la formule précédente pour le nombre d’examens de valeurs médianes ? Pourquoi n’est-ce pas un compte de toutes les instructions du programme ?

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

3. Choisir localement sans revenir en arrière

Un algorithme glouton construit progressivement une solution en choisissant à chaque étape ce qui paraît le plus avantageux selon une règle fixée. Il ne revient pas sur les choix déjà effectués. Pour rendre de la monnaie, une règle possible est de prendre la plus grande pièce qui ne dépasse pas la somme restante. Il faut disposer des valeurs de pièces, connaître leur disponibilité et annoncer l’objectif, par exemple minimiser le nombre de pièces. Obtenir la bonne somme ne prouve pas encore que le nombre de pièces est minimal.

Pour le système de pièces 10, 5, 2 et 1, rendre 18 par cette règle donne 10, puis 5, puis 2 et enfin 1. La somme restante décroît de 18 à 8, 3, 1 puis 0. La présence de la pièce 1 et une réserve suffisante permettent d’atteindre toute somme entière positive dans ce modèle. Sans pièce adaptée à un reste, le procédé peut se bloquer. La terminaison et la réussite dépendent donc de conditions explicites, pas du seul nom « glouton ».

Le même total est obtenu avec trois pièces ou deux : le choix local du plus grand montant ne garantit pas l’optimum.

Exemple résolu

Les pièces disponibles en quantité illimitée valent 4, 3 et 1. Compare le rendu glouton de 6 à une autre solution et conclus précisément.

  1. Étape 1 : Le plus grand choix initial est 4 ; il reste 2. Aucune pièce de 3 ne convient, donc le procédé ajoute 1 puis 1.
  2. Étape 2 : La solution gloutonne contient trois pièces. On peut pourtant former 6 avec 3 + 3, soit deux pièces.
  3. Étape 3 : Aucune pièce ne vaut 6 : une seule pièce est impossible. La solution de deux pièces est donc optimale pour cette somme.

Résultat : Le glouton termine et rend la somme exacte, mais il n’est pas optimal sur ce cas. Ce contre-exemple suffit à réfuter une garantie générale pour ce système de pièces.

Piège à éviter : Présenter un contre-exemple comme la preuve que tous les gloutons échouent serait une généralisation inverse tout aussi injustifiée.

4. Reconnaître les limites du choix local

Le problème du sac à dos demande de choisir des objets sous une contrainte de capacité. Dans sa version entière, un objet est choisi en entier ou pas du tout, et chaque objet n’est disponible qu’une fois. Une règle gloutonne peut choisir le meilleur rapport valeur sur masse. Elle peut pourtant échouer : avec une capacité 10, un objet A de masse 6 et de valeur 12 a un rapport 2 ; deux objets B et C de masse 5 et de valeur 9 ont chacun un rapport 1,8. Choisir A laisse une capacité 4 et une valeur 12, tandis que B et C donnent ensemble 18.

Ce contre-exemple concerne des objets indivisibles. Autoriser des fractions d’objets change le problème et peut changer les garanties d’une stratégie. Avant de comparer des solutions, vérifie qu’elles respectent les mêmes contraintes : capacité, disponibilité et divisibilité. Une solution irréalisable n’est pas un meilleur optimum. Pour établir qu’un glouton est optimal dans un problème donné, il faut un argument général ; quelques essais favorables montrent seulement qu’il a réussi sur ces entrées.

À toi d'essayer

Un système contient les pièces 1, k et k + 1 avec k entier au moins égal à 3. Pour rendre 2k, compare le nombre de pièces du glouton à la solution k + k. Quel raisonnement général obtiens-tu ?

Correction détaillée pas à pasDans ce chapitre : 2 corrections détaillées.

5. Annoncer la garantie réellement établie

Au bac : justifier une stratégie algorithmique

  1. Lire les préconditions : ordre du tableau, bornes inclusives ou exclues, objets disponibles et objectif.
  2. Pour une dichotomie, écrire les bornes après chaque comparaison et justifier l’élimination par le tri.
  3. Pour une boucle, distinguer invariant de correction et variant de terminaison.
  4. Pour un glouton, chercher une solution réalisable meilleure avant d’annoncer l’optimalité. Ces acquis préparent la poursuite de NSI en terminale.
Attention :

Erreurs fréquentes : appliquer la dichotomie sans tri ; conserver le milieu après un échec ; confondre occurrence quelconque et première occurrence ; compter des comparaisons sans convention ; croire qu’un choix local avantageux suffit à garantir la meilleure solution globale.

Vocabulaire

Dichotomie :
Recherche qui réduit une zone ordonnée à partir d’une comparaison médiane.
Variant :
Quantité entière non négative qui diminue strictement au fil d’une boucle qui continue.
Optimum :
Meilleure valeur possible de l’objectif parmi les solutions admissibles.
Contre-exemple :
Cas qui contredit une affirmation générale.

Bilan

QuestionRepère
DichotomieRéduction justifiée par l’ordre.
GloutonConstruction par choix locaux successifs.
GarantieCorrection, terminaison et optimalité se démontrent séparément.

Retrouve S’entraîner à l’adresse /exercices. Compare une recherche présente et une recherche absente, puis essaie de réfuter une stratégie gloutonne sur un petit cas vérifiable.

À retenir

  • La dichotomie suppose un tableau trié.
  • Les bornes inclusives se mettent à jour avec m + 1 ou m − 1.
  • La taille de la zone constitue un variant de terminaison.
  • Le nombre d’examens médians est logarithmique.
  • Un glouton correct et terminant n’est pas nécessairement optimal.

Fiche de révision

Dans une recherche exacte

conserver une occurrence possible ou conclure à une zone vide.

Dans un rendu de monnaie

distinguer somme correcte et nombre minimal de pièces.

Pour réfuter une garantie universelle, fournir un seul cas admissible et une meilleure solution réalisable.

Et maintenant ?

Tu as lu le cours. L’étape suivante tient en une action.

Relis le coursLes exercices de ce chapitre arrivent bientôt.

Prolonge l’expérience !

Continue à explorer ce chapitre à travers de nouvelles activités, des défis et des expériences interactives. Avec Premium, l’apprentissage continue !

Ici, tu débloques aussi 2 corrections détaillées.

Parent ? Suivez les progrès de votre enfant.

Tous les cours de NSI