<?xml version="1.0" encoding="UTF-8"?>
<quiz>
<question type="category">
  <category>
    <text>$course$/QCM de NSI/Première/Algorithmes gloutons</text>
  </category>
  <info format="html">
    <text><![CDATA[<p>Principe des algorithmes gloutons, notion de choix<br/>
localement optimal, exemples classiques (rendu de<br/>
monnaie, sac à dos fractionnaire, sélection<br/>
d'activités), cas où l'algorithme glouton donne<br/>
l'optimum, et contre-exemples qui montrent ses<br/>
limites.</p>]]></text>
  </info>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q01 : Définition d'un algorithme glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel est le principe d'un <strong>algorithme glouton</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un algorithme glouton est rapide et simple à<br/>
écrire, mais il ne garantit pas l'optimum sur<br/>
tous les problèmes. Il faut une propriété<br/>
mathématique appelée <strong>propriété de choix<br/>
glouton</strong> pour qu'il fonctionne effectivement.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il choisit toujours au hasard parmi les options disponibles</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un algorithme glouton est <strong>déterministe</strong> : à<br/>
chaque étape, il applique un critère précis<br/>
(« le plus grand », « le plus court », etc.)<br/>
plutôt qu'un tirage aléatoire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il essaie chaque possibilité, abandonne quand la solution échoue, puis revient en arrière pour explorer une autre voie</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette description correspond à la stratégie de<br/>
<strong>retour sur trace</strong>. Un algorithme glouton, au<br/>
contraire, ne revient jamais sur ses choix, et<br/>
c'est précisément ce qui le caractérise.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>À chaque étape, il fait le choix qui semble localement le meilleur, sans jamais revenir en arrière</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est exactement cela : un algorithme glouton<br/>
prend une décision irrévocable à chaque étape,<br/>
en espérant que la succession des choix locaux<br/>
mène à un optimum global.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il essaie toutes les solutions possibles, puis garde la meilleure</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette description correspond à la <strong>recherche<br/>
exhaustive</strong>, et non à la stratégie gloutonne.<br/>
Un algorithme glouton ne teste qu'une seule<br/>
solution, en construisant son choix étape par<br/>
étape.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q02 : Exemple classique</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Lequel des problèmes suivants est résolu<br/>
naturellement par un algorithme glouton, dans le<br/>
système monétaire de l'euro ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le rendu de monnaie est l'exemple emblématique<br/>
des algorithmes gloutons enseignés en classe. Il<br/>
fonctionne bien pour le système euro, mais peut<br/>
échouer pour d'autres systèmes monétaires, comme<br/>
le montre la question suivante.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Calculer la racine carrée d'un nombre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le calcul d'une racine carrée n'est pas un<br/>
problème d'optimisation : on cherche une<br/>
valeur, pas le meilleur choix parmi<br/>
plusieurs.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Trier une liste d'entiers</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le tri n'est pas un problème d'optimisation<br/>
gloutonne classique. Les algorithmes de tri<br/>
étudiés en classe (tri par insertion, tri par<br/>
sélection) ne sont pas considérés comme des<br/>
algorithmes gloutons.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Le rendu de monnaie, qui consiste à donner le minimum de pièces pour atteindre un montant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>À chaque étape, on prend la plus grande pièce<br/>
qui tient encore dans le reste à rendre. Avec<br/>
le système euro, cette stratégie donne bien le<br/>
nombre minimum de pièces.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Vérifier si une chaîne de caractères est un palindrome</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Tester si une chaîne est un palindrome relève<br/>
d'un problème de comparaison, pas<br/>
d'optimisation. Aucun choix successif n'est<br/>
fait.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q03 : Contre-exemple du rendu de monnaie</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Avec le système hypothétique de pièces<br/>
\{1, 3, 4\}, on veut rendre 6. Que donne<br/>
l'algorithme glouton qui prend la plus grande<br/>
pièce possible à chaque étape ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cet exemple illustre la limite des algorithmes<br/>
gloutons : ils ne garantissent pas l'optimum sur<br/>
tous les systèmes monétaires. Le système euro<br/>
est conçu de telle sorte que la stratégie<br/>
gloutonne donne toujours le minimum de pièces,<br/>
mais ce n'est pas une propriété universelle.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>L'algorithme glouton ne termine pas</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un algorithme glouton termine toujours en un<br/>
nombre fini d'étapes, car le reste à rendre<br/>
diminue strictement à chaque étape jusqu'à<br/>
atteindre zéro.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>4 + 1 + 1 = 6, soit trois pièces</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme glouton commence par prendre la<br/>
pièce de 4, puis deux pièces de 1, ce qui<br/>
fait trois pièces au total. Or, l'optimum<br/>
réel est 3 + 3 = 6, soit deux pièces<br/>
seulement. L'algorithme glouton n'a donc pas<br/>
trouvé la meilleure solution.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>3 + 3 = 6, soit deux pièces</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est bien la solution <strong>optimale</strong>, mais<br/>
l'algorithme glouton naïf ne la trouve pas.<br/>
Il commence par prendre la plus grande pièce<br/>
qui tient (la pièce de 4) plutôt que de<br/>
chercher une combinaison plus astucieuse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>1 + 1 + 1 + 1 + 1 + 1 = 6, soit six pièces</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un algorithme glouton ne prend pas<br/>
systématiquement la plus petite pièce, mais la<br/>
plus grande qui tient encore dans le reste à<br/>
rendre.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q04 : Caractéristiques d'un algorithme glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Lequel des énoncés suivants est <strong>vrai</strong> pour les<br/>
algorithmes gloutons ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Les principaux avantages des algorithmes<br/>
gloutons sont leur simplicité et leur rapidité.<br/>
Leur principal inconvénient est qu'ils ne sont<br/>
pas toujours optimaux. Ils constituent<br/>
néanmoins un bon premier réflexe à essayer face<br/>
à un problème d'optimisation.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Ils sont en général rapides, mais ne garantissent pas l'optimum global</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est précisément le compromis qui caractérise<br/>
les algorithmes gloutons. Leur rapidité<br/>
(typiquement linéaire ou quasi-linéaire) en<br/>
fait un excellent premier essai, mais il faut<br/>
vérifier ensuite qu'ils donnent l'optimum sur<br/>
le problème considéré.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ils essaient toutes les solutions avant de choisir la meilleure</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est la description de la recherche<br/>
exhaustive. Un algorithme glouton ne construit<br/>
qu'une seule solution, sans énumérer les<br/>
alternatives.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ils ont toujours une complexité exponentielle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est plutôt la recherche exhaustive qui a<br/>
souvent une complexité exponentielle. Les<br/>
algorithmes gloutons sont au contraire connus<br/>
pour leur rapidité.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ils ne fonctionnent que sur les listes triées</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Aucune contrainte n'est imposée sur la nature<br/>
des données d'entrée. De nombreux algorithmes<br/>
gloutons commencent simplement par un tri,<br/>
mais ce n'est pas une exigence générale.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q05 : Critère de choix glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour résoudre un problème d'optimisation par un<br/>
algorithme glouton, quelle question doit-on se<br/>
poser en premier ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une bonne pratique consiste à tester plusieurs<br/>
critères de choix sur des exemples connus, puis,<br/>
lorsque c'est possible, à démontrer<br/>
mathématiquement que le critère retenu mène à<br/>
l'optimum.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Quelle est la taille du problème ?</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La taille du problème influence la<br/>
performance, mais elle n'a aucune incidence<br/>
sur la conception même de l'algorithme<br/>
glouton.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Quel critère local utiliser pour décider à chaque étape ?</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La conception d'un algorithme glouton commence<br/>
toujours par le choix d'un critère local :<br/>
prendre la plus grande pièce, le plus court<br/>
chemin, l'objet de plus grande valeur, et<br/>
ainsi de suite. Ce choix détermine entièrement<br/>
l'algorithme.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Combien de cœurs possède le processeur ?</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le nombre de cœurs concerne le matériel et<br/>
n'a aucun rapport avec la stratégie<br/>
algorithmique adoptée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Quel est le langage de programmation utilisé ?</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le langage de programmation n'a aucune<br/>
influence sur la stratégie algorithmique. Un<br/>
algorithme glouton se conçoit indépendamment<br/>
de Python, Java ou tout autre langage.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q06 : Sélection d'activités</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On dispose de n activités, chacune définie par<br/>
une heure de début et une heure de fin. On<br/>
souhaite sélectionner le plus grand nombre<br/>
possible d'activités sans chevauchement. Quel<br/>
critère glouton donne la solution optimale ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Ce problème, parfois appelé « ordonnancement<br/>
d'intervalles », est un cas d'école où<br/>
l'algorithme glouton trouve l'optimum, à<br/>
condition de choisir le bon critère (« finir tôt »).<br/>
On peut s'en convaincre en testant le<br/>
programme sur de nombreux cas et en le comparant<br/>
à une recherche exhaustive : la démonstration<br/>
formelle relève de l'enseignement supérieur.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir l'activité qui commence le plus tôt</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une activité qui commence tôt peut malgré<br/>
tout durer très longtemps, et donc bloquer le<br/>
planning pour une grande partie de la<br/>
journée. Ce critère est sous-optimal.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir une activité au hasard</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Sans critère défini, l'algorithme n'est plus<br/>
un algorithme glouton, et il n'y a aucune<br/>
garantie d'optimalité.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Choisir l'activité qui finit le plus tôt parmi celles compatibles avec les choix précédents</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Terminer tôt libère le créneau pour de<br/>
nouvelles activités. Ce critère est<br/>
mathématiquement prouvé optimal pour ce<br/>
problème.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir l'activité qui dure le plus longtemps</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une activité longue bloque le créneau pendant<br/>
un temps important, empêchant d'en placer<br/>
d'autres ensuite. Ce critère conduit donc à<br/>
un mauvais choix.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q07 : Pas de retour en arrière</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle propriété distingue un algorithme glouton<br/>
des autres stratégies algorithmiques ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Lorsque l'algorithme glouton donne l'optimum,<br/>
c'est la stratégie la plus économique<br/>
(rapidité, simplicité). Mais dès qu'il faut<br/>
explorer plusieurs alternatives pour ne pas se<br/>
faire piéger, il faut recourir à d'autres<br/>
techniques, étudiées en classe de terminale.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il essaie toutes les solutions possibles avant de répondre</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est la description de la recherche<br/>
exhaustive. L'algorithme glouton fait<br/>
précisément l'inverse : il prend une seule<br/>
décision à chaque étape, sans rien essayer<br/>
d'autre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il ne fonctionne que sur des listes triées</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Aucune contrainte n'est imposée sur la nature<br/>
ou l'ordre des données d'entrée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il fait toujours un choix aléatoire à chaque étape</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un algorithme glouton est <strong>déterministe</strong> :<br/>
il applique un critère précis pour faire son<br/>
choix, et non un tirage aléatoire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il ne revient jamais sur ses décisions : un choix fait reste définitif</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est la caractéristique majeure d'un<br/>
algorithme glouton. Cette absence de retour en<br/>
arrière garantit sa rapidité, mais peut aussi<br/>
l'empêcher de trouver l'optimum lorsqu'un<br/>
mauvais choix initial bloque la suite.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q08 : Complexité d'un algorithme glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelle est typiquement la <strong>complexité</strong> d'un<br/>
algorithme glouton ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette rapidité fait des algorithmes gloutons<br/>
d'excellents premiers candidats. Si l'on doute<br/>
de leur optimalité, on peut les comparer à une<br/>
solution exacte sur de petits exemples, ou<br/>
chercher un contre-exemple.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>O(n!), factorielle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une complexité factorielle correspond à<br/>
l'énumération de toutes les permutations,<br/>
c'est-à-dire à la recherche exhaustive. Un<br/>
algorithme glouton fait précisément<br/>
l'inverse.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Polynomiale, le plus souvent linéaire ou quasi-linéaire, c'est-à-dire O(n) ou O(n \log n)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un algorithme glouton parcourt typiquement<br/>
les éléments une seule fois (complexité<br/>
linéaire), ou les trie au préalable<br/>
(complexité O(n \log n)). Cette rapidité<br/>
est l'un de ses principaux atouts.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Exponentielle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une complexité exponentielle correspond<br/>
plutôt à la recherche exhaustive. Un<br/>
algorithme glouton est au contraire connu<br/>
pour sa rapidité.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Indéfinie selon les cas</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La complexité est parfaitement définie pour<br/>
chaque algorithme glouton concret : elle<br/>
dépend de la structure du problème et du<br/>
critère choisi.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q09 : Algorithme glouton de rendu de monnaie en Python</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Voici le squelette d'un algorithme glouton de<br/>
rendu de monnaie :</p>
<p>`<code><br/>
def rendu(montant, pieces):<br/>
    pieces = sorted(pieces, reverse=True)<br/>
    resultat = []<br/>
    for p in pieces:<br/>
        while montant &gt;= p:<br/>
            resultat.append(p)<br/>
            montant -= p<br/>
    return resultat<br/>
</code></p>
<p>Que fait l'instruction<br/>
pieces = sorted(pieces, reverse=True)` ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette ligne est essentielle. Sans tri préalable,<br/>
l'algorithme parcourrait les pièces dans<br/>
l'ordre de la liste, ce qui ne correspondrait<br/>
plus à la stratégie gloutonne.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle compte le nombre de pièces</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La fonction sorted ne compte pas, elle<br/>
trie. Pour compter les éléments d'une liste,<br/>
on utilise plutôt la fonction native len.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Elle trie les pièces par ordre décroissant, pour traiter d'abord les plus grandes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Ce tri est cohérent avec la stratégie<br/>
gloutonne du rendu de monnaie. À chaque<br/>
étape, l'algorithme prend la plus grande<br/>
pièce qui tient encore dans le reste à<br/>
rendre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle mélange les pièces de manière aléatoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La fonction sorted est strictement<br/>
déterministe : elle trie selon un ordre<br/>
précis, et ne mélange jamais aléatoirement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Elle trie les pièces par ordre croissant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'argument reverse=True inverse l'ordre du<br/>
tri. La liste est donc triée par ordre<br/>
<strong>décroissant</strong>, et non croissant.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q10 : Choix irrévocable</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Une caractéristique fondamentale d'un algorithme<br/>
glouton est que ses choix sont :</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Le mot « glouton » vient de l'image d'un mangeur<br/>
qui prend immédiatement ce qu'il préfère, sans<br/>
planification d'ensemble. Cette image traduit<br/>
bien la nature locale et irrévocable des choix<br/>
effectués par l'algorithme.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Irrévocables : une fois une décision prise, l'algorithme ne revient jamais dessus</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette irrévocabilité rend l'algorithme rapide<br/>
(puisqu'il n'y a aucune exploration à mener),<br/>
mais aussi limité : un mauvais choix initial<br/>
peut bloquer la suite et empêcher d'atteindre<br/>
l'optimum.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Optimaux globalement par construction</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un choix glouton est optimal <strong>localement</strong>,<br/>
mais cette optimalité locale n'entraîne pas<br/>
automatiquement l'optimalité globale. Tout<br/>
l'enjeu est précisément de trouver un<br/>
critère pour lequel cette implication soit<br/>
vraie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aléatoires à chaque appel</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un algorithme glouton est déterministe : il<br/>
applique un critère précis pour faire ses<br/>
choix, et donne donc toujours le même<br/>
résultat sur la même entrée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Réversibles à tout moment</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est précisément l'inverse. Si l'on<br/>
revenait en arrière, ce ne serait plus un<br/>
algorithme glouton mais une recherche<br/>
exhaustive ou un retour sur trace.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q11 : Sac à dos fractionnaire</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour le <strong>sac à dos fractionnaire</strong> (où l'on peut<br/>
couper les objets en fragments), quel critère<br/>
glouton donne l'optimum ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Une remarque importante : l'algorithme glouton<br/>
fonctionne pour le sac à dos<br/>
<strong>fractionnaire</strong>, mais il ne donne pas<br/>
toujours l'optimum pour le sac à dos 0/1 (où<br/>
chaque objet est pris entièrement ou pas du<br/>
tout). Le cas 0/1 relève d'une autre<br/>
technique, étudiée en classe de terminale.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Prendre tous les objets disponibles</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette stratégie ne tient pas compte de la<br/>
contrainte de capacité du sac : on ne peut<br/>
pas dépasser le poids maximal autorisé.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Prendre les objets par ordre décroissant de valeur par unité de poids, c'est-à-dire valeur / poids</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Ce critère maximise le profit pour chaque<br/>
unité de poids placée dans le sac. Comme on<br/>
peut couper les objets en fragments, on<br/>
parvient à exploiter parfaitement la<br/>
capacité du sac.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Prendre les objets par ordre décroissant de poids</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Choisir d'abord les objets les plus lourds<br/>
remplirait rapidement le sac avec des objets<br/>
peu rentables, sans optimiser la valeur<br/>
totale.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Prendre les objets par ordre décroissant de valeur totale</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un objet de grande valeur peut être très<br/>
lourd, au point d'occuper presque tout le<br/>
sac, alors qu'un objet plus modeste pourrait<br/>
offrir plus de valeur par unité de poids.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q12 : Sac à dos 0/1 et algorithme glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour le <strong>sac à dos 0/1</strong>, où chaque objet est<br/>
pris entièrement ou pas du tout, pourquoi<br/>
l'algorithme glouton fondé sur le ratio<br/>
valeur/poids ne donne-t-il pas toujours<br/>
l'optimum ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour le sac à dos 0/1, on utilise une autre<br/>
technique étudiée en classe de terminale.<br/>
L'algorithme glouton donne souvent une bonne<br/>
solution approchée, mais sans garantie<br/>
d'optimalité.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que les objets ne sont pas triés</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>On peut tout à fait trier les objets avant<br/>
le parcours. Le problème vient de la nature<br/>
combinatoire du cas 0/1, et non de<br/>
l'ordre dans lequel on examine les objets.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce qu'on ne peut pas couper les objets, et qu'un choix glouton initial peut occuper tout le sac sans laisser de place à une combinaison meilleure</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est exactement le piège. Avec des objets<br/>
indivisibles, prendre l'objet au meilleur<br/>
ratio peut consommer une part importante de<br/>
la capacité, sans qu'on puisse compléter par<br/>
la combinaison la plus rentable. Une autre<br/>
technique est nécessaire pour garantir<br/>
l'optimum.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que l'algorithme glouton est trop lent</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La rapidité n'est pas en cause : l'algorithme<br/>
glouton est même plus rapide que les autres<br/>
approches. La difficulté tient bien à<br/>
l'optimalité du résultat, pas au temps de<br/>
calcul.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que l'algorithme manque toujours de mémoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La consommation mémoire d'un algorithme<br/>
glouton est très faible. Le problème ne<br/>
vient absolument pas de là.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q13 : Sélection d'activités</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Le problème de la <strong>sélection d'activités</strong><br/>
consiste à planifier le maximum d'activités<br/>
possible dans une journée, sachant qu'on ne peut<br/>
en faire qu'une à la fois. Quelle stratégie<br/>
gloutonne donne l'optimum ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cet exemple est emblématique : une stratégie<br/>
locale très simple (« finir tôt ») donne le<br/>
résultat optimal, sans recourir à un retour sur<br/>
trace ni à un examen exhaustif des<br/>
possibilités.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Choisir à chaque étape l'activité dont l'heure de fin est la plus précoce parmi celles encore compatibles</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Ce critère, qui consiste à finir tôt pour<br/>
libérer le créneau au plus vite, donne<br/>
l'optimum. On peut le constater<br/>
expérimentalement sur de nombreux exemples :<br/>
la démonstration formelle relève de<br/>
l'enseignement supérieur.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir l'activité dont l'heure de début est la plus précoce</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une activité commençant tôt peut très bien<br/>
durer toute la journée, et donc bloquer<br/>
tout le planning. Ce critère est<br/>
sous-optimal.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir une activité au hasard</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Tirer au hasard ne respecte pas la<br/>
définition d'un algorithme glouton, qui doit<br/>
appliquer un critère déterministe à chaque<br/>
étape.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir à chaque étape l'activité la plus courte</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Ce critère paraît intuitif, mais il est<br/>
sous-optimal. On peut facilement construire<br/>
un contre-exemple où une courte activité<br/>
chevauche deux longues activités, qu'elle<br/>
empêche alors de sélectionner.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q14 : Sac à dos fractionnaire</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Dans le <strong>sac à dos fractionnaire</strong> (où l'on<br/>
peut prendre une fraction d'un objet), quel<br/>
critère glouton donne l'optimum ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>La différence avec le <strong>sac à dos 0/1</strong><br/>
(objets indivisibles) est essentielle. Pour le<br/>
cas 0/1, l'algorithme glouton ne donne plus<br/>
l'optimum : c'est l'un des pièges classiques<br/>
qui montrent les limites de cette approche.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Prendre les objets les plus lourds d'abord</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Ce critère est l'opposé de ce qui est<br/>
recherché : il sature rapidement le sac<br/>
avec des objets encombrants, sans en tirer<br/>
le meilleur parti.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Prendre les objets par ordre décroissant de ratio valeur/poids, puis remplir le reste de la capacité avec une fraction de l'objet suivant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Ce critère maximise la valeur obtenue par<br/>
unité de poids. Pour la version<br/>
fractionnaire, il donne l'optimum exact.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Prendre les objets dans l'ordre alphabétique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'ordre alphabétique n'a aucun rapport avec<br/>
le poids ni avec la valeur. Aucune raison<br/>
ne justifie cette stratégie.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Prendre les objets par ordre décroissant de valeur</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un objet très précieux mais encombrant peut<br/>
se révéler moins intéressant qu'un objet<br/>
plus modeste mais beaucoup plus léger. La<br/>
valeur seule ne suffit pas comme critère.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q15 : Trace du rendu de monnaie</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Avec la stratégie gloutonne (« prendre la plus<br/>
grande pièce ne dépassant pas le reste à<br/>
rendre ») et les pièces \{1, 2, 5, 10\}, quel<br/>
est le rendu pour la valeur 18 ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Avec ce système monétaire, l'algorithme glouton<br/>
donne bien l'optimum. Mais ce n'est pas<br/>
toujours le cas. Avec le système \{1, 3, 4\}<br/>
pour rendre 6, l'algorithme glouton donne<br/>
4 + 1 + 1, soit trois pièces, alors que<br/>
l'optimum est 3 + 3, soit deux pièces.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>10 + 5 + 2 + 1 = 18, soit quatre pièces</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le déroulé est le suivant : 18 = 10 + 8,<br/>
puis 8 = 5 + 3, puis 3 = 2 + 1, soit<br/>
quatre pièces au total. C'est aussi<br/>
l'optimum pour ce système monétaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>5 + 5 + 5 + 2 + 1 = 18, soit cinq pièces</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme glouton ne prend pas plusieurs<br/>
pièces de 5 alors qu'une pièce de 10 est<br/>
disponible. Il choisit toujours la plus<br/>
grande pièce qui tient encore dans le reste<br/>
à rendre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>La pièce de 1 répétée dix-huit fois</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'algorithme glouton choisit la <strong>plus<br/>
grande</strong> pièce possible à chaque étape, et<br/>
non la plus petite. Cette solution serait<br/>
la pire possible.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>10 + 10 = 20</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette somme dépasse 18. L'algorithme<br/>
glouton ne choisit jamais une pièce qui<br/>
excéderait le reste à rendre.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q16 : Propriété de choix glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour qu'un algorithme glouton donne l'optimum<br/>
global, le problème doit posséder la <strong>propriété<br/>
de choix glouton</strong>. Que signifie-t-elle ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette propriété, combinée à la <strong>sous-structure<br/>
optimale</strong> (la solution optimale globale<br/>
contient les solutions optimales des<br/>
sous-problèmes), garantit que l'algorithme<br/>
glouton fonctionne.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il existe un choix local optimal qui peut être étendu en une solution globalement optimale</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Autrement dit, faire le « bon » choix local<br/>
n'empêche jamais d'atteindre l'optimum<br/>
global. Démontrer cette propriété est<br/>
essentiel pour valider un algorithme<br/>
glouton.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Tous les choix locaux mènent à l'optimum global</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Si tous les choix menaient à l'optimum,<br/>
n'importe quel algorithme fonctionnerait, ce<br/>
qui n'est évidemment pas le cas. La<br/>
propriété est plus subtile : il faut qu'<strong>au<br/>
moins un</strong> choix local optimal soit<br/>
extensible à une solution globalement<br/>
optimale.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Le problème a une solution unique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>L'unicité de la solution n'a aucun rapport<br/>
avec la propriété de choix glouton. Un<br/>
problème peut avoir plusieurs solutions<br/>
optimales et posséder la propriété, ou<br/>
inversement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>L'algorithme termine en un nombre fini d'étapes</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La terminaison est une propriété de<br/>
l'algorithme, pas du problème. Elle ne suffit<br/>
pas à garantir l'optimalité du résultat.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q17 : Tri par critère personnalisé</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pour trier en Python une liste d'objets par leur<br/>
ratio valeur / poids décroissant (par exemple<br/>
en préparation d'un sac à dos fractionnaire),<br/>
quelle écriture utilise-t-on ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette construction est très courante en Python<br/>
pour les algorithmes gloutons : on commence par<br/>
trier les éléments selon le critère retenu,<br/>
puis on les parcourt linéairement pour<br/>
construire la solution.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>objets.sort(key=lambda o: o.valeur / o.poids, reverse=True)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le paramètre key indique la fonction<br/>
servant de clé de comparaison, et<br/>
reverse=True inverse l'ordre pour obtenir<br/>
un tri décroissant.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>objets.sort()</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Sans argument, la méthode sort trie selon<br/>
l'ordre naturel, qui ne correspond pas au<br/>
ratio recherché.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>objets = max(objets)</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La fonction max ne trie pas, elle renvoie<br/>
uniquement l'élément le plus grand.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>objets.sort(by='ratio')</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le paramètre by n'existe pas pour la<br/>
méthode sort en Python. Cette syntaxe<br/>
ressemble plutôt à celle de la<br/>
bibliothèque pandas ou du langage SQL.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q18 : Méthode pour concevoir un algorithme glouton</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quelles étapes sont conseillées pour concevoir<br/>
un algorithme glouton sur un nouveau problème ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Cette méthode est aussi celle des chercheurs en<br/>
algorithmique. Trouver un contre-exemple est<br/>
souvent rapide et suffit à invalider un mauvais<br/>
critère ; la démonstration formelle de<br/>
l'optimalité, lorsqu'elle est possible, relève<br/>
de l'enseignement supérieur.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Choisir le premier critère qui paraît simple, sans le tester</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La simplicité d'un critère ne garantit pas<br/>
son optimalité. Il est indispensable de le<br/>
tester sur des exemples et, idéalement, de<br/>
le démontrer.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Coder en Python, lancer en production, et espérer que cela fonctionne</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette approche est dangereuse. Sans<br/>
analyse préalable, on risque de produire<br/>
des résultats erronés sur certains cas, et<br/>
de propager le bug en production.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Demander directement la solution à l'enseignant</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette démarche n'apporte rien sur le plan de<br/>
la formation au raisonnement algorithmique.<br/>
Construire soi-même la solution est<br/>
précisément ce qu'on cherche à apprendre.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>D'abord identifier le critère de choix local, puis tester sur de nombreux exemples (en comparant si possible à une recherche exhaustive), et enfin chercher activement un contre-exemple</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette démarche méthodique commence par le<br/>
critère, vérifie son comportement sur des<br/>
cas concrets, et se termine par la<br/>
recherche d'un contre-exemple éventuel.<br/>
Sans la dernière étape, on dispose d'une<br/>
heuristique sans garantie sur les cas non<br/>
testés.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q19 : Algorithme glouton et recherche exhaustive</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Quel est l'avantage essentiel d'un algorithme<br/>
glouton sur une <strong>recherche exhaustive</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>C'est cette rapidité qui justifie l'usage d'un<br/>
algorithme glouton, même quand il ne donne pas<br/>
l'optimum exact. Sur des données massives,<br/>
c'est souvent la seule approche réalisable.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il garantit toujours l'optimum</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est l'inverse. La recherche exhaustive<br/>
garantit toujours l'optimum (si elle se<br/>
termine), tandis qu'un algorithme glouton<br/>
ne le garantit pas en général.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Il est bien plus rapide : sa complexité est polynomiale plutôt qu'exponentielle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Sur des problèmes de taille moyenne ou<br/>
grande, la différence est colossale. Pour<br/>
n = 30, on dépasse 10⁹ opérations en<br/>
recherche exhaustive, contre quelques<br/>
dizaines à quelques centaines pour un<br/>
algorithme glouton linéaire.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il est plus simple à expliquer en classe</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La simplicité pédagogique est un avantage<br/>
secondaire, mais elle n'est pas l'avantage<br/>
principal d'un algorithme glouton.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Il consomme moins de mémoire</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La consommation mémoire varie selon les<br/>
implémentations et n'est pas l'avantage<br/>
principal mis en avant.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q20 : Algorithme glouton comme approximation</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Lorsque l'algorithme glouton ne donne pas<br/>
l'optimum, peut-on quand même l'utiliser ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Pour le voyageur de commerce, par exemple, un<br/>
algorithme glouton du type « plus proche<br/>
voisin » donne souvent une tournée à environ<br/>
25\% de l'optimum, en temps quadratique.<br/>
C'est un compromis très intéressant en<br/>
pratique.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Oui, comme algorithme d'approximation rapide donnant une solution proche de l'optimum</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Pour de nombreux problèmes difficiles,<br/>
l'algorithme glouton donne une solution en<br/>
temps raisonnable, proche du meilleur<br/>
résultat connu. Ce compromis entre<br/>
rapidité et qualité est très intéressant en<br/>
pratique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Seulement si on retire la contrainte d'optimalité</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette formulation est imprécise. On peut<br/>
utiliser l'algorithme glouton comme<br/>
approximation, c'est-à-dire en acceptant<br/>
une qualité moindre que l'optimum, mais<br/>
sans changer la nature du problème.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Oui, mais seulement avec un ordinateur quantique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Les algorithmes gloutons sont des<br/>
algorithmes classiques qui s'exécutent sur<br/>
des ordinateurs traditionnels. Ils n'ont<br/>
aucun rapport avec l'informatique<br/>
quantique.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Non, jamais</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette position est trop catégorique. Un<br/>
algorithme glouton est très souvent utilisé<br/>
comme <strong>heuristique</strong> ou comme algorithme<br/>
d'approximation rapide, même quand il ne<br/>
garantit pas l'optimum.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q21 : Construire un contre-exemple</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On vous propose un problème et un algorithme<br/>
glouton. Comment démontrer que cet algorithme ne<br/>
donne <strong>pas</strong> toujours l'optimum ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Un conseil utile : pour les problèmes simples,<br/>
essayez de petits exemples « piégés » avec des<br/>
asymétries, des poids très différents, ou des<br/>
bornes serrées. Un contre-exemple émerge<br/>
souvent rapidement.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Vérifier que l'algorithme termine</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La terminaison est une propriété<br/>
nécessaire mais non suffisante pour<br/>
conclure quant à l'optimalité. Un<br/>
algorithme peut terminer rapidement et<br/>
renvoyer une solution sous-optimale.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Démontrer que l'algorithme est lent</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La vitesse de l'algorithme ne dit rien sur<br/>
son optimalité. Un algorithme peut être à<br/>
la fois très rapide et incapable de<br/>
trouver l'optimum.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Trouver un exemple concret où l'algorithme glouton donne une solution strictement moins bonne que l'optimum</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Un seul contre-exemple suffit pour<br/>
invalider un algorithme glouton. C'est la<br/>
méthode classique de réfutation en<br/>
informatique : un cas particulier qui<br/>
contredit l'énoncé général.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Compiler le programme dans plusieurs langages différents</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le langage de programmation utilisé n'a<br/>
aucune influence sur l'optimalité du<br/>
résultat produit par l'algorithme.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q22 : Algorithme glouton et terminaison</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Pourquoi un algorithme glouton <strong>termine-t-il<br/>
toujours</strong> en un nombre fini d'étapes ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>C'est l'argument du <strong>variant</strong> : une<br/>
quantité entière positive qui décroît<br/>
strictement à chaque étape garantit la<br/>
terminaison. Pour un algorithme glouton, le<br/>
variant est typiquement le nombre d'éléments<br/>
candidats restants.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce qu'il utilise une boucle while</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une boucle while peut très bien être<br/>
infinie. La terminaison ne dépend pas du<br/>
type de boucle utilisée, mais de<br/>
l'existence d'un variant qui décroît<br/>
strictement.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que la mémoire de l'ordinateur est limitée</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>La limite de mémoire peut provoquer une<br/>
erreur d'exécution, mais elle ne garantit<br/>
pas la terminaison logique de l'algorithme.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Parce qu'à chaque étape, soit l'algorithme prend un élément qui ne sera plus considéré ensuite, soit il s'arrête</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Le nombre d'éléments candidats décroît<br/>
strictement à chaque étape. Comme c'est un<br/>
entier positif, l'algorithme s'arrête en<br/>
au plus n étapes, où n est le nombre<br/>
d'éléments initiaux.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Parce que tous les algorithmes terminent en informatique</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette affirmation est fausse en général :<br/>
de nombreux algorithmes peuvent ne pas<br/>
terminer (boucle infinie). Un algorithme<br/>
glouton termine pour une raison précise et<br/>
structurelle, pas par principe général.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q23 : Vérifier expérimentalement l'optimalité</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>On a écrit un algorithme glouton pour un<br/>
nouveau problème d'optimisation. Sans pouvoir<br/>
faire de démonstration formelle, comment se<br/>
donner une <strong>bonne confiance</strong> dans le fait<br/>
qu'il donne l'optimum sur les cas pratiques ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Démarche pédagogique en NSI : tester sur des<br/>
cas concrets, comparer à une référence<br/>
(recherche exhaustive ou solution optimale<br/>
connue), et chercher des contre-exemples. La<br/>
démonstration formelle de l'optimalité d'un<br/>
algorithme glouton (par argument d'échange,<br/>
par exemple) relève de l'enseignement<br/>
supérieur et n'est pas exigée au lycée.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Augmenter la taille du problème pour voir<br/>
si cela aide</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : tester de plus grandes tailles ne<br/>
renseigne pas sur l'optimalité, car on n'a<br/>
plus de référence (la recherche exhaustive<br/>
devient impraticable). Pour gagner en<br/>
confiance, il faut au contraire tester sur<br/>
de <strong>petites</strong> tailles, où l'on peut<br/>
comparer à la solution exacte.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Lui faire confiance s'il a été trouvé sur<br/>
Internet</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un algorithme trouvé sur Internet<br/>
n'a aucune garantie d'être optimal pour<br/>
votre variante du problème. Les conditions<br/>
précises (système monétaire, nature des<br/>
objets, etc.) modifient souvent l'optimalité<br/>
d'un critère glouton.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Lancer le programme une seule fois sur un<br/>
exemple et conclure</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Erreur : un seul exemple ne prouve rien.<br/>
C'est précisément le piège du rendu de<br/>
monnaie, qui fonctionne sur le système<br/>
euros mais échoue sur d'autres systèmes<br/>
monétaires.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Comparer ses résultats à ceux d'une recherche<br/>
exhaustive sur de nombreux cas de petite<br/>
taille (où la recherche exhaustive reste<br/>
praticable), et chercher activement des<br/>
contre-exemples</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Bonne réponse : c'est la démarche<br/>
expérimentale standard. La recherche<br/>
exhaustive (par exemple en énumérant tous<br/>
les sous-ensembles possibles) garantit<br/>
l'optimum mais coûte O(2ⁿ), ce qui la<br/>
rend faisable uniquement pour de petits<br/>
n. Si l'algorithme glouton coïncide avec<br/>
la recherche exhaustive sur tous les cas<br/>
testés, on a une bonne confiance pratique<br/>
(sans pour autant disposer d'une preuve<br/>
formelle).</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q24 : Quelle approche essayer en premier ?</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Face à un nouveau problème d'optimisation, quelle<br/>
approche essayer en <strong>premier</strong> ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Démarche conseillée : tester d'abord un<br/>
algorithme glouton simple, vérifier sur des cas<br/>
connus s'il donne bien l'optimum, et, si un<br/>
contre-exemple apparaît, chercher une autre<br/>
stratégie ou se contenter d'une approximation.</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Aucune méthode particulière, en essayant plusieurs idées au hasard</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Une démarche désordonnée ne permet pas de<br/>
progresser méthodiquement vers une<br/>
solution. Il vaut mieux suivre une approche<br/>
structurée comme l'algorithme glouton.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une recherche exhaustive systématique, pour être certain d'obtenir l'optimum</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Tester toutes les combinaisons devient<br/>
rapidement impraticable dès que la taille<br/>
du problème augmente, car le nombre de cas<br/>
croît de manière exponentielle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Un algorithme glouton simple : il est rapide à coder et à tester ; si l'optimalité est démontrée ou empiriquement bonne, on s'arrête là, sinon on cherche une autre approche</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est la démarche pragmatique. Beaucoup de<br/>
problèmes admettent une solution gloutonne<br/>
simple. Inutile de chercher une approche<br/>
compliquée si un algorithme glouton suffit<br/>
à donner l'optimum.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Une approche aléatoire, sans stratégie particulière</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Sans démarche structurée, on ne peut rien<br/>
apprendre du problème, et on perd toute<br/>
garantie sur la qualité de la solution<br/>
obtenue.</p>]]></text>
    </feedback>
  </answer>
</question>

<question type="multichoice">
  <name>
    <text>Algorithmes gloutons — Q25 : Conclusion sur les algorithmes gloutons</text>
  </name>
  <questiontext format="html">
    <text><![CDATA[<p>Lequel des énoncés suivants résume le mieux les<br/>
algorithmes gloutons ?</p>]]></text>
  </questiontext>
  <generalfeedback format="html">
    <text><![CDATA[<p>Maîtriser les algorithmes gloutons, c'est<br/>
savoir reconnaître les problèmes qui s'y<br/>
prêtent (rendu de monnaie sur certains<br/>
systèmes, sac à dos fractionnaire, sélection<br/>
d'activités) et savoir détecter ceux qui<br/>
demandent une autre approche (sac à dos 0/1,<br/>
voyageur de commerce).</p>]]></text>
  </generalfeedback>
  <defaultgrade>1.0</defaultgrade>
  <penalty>0.0</penalty>
  <hidden>0</hidden>
  <single>true</single>
  <shuffleanswers>true</shuffleanswers>
  <answernumbering>abc</answernumbering>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ils sont rapides et fonctionnent toujours</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Cette affirmation est trop optimiste. Les<br/>
algorithmes gloutons sont rapides, mais<br/>
ils ne donnent pas toujours l'optimum sur<br/>
tous les problèmes.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ils sont obsolètes et n'ont plus aucun intérêt aujourd'hui</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Les algorithmes gloutons gardent toute leur<br/>
pertinence, particulièrement lorsque<br/>
l'optimalité est démontrable ou lorsqu'une<br/>
approximation rapide suffit pour<br/>
l'application visée.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="0" format="html">
    <text><![CDATA[<p>Ils utilisent l'intelligence artificielle</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>Les algorithmes gloutons sont des<br/>
algorithmes classiques et déterministes.<br/>
Ils n'ont aucun rapport avec l'apprentissage<br/>
automatique ou l'intelligence<br/>
artificielle.</p>]]></text>
    </feedback>
  </answer>
  <answer fraction="100" format="html">
    <text><![CDATA[<p>Ils sont rapides et simples ; ils donnent l'optimum sur certains problèmes, et constituent souvent une bonne approximation sur d'autres</p>]]></text>
    <feedback format="html">
      <text><![CDATA[<p>C'est exactement leur place dans le paysage<br/>
algorithmique : un outil indispensable, mais<br/>
à utiliser avec discernement, en testant<br/>
systématiquement leur comportement sur des<br/>
exemples avant de leur faire confiance.</p>]]></text>
    </feedback>
  </answer>
</question>

</quiz>
