{
  "chapter": {
    "id": "algorithmes-gloutons",
    "level": "premiere",
    "theme": "Algorithmique",
    "title": "Algorithmes gloutons",
    "description": "Principe des algorithmes gloutons, notion de choix\nlocalement optimal, exemples classiques (rendu de\nmonnaie, sac à dos fractionnaire, sélection\nd'activités), cas où l'algorithme glouton donne\nl'optimum, et contre-exemples qui montrent ses\nlimites.",
    "parties": [
      {
        "id": "principe",
        "title": "Principe et critère de choix"
      },
      {
        "id": "exemples",
        "title": "Exemples : monnaie, créneaux, sac à dos"
      },
      {
        "id": "limites",
        "title": "Limites et contre-exemples"
      }
    ],
    "prerequisites": [],
    "references": []
  },
  "questions": [
    {
      "id": "q01",
      "difficulty": 1,
      "skills": [
        "definition"
      ],
      "title": "Définition d'un algorithme glouton",
      "partie": "principe",
      "statement": "Quel est le principe d'un **algorithme glouton** ?",
      "options": [
        {
          "text": "Il choisit toujours au hasard parmi les options disponibles",
          "correct": false,
          "feedback": "Un algorithme glouton est **déterministe** : à\nchaque étape, il applique un critère précis\n(« le plus grand », « le plus court », etc.)\nplutôt qu'un tirage aléatoire.\n"
        },
        {
          "text": "Il essaie chaque possibilité, abandonne quand la solution échoue, puis revient en arrière pour explorer une autre voie",
          "correct": false,
          "feedback": "Cette description suppose de revenir sur des choix déjà faits pour\nexplorer une autre voie. Un algorithme glouton, au contraire, ne\nrevient jamais sur ses choix, et c'est précisément ce qui le\ncaractérise.\n"
        },
        {
          "text": "À chaque étape, il fait le choix qui semble localement le meilleur, sans jamais revenir en arrière",
          "correct": true,
          "feedback": "C'est exactement cela : un algorithme glouton\nprend une décision irrévocable à chaque étape,\nen espérant que la succession des choix locaux\nmène à un optimum global.\n"
        },
        {
          "text": "Il essaie toutes les solutions possibles, puis garde la meilleure",
          "correct": false,
          "feedback": "Cette description correspond à la **recherche exhaustive**, et non à la stratégie gloutonne.\nUn algorithme glouton ne teste qu'une seule\nsolution, en construisant son choix étape par\nétape.\n"
        }
      ],
      "explanation": "Un algorithme glouton est rapide et simple à écrire, mais il ne\ngarantit pas la meilleure solution sur tous les problèmes : pour\nrendre $6$ avec des pièces de $1$, $3$ et $4$, il donne\n$4 + 1 + 1$ alors que $3 + 3$ suffit."
    },
    {
      "id": "q02",
      "difficulty": 1,
      "skills": [
        "exemple",
        "monnaie"
      ],
      "title": "Exemple classique",
      "partie": "exemples",
      "statement": "Lequel des problèmes suivants est résolu\nnaturellement par un algorithme glouton, dans le\nsystème monétaire de l'euro ?",
      "options": [
        {
          "text": "Calculer la racine carrée d'un nombre",
          "correct": false,
          "feedback": "Le calcul d'une racine carrée n'est pas un\nproblème d'optimisation : on cherche une\nvaleur, pas le meilleur choix parmi\nplusieurs.\n"
        },
        {
          "text": "Trier une liste d'entiers",
          "correct": false,
          "feedback": "Le tri n'est pas un problème d'optimisation\ngloutonne classique. Les algorithmes de tri\nétudiés en classe (tri par insertion, tri par\nsélection) ne sont pas considérés comme des\nalgorithmes gloutons.\n"
        },
        {
          "text": "Le rendu de monnaie (minimum de pièces)",
          "correct": true,
          "feedback": "À chaque étape, on prend la plus grande pièce\nqui tient encore dans le reste à rendre. Avec\nle système euro, cette stratégie donne bien le\nnombre minimum de pièces.\n"
        },
        {
          "text": "Vérifier si une chaîne de caractères est un palindrome",
          "correct": false,
          "feedback": "Tester si une chaîne est un palindrome relève\nd'un problème de comparaison, pas\nd'optimisation. Aucun choix successif n'est\nfait.\n"
        }
      ],
      "explanation": "Le rendu de monnaie est l'exemple emblématique\ndes algorithmes gloutons enseignés en classe. Il\nfonctionne bien pour le système euro, mais peut\néchouer pour d'autres systèmes monétaires, comme\nle montre la question suivante."
    },
    {
      "id": "q03",
      "difficulty": 1,
      "skills": [
        "contre-exemple",
        "monnaie"
      ],
      "title": "Contre-exemple du rendu de monnaie",
      "partie": "limites",
      "statement": "Avec le système hypothétique de pièces\n$\\{1, 3, 4\\}$, on veut rendre $6$. Que donne\nl'algorithme glouton qui prend la plus grande\npièce possible à chaque étape ?",
      "options": [
        {
          "text": "L'algorithme glouton ne termine pas",
          "correct": false,
          "feedback": "Un algorithme glouton termine toujours en un\nnombre fini d'étapes, car le reste à rendre\ndiminue strictement à chaque étape jusqu'à\natteindre zéro.\n"
        },
        {
          "text": "$4 + 1 + 1 = 6$, soit trois pièces",
          "correct": true,
          "feedback": "L'algorithme glouton commence par prendre la\npièce de $4$, puis deux pièces de $1$, ce qui\nfait trois pièces au total. Or, l'optimum\nréel est $3 + 3 = 6$, soit deux pièces\nseulement. L'algorithme glouton n'a donc pas\ntrouvé la meilleure solution.\n"
        },
        {
          "text": "$3 + 3 = 6$, soit deux pièces",
          "correct": false,
          "feedback": "C'est bien la solution **optimale**, mais\nl'algorithme glouton naïf ne la trouve pas.\nIl commence par prendre la plus grande pièce\nqui tient (la pièce de $4$) plutôt que de\nchercher une combinaison plus astucieuse.\n"
        },
        {
          "text": "$1 + 1 + 1 + 1 + 1 + 1 = 6$, soit six pièces",
          "correct": false,
          "feedback": "Un algorithme glouton ne prend pas\nsystématiquement la plus petite pièce, mais la\nplus grande qui tient encore dans le reste à\nrendre.\n"
        }
      ],
      "explanation": "Cet exemple illustre la limite des algorithmes\ngloutons : ils ne garantissent pas l'optimum sur\ntous les systèmes monétaires. Le système euro\nest conçu de telle sorte que la stratégie\ngloutonne donne toujours le minimum de pièces,\nmais ce n'est pas une propriété universelle."
    },
    {
      "id": "q04",
      "difficulty": 1,
      "skills": [
        "proprietes"
      ],
      "title": "Caractéristiques d'un algorithme glouton",
      "partie": "principe",
      "statement": "Lequel des énoncés suivants est **vrai** pour les\nalgorithmes gloutons ?",
      "options": [
        {
          "text": "Ils sont en général rapides, mais pas toujours optimaux",
          "correct": true,
          "feedback": "C'est précisément le compromis qui caractérise\nles algorithmes gloutons. Leur rapidité\n(typiquement linéaire ou quasi-linéaire) en\nfait un excellent premier essai, mais il faut\nvérifier ensuite qu'ils donnent l'optimum sur\nle problème considéré.\n"
        },
        {
          "text": "Ils essaient toutes les solutions avant de choisir la meilleure",
          "correct": false,
          "feedback": "C'est la description de la recherche\nexhaustive. Un algorithme glouton ne construit\nqu'une seule solution, sans énumérer les\nalternatives.\n"
        },
        {
          "text": "Ils ont toujours une complexité exponentielle",
          "correct": false,
          "feedback": "C'est plutôt la recherche exhaustive qui a\nsouvent une complexité exponentielle. Les\nalgorithmes gloutons sont au contraire connus\npour leur rapidité.\n"
        },
        {
          "text": "Ils ne fonctionnent que sur les listes triées",
          "correct": false,
          "feedback": "Aucune contrainte n'est imposée sur la nature\ndes données d'entrée. De nombreux algorithmes\ngloutons commencent simplement par un tri,\nmais ce n'est pas une exigence générale.\n"
        }
      ],
      "explanation": "Les principaux avantages des algorithmes\ngloutons sont leur simplicité et leur rapidité.\nLeur principal inconvénient est qu'ils ne sont\npas toujours optimaux. Ils constituent\nnéanmoins un bon premier réflexe à essayer face\nà un problème d'optimisation."
    },
    {
      "id": "q05",
      "difficulty": 1,
      "skills": [
        "strategie"
      ],
      "title": "Critère de choix glouton",
      "partie": "principe",
      "statement": "Pour résoudre un problème d'optimisation par un\nalgorithme glouton, quelle question doit-on se\nposer en premier ?",
      "options": [
        {
          "text": "Quelle est la taille du problème ?",
          "correct": false,
          "feedback": "La taille du problème influence la\nperformance, mais elle n'a aucune incidence\nsur la conception même de l'algorithme\nglouton.\n"
        },
        {
          "text": "Quel critère local utiliser pour décider à chaque étape ?",
          "correct": true,
          "feedback": "La conception d'un algorithme glouton commence\ntoujours par le choix d'un critère local :\nprendre la plus grande pièce, le plus court\nchemin, l'objet de plus grande valeur, et\nainsi de suite. Ce choix détermine entièrement\nl'algorithme.\n"
        },
        {
          "text": "Combien de cœurs possède le processeur ?",
          "correct": false,
          "feedback": "Le nombre de cœurs concerne le matériel et\nn'a aucun rapport avec la stratégie\nalgorithmique adoptée.\n"
        },
        {
          "text": "Quel est le langage de programmation utilisé ?",
          "correct": false,
          "feedback": "Le langage de programmation n'a aucune\ninfluence sur la stratégie algorithmique. Un\nalgorithme glouton se conçoit indépendamment\nde Python, Java ou tout autre langage.\n"
        }
      ],
      "explanation": "Une bonne pratique consiste à tester plusieurs\ncritères de choix sur des exemples connus, puis,\nlorsque c'est possible, à démontrer\nmathématiquement que le critère retenu mène à\nl'optimum."
    },
    {
      "id": "q07",
      "difficulty": 1,
      "skills": [
        "pas-de-retour"
      ],
      "title": "Pas de retour en arrière",
      "partie": "principe",
      "statement": "Quelle propriété distingue un algorithme glouton\ndes autres stratégies algorithmiques ?",
      "options": [
        {
          "text": "Il essaie toutes les solutions possibles avant de répondre",
          "correct": false,
          "feedback": "C'est la description de la recherche\nexhaustive. L'algorithme glouton fait\nprécisément l'inverse : il prend une seule\ndécision à chaque étape, sans rien essayer\nd'autre.\n"
        },
        {
          "text": "Il ne fonctionne que sur des listes triées",
          "correct": false,
          "feedback": "Aucune contrainte n'est imposée sur la nature\nou l'ordre des données d'entrée.\n"
        },
        {
          "text": "Il fait toujours un choix aléatoire à chaque étape",
          "correct": false,
          "feedback": "Un algorithme glouton est **déterministe** :\nil applique un critère précis pour faire son\nchoix, et non un tirage aléatoire.\n"
        },
        {
          "text": "Il ne revient jamais sur ses décisions : un choix fait reste définitif",
          "correct": true,
          "feedback": "C'est la caractéristique majeure d'un\nalgorithme glouton. Cette absence de retour en\narrière garantit sa rapidité, mais peut aussi\nl'empêcher de trouver l'optimum lorsqu'un\nmauvais choix initial bloque la suite.\n"
        }
      ],
      "explanation": "Lorsque l'algorithme glouton donne l'optimum,\nc'est la stratégie la plus économique\n(rapidité, simplicité). Mais dès qu'il faut\nexplorer plusieurs alternatives pour ne pas se\nfaire piéger, il faut recourir à d'autres\ntechniques, étudiées en classe de terminale."
    },
    {
      "id": "q08",
      "difficulty": 1,
      "skills": [
        "cout"
      ],
      "title": "Coût d'un algorithme glouton",
      "partie": "exemples",
      "statement": "Quel est typiquement le **coût** d'un algorithme glouton ?",
      "options": [
        {
          "text": "Proportionnel au nombre de solutions possibles",
          "correct": false,
          "feedback": "Un coût proportionnel au nombre de solutions possibles correspond à\nl'essai de toutes les solutions, c'est-à-dire à la recherche\nexhaustive. Un algorithme glouton fait précisément l'inverse : il\nconstruit une seule solution.\n"
        },
        {
          "text": "Faible, souvent linéaire",
          "correct": true,
          "feedback": "Un algorithme glouton parcourt typiquement les éléments une seule\nfois (coût linéaire), après les avoir parfois triés selon son\ncritère. Cette rapidité est l'un de ses principaux atouts.\n"
        },
        {
          "text": "Exponentiel",
          "correct": false,
          "feedback": "Un coût exponentiel correspond plutôt à la recherche exhaustive. Un\nalgorithme glouton est au contraire connu pour sa rapidité.\n"
        },
        {
          "text": "Indéfini, selon les cas rencontrés",
          "correct": false,
          "feedback": "Le coût est parfaitement défini pour chaque algorithme glouton\nconcret : il dépend de la structure du problème et du critère\nchoisi.\n"
        }
      ],
      "explanation": "Cette rapidité fait des algorithmes gloutons\nd'excellents premiers candidats. Si l'on doute\nde leur optimalité, on peut les comparer à une\nsolution exacte sur de petits exemples, ou\nchercher un contre-exemple."
    },
    {
      "id": "q09",
      "difficulty": 1,
      "skills": [
        "code"
      ],
      "title": "Algorithme glouton de rendu de monnaie en Python",
      "partie": "principe",
      "statement": "Voici le squelette d'un algorithme glouton de\nrendu de monnaie :\n\n```python\ndef rendu(montant, pieces):\n    pieces = sorted(pieces, reverse=True)\n    resultat = []\n    for p in pieces:\n        while montant >= p:\n            resultat.append(p)\n            montant -= p\n    return resultat\n```\n\nQue fait l'instruction\n`pieces = sorted(pieces, reverse=True)` ?",
      "options": [
        {
          "text": "Elle compte le nombre de pièces",
          "correct": false,
          "feedback": "La fonction `sorted` ne compte pas, elle\ntrie. Pour compter les éléments d'une liste,\non utilise plutôt la fonction native `len`.\n"
        },
        {
          "text": "Elle trie les pièces par ordre décroissant",
          "correct": true,
          "feedback": "Ce tri est cohérent avec la stratégie\ngloutonne du rendu de monnaie. À chaque\nétape, l'algorithme prend la plus grande\npièce qui tient encore dans le reste à\nrendre.\n"
        },
        {
          "text": "Elle mélange les pièces de manière aléatoire",
          "correct": false,
          "feedback": "La fonction `sorted` est strictement\ndéterministe : elle trie selon un ordre\nprécis, et ne mélange jamais aléatoirement.\n"
        },
        {
          "text": "Elle trie les pièces par ordre croissant",
          "correct": false,
          "feedback": "L'argument `reverse=True` inverse l'ordre du\ntri. La liste est donc triée par ordre\n**décroissant**, et non croissant.\n"
        }
      ],
      "explanation": "Cette ligne est essentielle. Sans tri préalable,\nl'algorithme parcourrait les pièces dans\nl'ordre de la liste, ce qui ne correspondrait\nplus à la stratégie gloutonne."
    },
    {
      "id": "q10",
      "difficulty": 1,
      "skills": [
        "vocabulaire"
      ],
      "title": "Choix irrévocable",
      "partie": "principe",
      "statement": "Une caractéristique fondamentale d'un algorithme\nglouton est que ses choix sont :",
      "options": [
        {
          "text": "Irrévocables : aucun retour en arrière",
          "correct": true,
          "feedback": "Cette irrévocabilité rend l'algorithme rapide\n(puisqu'il n'y a aucune exploration à mener),\nmais aussi limité : un mauvais choix initial\npeut bloquer la suite et empêcher d'atteindre\nl'optimum.\n"
        },
        {
          "text": "Toujours optimaux globalement par construction",
          "correct": false,
          "feedback": "Un choix glouton est optimal **localement**,\nmais cette optimalité locale n'entraîne pas\nautomatiquement l'optimalité globale. Tout\nl'enjeu est précisément de trouver un\ncritère pour lequel cette implication soit\nvraie.\n"
        },
        {
          "text": "Aléatoires à chaque appel",
          "correct": false,
          "feedback": "Un algorithme glouton est déterministe : il\napplique un critère précis pour faire ses\nchoix, et donne donc toujours le même\nrésultat sur la même entrée.\n"
        },
        {
          "text": "Réversibles à tout moment",
          "correct": false,
          "feedback": "C'est précisément l'inverse. Si l'on revenait en arrière sur ses\nchoix pour en essayer d'autres, ce ne serait plus un algorithme\nglouton mais une recherche exhaustive.\n"
        }
      ],
      "explanation": "Le mot « glouton » vient de l'image d'un mangeur\nqui prend immédiatement ce qu'il préfère, sans\nplanification d'ensemble. Cette image traduit\nbien la nature locale et irrévocable des choix\neffectués par l'algorithme."
    },
    {
      "id": "q12",
      "difficulty": 2,
      "skills": [
        "contre-exemple-sac"
      ],
      "title": "Sac à dos 0/1 et algorithme glouton",
      "partie": "limites",
      "statement": "Pour le **sac à dos $0/1$**, où chaque objet est\npris entièrement ou pas du tout, pourquoi\nl'algorithme glouton fondé sur le ratio\nvaleur/poids ne donne-t-il pas toujours\nl'optimum ?",
      "options": [
        {
          "text": "Parce que les objets ne sont pas triés",
          "correct": false,
          "feedback": "On peut tout à fait trier les objets avant\nle parcours. Le problème vient de la nature\ncombinatoire du cas $0/1$, et non de\nl'ordre dans lequel on examine les objets.\n"
        },
        {
          "text": "Les objets indivisibles bloquent parfois l'optimum",
          "correct": true,
          "feedback": "C'est exactement le piège. Avec des objets\nindivisibles, prendre l'objet au meilleur\nratio peut consommer une part importante de\nla capacité, sans qu'on puisse compléter par\nla combinaison la plus rentable. Une autre\ntechnique est nécessaire pour garantir\nl'optimum.\n"
        },
        {
          "text": "Parce que l'algorithme glouton est beaucoup trop lent",
          "correct": false,
          "feedback": "La rapidité n'est pas en cause : l'algorithme\nglouton est même plus rapide que les autres\napproches. La difficulté tient bien à\nl'optimalité du résultat, pas au temps de\ncalcul.\n"
        },
        {
          "text": "Parce que l'algorithme manque toujours de mémoire",
          "correct": false,
          "feedback": "La consommation mémoire d'un algorithme\nglouton est très faible. Le problème ne\nvient absolument pas de là.\n"
        }
      ],
      "explanation": "Pour le sac à dos $0/1$, on utilise une autre\ntechnique étudiée en classe de terminale.\nL'algorithme glouton donne souvent une bonne\nsolution approchée, mais sans garantie\nd'optimalité."
    },
    {
      "id": "q15",
      "difficulty": 2,
      "skills": [
        "rendu-monnaie-trace"
      ],
      "title": "Trace du rendu de monnaie",
      "partie": "exemples",
      "statement": "Avec la stratégie gloutonne (« prendre la plus\ngrande pièce ne dépassant pas le reste à\nrendre ») et les pièces $\\{1, 2, 5, 10\\}$, quel\nest le rendu pour la valeur $18$ ?",
      "options": [
        {
          "text": "$10 + 5 + 2 + 1 = 18$, soit quatre pièces",
          "correct": true,
          "feedback": "Le déroulé est le suivant : $18 = 10 + 8$,\npuis $8 = 5 + 3$, puis $3 = 2 + 1$, soit\nquatre pièces au total. C'est aussi\nl'optimum pour ce système monétaire.\n"
        },
        {
          "text": "$5 + 5 + 5 + 2 + 1 = 18$, soit cinq pièces",
          "correct": false,
          "feedback": "L'algorithme glouton ne prend pas plusieurs\npièces de $5$ alors qu'une pièce de $10$ est\ndisponible. Il choisit toujours la plus\ngrande pièce qui tient encore dans le reste\nà rendre.\n"
        },
        {
          "text": "La pièce de $1$ répétée dix-huit fois",
          "correct": false,
          "feedback": "L'algorithme glouton choisit la **plus grande** pièce possible à chaque étape, et\nnon la plus petite. Cette solution serait\nla pire possible.\n"
        },
        {
          "text": "$10 + 10 = 20$",
          "correct": false,
          "feedback": "Cette somme dépasse $18$. L'algorithme\nglouton ne choisit jamais une pièce qui\nexcéderait le reste à rendre.\n"
        }
      ],
      "explanation": "Avec ce système monétaire, l'algorithme glouton\ndonne bien l'optimum. Mais ce n'est pas\ntoujours le cas. Avec le système $\\{1, 3, 4\\}$\npour rendre $6$, l'algorithme glouton donne\n$4 + 1 + 1$, soit trois pièces, alors que\nl'optimum est $3 + 3$, soit deux pièces."
    },
    {
      "id": "q16",
      "difficulty": 2,
      "skills": [
        "selection-creneaux",
        "trace",
        "critere"
      ],
      "title": "Réserver le gymnase pour le plus de clubs",
      "partie": "exemples",
      "statement": "Cinq clubs demandent le gymnase, chacun sur un créneau (heure de\ndébut, heure de fin) : A $(8, 12)$, B $(9, 10)$, C $(10, 11)$,\nD $(11, 13)$ et E $(12, 14)$. Un créneau peut suivre un autre s'il\ncommence à l'heure de fin de celui-ci ou plus tard. L'algorithme\nglouton range les créneaux par heure de fin croissante, puis retient\nchaque créneau qui peut suivre le dernier créneau retenu. Quels\ncréneaux retient-il ?",
      "options": [
        {
          "text": "A et E",
          "correct": false,
          "feedback": "Erreur : ce résultat vient d'un tri par heure de **début**. A, qui\ncommence le plus tôt, occupe le gymnase jusqu'à $12$ et écarte B,\nC et D.\n"
        },
        {
          "text": "B et D",
          "correct": false,
          "feedback": "Erreur : C commence à $10$, exactement quand B finit, il peut donc\nle suivre. En exigeant un début strictement après la fin, on\nécarte C à tort.\n"
        },
        {
          "text": "B, C et D",
          "correct": true,
          "feedback": "Bonne réponse : l'ordre par fin croissante est B, C, A, D, E. On\nretient B (fin $10$), puis C qui commence à $10$ (fin $11$) ; A\ncommence à $8$, trop tôt ; D commence à $11$ (fin $13$) ; E\ncommence à $12$, avant $13$.\n"
        },
        {
          "text": "B, C, D et E",
          "correct": false,
          "feedback": "Erreur : E commence à $12$, alors que D, déjà retenu, finit à $13$.\nLes deux créneaux se chevauchent, E doit être écarté.\n"
        }
      ],
      "explanation": "Choisir à chaque étape le créneau qui finit le plus tôt laisse le\nplus de temps libre pour la suite. Ici, aucun ensemble de quatre\ncréneaux compatibles n'existe : trois clubs est le maximum."
    },
    {
      "id": "q17",
      "difficulty": 2,
      "skills": [
        "code",
        "sort-key"
      ],
      "title": "Tri par critère personnalisé",
      "partie": "principe",
      "statement": "Pour préparer un sac à dos fractionnaire, on veut\ntrier une liste `objets` de dictionnaires de la\nforme `{\"valeur\": 60, \"poids\": 10}` par ratio\nvaleur / poids **décroissant**. On a défini la\nfonction clé :\n```python\ndef ratio(objet):\n    return objet[\"valeur\"] / objet[\"poids\"]\n```\nQuelle écriture renvoie la liste triée voulue ?",
      "options": [
        {
          "text": "`sorted(objets, key=ratio, reverse=True)`",
          "correct": true,
          "feedback": "Le paramètre `key` reçoit la fonction `ratio`\nelle-même (sans parenthèses), que Python\nappelle sur chaque objet pour calculer sa\nclé, et `reverse=True` inverse l'ordre\ncroissant par défaut.\n"
        },
        {
          "text": "`sorted(objets, reverse=True)`",
          "correct": false,
          "feedback": "Sans paramètre `key`, Python compare les\ndictionnaires directement entre eux, ce qui\nn'est pas défini : `TypeError` (`'<' not\nsupported between instances of 'dict' and\n'dict'`).\n"
        },
        {
          "text": "`sorted(objets, key='ratio', reverse=True)`",
          "correct": false,
          "feedback": "Le paramètre `key` attend une **fonction**,\npas son nom entre guillemets : Python tente\nd'appeler la chaîne `'ratio'` sur chaque\nobjet et lève `TypeError` (`'str' object is\nnot callable`).\n"
        },
        {
          "text": "`sorted(objets, key=ratio)`",
          "correct": false,
          "feedback": "Le tri se fait selon le bon critère, mais\ndans l'ordre **croissant** des ratios :\nl'objet le moins rentable arrive en premier.\nIl manque `reverse=True` pour placer en tête\nles objets de plus grand ratio.\n"
        }
      ],
      "explanation": "Dans un algorithme glouton, on commence souvent\npar trier les candidats selon le critère de\nchoix, en passant à `sorted` une fonction clé\nnommée, puis on les parcourt dans cet ordre\npour construire la solution."
    },
    {
      "id": "q18",
      "difficulty": 2,
      "skills": [
        "conception"
      ],
      "title": "Méthode pour concevoir un algorithme glouton",
      "partie": "principe",
      "statement": "Quelles étapes sont conseillées pour concevoir\nun algorithme glouton sur un nouveau problème ?",
      "options": [
        {
          "text": "Choisir le premier critère qui paraît simple, sans le tester",
          "correct": false,
          "feedback": "La simplicité d'un critère ne garantit pas\nson optimalité. Il est indispensable de le\ntester sur des exemples et, idéalement, de\nle démontrer.\n"
        },
        {
          "text": "Coder en Python, lancer en production, et espérer que cela fonctionne",
          "correct": false,
          "feedback": "Cette approche est dangereuse. Sans\nanalyse préalable, on risque de produire\ndes résultats erronés sur certains cas, et\nde propager le bug en production.\n"
        },
        {
          "text": "Demander directement la solution à l'enseignant",
          "correct": false,
          "feedback": "Cette démarche n'apporte rien sur le plan de\nla formation au raisonnement algorithmique.\nConstruire soi-même la solution est\nprécisément ce qu'on cherche à apprendre.\n"
        },
        {
          "text": "Identifier le critère, tester, chercher un contre-exemple",
          "correct": true,
          "feedback": "Cette démarche méthodique commence par le\ncritère, vérifie son comportement sur des\ncas concrets, et se termine par la\nrecherche d'un contre-exemple éventuel.\nSans la dernière étape, on dispose d'une\nheuristique sans garantie sur les cas non\ntestés.\n"
        }
      ],
      "explanation": "Cette méthode est aussi celle des chercheurs en\nalgorithmique. Trouver un contre-exemple est\nsouvent rapide et suffit à invalider un mauvais\ncritère ; la démonstration formelle de\nl'optimalité, lorsqu'elle est possible, relève\nde l'enseignement supérieur."
    },
    {
      "id": "q19",
      "difficulty": 2,
      "skills": [
        "comparaison"
      ],
      "title": "Algorithme glouton et recherche exhaustive",
      "partie": "limites",
      "statement": "Quel est l'avantage essentiel d'un algorithme\nglouton sur une **recherche exhaustive** ?",
      "options": [
        {
          "text": "Il garantit toujours l'optimum",
          "correct": false,
          "feedback": "C'est l'inverse. La recherche exhaustive\ngarantit toujours l'optimum (si elle se\ntermine), tandis qu'un algorithme glouton\nne le garantit pas en général.\n"
        },
        {
          "text": "Il est bien plus rapide",
          "correct": true,
          "feedback": "Sur des problèmes de taille moyenne ou\ngrande, la différence est colossale. Pour\n$n = 30$, on dépasse $10^9$ opérations en\nrecherche exhaustive, contre quelques\ndizaines à quelques centaines pour un\nalgorithme glouton linéaire.\n"
        },
        {
          "text": "Il est plus simple à expliquer en classe",
          "correct": false,
          "feedback": "La simplicité pédagogique est un avantage\nsecondaire, mais elle n'est pas l'avantage\nprincipal d'un algorithme glouton.\n"
        },
        {
          "text": "Il consomme moins de mémoire",
          "correct": false,
          "feedback": "La consommation mémoire varie selon les\nimplémentations et n'est pas l'avantage\nprincipal mis en avant.\n"
        }
      ],
      "explanation": "C'est cette rapidité qui justifie l'usage d'un\nalgorithme glouton, même quand il ne donne pas\nl'optimum exact. Sur des données massives,\nc'est souvent la seule approche réalisable."
    },
    {
      "id": "q20",
      "difficulty": 2,
      "skills": [
        "approximation"
      ],
      "title": "Algorithme glouton comme approximation",
      "partie": "limites",
      "statement": "Lorsque l'algorithme glouton ne donne pas\nl'optimum, peut-on quand même l'utiliser ?",
      "options": [
        {
          "text": "Oui, comme approximation rapide",
          "correct": true,
          "feedback": "Pour de nombreux problèmes difficiles,\nl'algorithme glouton donne une solution en\ntemps raisonnable, proche du meilleur\nrésultat connu. Ce compromis entre\nrapidité et qualité est très intéressant en\npratique.\n"
        },
        {
          "text": "Seulement si on retire la contrainte d'optimalité",
          "correct": false,
          "feedback": "Cette formulation est imprécise. On peut\nutiliser l'algorithme glouton comme\napproximation, c'est-à-dire en acceptant\nune qualité moindre que l'optimum, mais\nsans changer la nature du problème.\n"
        },
        {
          "text": "Oui, mais seulement avec un ordinateur quantique",
          "correct": false,
          "feedback": "Les algorithmes gloutons sont des\nalgorithmes classiques qui s'exécutent sur\ndes ordinateurs traditionnels. Ils n'ont\naucun rapport avec l'informatique\nquantique.\n"
        },
        {
          "text": "Non, jamais",
          "correct": false,
          "feedback": "Cette position est trop catégorique. Un\nalgorithme glouton est très souvent utilisé\ncomme **heuristique** ou comme algorithme\nd'approximation rapide, même quand il ne\ngarantit pas l'optimum.\n"
        }
      ],
      "explanation": "Pour le voyageur de commerce, par exemple, un\nalgorithme glouton du type « plus proche\nvoisin » donne souvent une tournée à environ\n$25\\%$ de l'optimum, en temps quadratique.\nC'est un compromis très intéressant en\npratique."
    },
    {
      "id": "q21",
      "difficulty": 3,
      "skills": [
        "contre-exemple",
        "construction"
      ],
      "title": "Construire un contre-exemple",
      "partie": "limites",
      "statement": "On vous propose un problème et un algorithme\nglouton. Comment démontrer que cet algorithme ne\ndonne **pas** toujours l'optimum ?",
      "options": [
        {
          "text": "Vérifier que l'algorithme termine",
          "correct": false,
          "feedback": "La terminaison est une propriété\nnécessaire mais non suffisante pour\nconclure quant à l'optimalité. Un\nalgorithme peut terminer rapidement et\nrenvoyer une solution sous-optimale.\n"
        },
        {
          "text": "Démontrer que l'algorithme est lent",
          "correct": false,
          "feedback": "La vitesse de l'algorithme ne dit rien sur\nson optimalité. Un algorithme peut être à\nla fois très rapide et incapable de\ntrouver l'optimum.\n"
        },
        {
          "text": "Trouver un exemple où il fait pire que l'optimum",
          "correct": true,
          "feedback": "Un seul contre-exemple suffit pour\ninvalider un algorithme glouton. C'est la\nméthode classique de réfutation en\ninformatique : un cas particulier qui\ncontredit l'énoncé général.\n"
        },
        {
          "text": "Compiler le programme dans plusieurs langages différents",
          "correct": false,
          "feedback": "Le langage de programmation utilisé n'a\naucune influence sur l'optimalité du\nrésultat produit par l'algorithme.\n"
        }
      ],
      "explanation": "Un conseil utile : pour les problèmes simples,\nessayez de petits exemples « piégés » avec des\nasymétries, des poids très différents, ou des\nbornes serrées. Un contre-exemple émerge\nsouvent rapidement."
    },
    {
      "id": "q22",
      "difficulty": 3,
      "skills": [
        "analyse"
      ],
      "title": "Algorithme glouton et terminaison",
      "partie": "exemples",
      "statement": "Pourquoi un algorithme glouton **termine-t-il toujours** en un nombre fini d'étapes ?",
      "options": [
        {
          "text": "Parce qu'il utilise une boucle `while`",
          "correct": false,
          "feedback": "Une boucle `while` peut très bien être\ninfinie. La terminaison ne dépend pas du\ntype de boucle utilisée, mais de\nl'existence d'un variant qui décroît\nstrictement.\n"
        },
        {
          "text": "Parce que la mémoire de l'ordinateur est limitée",
          "correct": false,
          "feedback": "La limite de mémoire peut provoquer une\nerreur d'exécution, mais elle ne garantit\npas la terminaison logique de l'algorithme.\n"
        },
        {
          "text": "À chaque étape, le nombre de candidats décroît",
          "correct": true,
          "feedback": "Le nombre d'éléments candidats décroît\nstrictement à chaque étape. Comme c'est un\nentier positif, l'algorithme s'arrête en\nau plus $n$ étapes, où $n$ est le nombre\nd'éléments initiaux.\n"
        },
        {
          "text": "Parce que tous les algorithmes terminent en informatique",
          "correct": false,
          "feedback": "Cette affirmation est fausse en général :\nde nombreux algorithmes peuvent ne pas\nterminer (boucle infinie). Un algorithme\nglouton termine pour une raison précise et\nstructurelle, pas par principe général.\n"
        }
      ],
      "explanation": "C'est l'argument du **variant** : une\nquantité entière positive qui décroît\nstrictement à chaque étape garantit la\nterminaison. Pour un algorithme glouton, le\nvariant est typiquement le nombre d'éléments\ncandidats restants."
    },
    {
      "id": "q23",
      "difficulty": 3,
      "skills": [
        "verification-experimentale"
      ],
      "title": "Vérifier expérimentalement l'optimalité",
      "partie": "limites",
      "statement": "On a écrit un algorithme glouton pour un\nnouveau problème d'optimisation. Sans pouvoir\nfaire de démonstration formelle, comment se\ndonner une **bonne confiance** dans le fait\nqu'il donne l'optimum sur les cas pratiques ?",
      "options": [
        {
          "text": "Augmenter la taille du problème pour voir\nsi cela aide\n",
          "correct": false,
          "feedback": "Erreur : tester de plus grandes tailles ne\nrenseigne pas sur l'optimalité, car on n'a\nplus de référence (la recherche exhaustive\ndevient impraticable). Pour gagner en\nconfiance, il faut au contraire tester sur\nde **petites** tailles, où l'on peut\ncomparer à la solution exacte.\n"
        },
        {
          "text": "Lui faire confiance s'il a été trouvé sur\nInternet\n",
          "correct": false,
          "feedback": "Erreur : un algorithme trouvé sur Internet\nn'a aucune garantie d'être optimal pour\nvotre variante du problème. Les conditions\nprécises (système monétaire, nature des\nobjets, etc.) modifient souvent l'optimalité\nd'un critère glouton.\n"
        },
        {
          "text": "Lancer le programme une seule fois sur un\nexemple et conclure\n",
          "correct": false,
          "feedback": "Erreur : un seul exemple ne prouve rien.\nC'est précisément le piège du rendu de\nmonnaie, qui fonctionne sur le système\neuros mais échoue sur d'autres systèmes\nmonétaires.\n"
        },
        {
          "text": "Comparer à la recherche exhaustive sur de petits cas",
          "correct": true,
          "feedback": "Bonne réponse : c'est la démarche expérimentale standard. La\nrecherche exhaustive (par exemple en énumérant tous les\nsous-ensembles possibles) garantit l'optimum, mais le nombre de cas\ndouble à chaque élément ajouté, ce qui la rend faisable uniquement\npour de petits $n$. Si l'algorithme glouton coïncide avec la\nrecherche exhaustive sur tous les cas testés, on a une bonne\nconfiance pratique (sans pour autant disposer d'une preuve\nformelle).\n"
        }
      ],
      "explanation": "Démarche pédagogique en NSI : tester sur des cas concrets, comparer\nà une référence (recherche exhaustive ou solution optimale connue),\net chercher des contre-exemples. La démonstration formelle de\nl'optimalité d'un algorithme glouton n'est pas exigée au lycée."
    },
    {
      "id": "q24",
      "difficulty": 3,
      "skills": [
        "synthese",
        "choix"
      ],
      "title": "Quelle approche essayer en premier ?",
      "partie": "limites",
      "statement": "Face à un nouveau problème d'optimisation, quelle\napproche essayer en **premier** ?",
      "options": [
        {
          "text": "Aucune méthode particulière, en essayant plusieurs idées au hasard",
          "correct": false,
          "feedback": "Une démarche désordonnée ne permet pas de\nprogresser méthodiquement vers une\nsolution. Il vaut mieux suivre une approche\nstructurée comme l'algorithme glouton.\n"
        },
        {
          "text": "Une recherche exhaustive systématique, pour être certain d'obtenir l'optimum",
          "correct": false,
          "feedback": "Tester toutes les combinaisons devient\nrapidement impraticable dès que la taille\ndu problème augmente, car le nombre de cas\ncroît de manière exponentielle.\n"
        },
        {
          "text": "Un algorithme glouton simple, rapide à coder et tester",
          "correct": true,
          "feedback": "C'est la démarche pragmatique. Beaucoup de\nproblèmes admettent une solution gloutonne\nsimple. Inutile de chercher une approche\ncompliquée si un algorithme glouton suffit\nà donner l'optimum.\n"
        },
        {
          "text": "Une approche aléatoire, sans stratégie particulière",
          "correct": false,
          "feedback": "Sans démarche structurée, on ne peut rien\napprendre du problème, et on perd toute\ngarantie sur la qualité de la solution\nobtenue.\n"
        }
      ],
      "explanation": "Démarche conseillée : tester d'abord un\nalgorithme glouton simple, vérifier sur des cas\nconnus s'il donne bien l'optimum, et, si un\ncontre-exemple apparaît, chercher une autre\nstratégie ou se contenter d'une approximation."
    },
    {
      "id": "q25",
      "difficulty": 3,
      "skills": [
        "synthese"
      ],
      "title": "Conclusion sur les algorithmes gloutons",
      "partie": "limites",
      "statement": "Lequel des énoncés suivants résume le mieux les\nalgorithmes gloutons ?",
      "options": [
        {
          "text": "Ils sont rapides et fonctionnent toujours",
          "correct": false,
          "feedback": "Cette affirmation est trop optimiste. Les\nalgorithmes gloutons sont rapides, mais\nils ne donnent pas toujours l'optimum sur\ntous les problèmes.\n"
        },
        {
          "text": "Ils sont totalement obsolètes et sans intérêt aujourd'hui",
          "correct": false,
          "feedback": "Les algorithmes gloutons gardent toute leur\npertinence, particulièrement lorsque\nl'optimalité est démontrable ou lorsqu'une\napproximation rapide suffit pour\nl'application visée.\n"
        },
        {
          "text": "Ils utilisent l'intelligence artificielle",
          "correct": false,
          "feedback": "Les algorithmes gloutons sont des\nalgorithmes classiques et déterministes.\nIls n'ont aucun rapport avec l'apprentissage\nautomatique ou l'intelligence\nartificielle.\n"
        },
        {
          "text": "Rapides et simples, optimaux parfois, approchés souvent",
          "correct": true,
          "feedback": "C'est exactement leur place dans le paysage\nalgorithmique : un outil indispensable, mais\nà utiliser avec discernement, en testant\nsystématiquement leur comportement sur des\nexemples avant de leur faire confiance.\n"
        }
      ],
      "explanation": "Maîtriser les algorithmes gloutons, c'est\nsavoir reconnaître les problèmes qui s'y\nprêtent (rendu de monnaie sur certains\nsystèmes, sac à dos fractionnaire, sélection\nd'activités) et savoir détecter ceux qui\ndemandent une autre approche (sac à dos $0/1$,\nvoyageur de commerce)."
    },
    {
      "id": "q26",
      "difficulty": 2,
      "skills": [
        "rendu-monnaie",
        "trace",
        "calcul"
      ],
      "title": "Rendre une somme avec les pièces de l'euro",
      "partie": "exemples",
      "statement": "Avec les pièces et billets de valeurs $1$, $2$, $5$, $10$, $20$ et\n$50$, l'algorithme glouton prend à chaque étape la plus grande\nvaleur qui ne dépasse pas ce qui reste à rendre. Combien de pièces\nou billets rend-il pour la somme $37$ ?",
      "options": [
        {
          "text": "$4$, soit $20 + 10 + 5 + 2$",
          "correct": true,
          "feedback": "Bonne réponse : à chaque étape, la plus grande valeur possible\nest choisie, ce qui donne $20 + 10 + 5 + 2 = 37$ en $4$ pièces ou\nbillets. Avec ce système, le résultat est aussi le minimum.\n"
        },
        {
          "text": "$5$, soit $20 + 10 + 5 + 2 + 0$",
          "correct": false,
          "feedback": "Erreur : recompte les termes de la décomposition, il y en a\n$4$.\n"
        },
        {
          "text": "$3$",
          "correct": false,
          "feedback": "Erreur : avec $3$ pièces ou billets, aucune combinaison ne\ndonne $37$ dans ce système.\n"
        },
        {
          "text": "$8$",
          "correct": false,
          "feedback": "Erreur : $8$ correspondrait à des valeurs bien plus petites que\ncelles choisies par l'algorithme glouton.\n"
        }
      ],
      "explanation": "Le système monétaire de l'euro est dit canonique : la stratégie\ngloutonne y rend toujours le nombre minimal de pièces.",
      "variants": [
        {
          "statement": "Avec les pièces et billets de valeurs $1$, $2$, $5$, $10$, $20$ et\n$50$, l'algorithme glouton prend à chaque étape la plus grande\nvaleur qui ne dépasse pas ce qui reste à rendre. Combien de pièces\nou billets rend-il pour la somme $37$ ?",
          "options": [
            {
              "text": "$4$, soit $20 + 10 + 5 + 2$",
              "correct": true,
              "feedback": "Bonne réponse : à chaque étape, la plus grande valeur possible\nest choisie, ce qui donne $20 + 10 + 5 + 2 = 37$ en $4$ pièces ou\nbillets. Avec ce système, le résultat est aussi le minimum.\n"
            },
            {
              "text": "$5$, soit $20 + 10 + 5 + 2 + 0$",
              "correct": false,
              "feedback": "Erreur : recompte les termes de la décomposition, il y en a\n$4$.\n"
            },
            {
              "text": "$3$",
              "correct": false,
              "feedback": "Erreur : avec $3$ pièces ou billets, aucune combinaison ne\ndonne $37$ dans ce système.\n"
            },
            {
              "text": "$8$",
              "correct": false,
              "feedback": "Erreur : $8$ correspondrait à des valeurs bien plus petites que\ncelles choisies par l'algorithme glouton.\n"
            }
          ],
          "explanation": "Le système monétaire de l'euro est dit canonique : la stratégie\ngloutonne y rend toujours le nombre minimal de pièces."
        },
        {
          "statement": "Avec les pièces et billets de valeurs $1$, $2$, $5$, $10$, $20$ et\n$50$, l'algorithme glouton prend à chaque étape la plus grande\nvaleur qui ne dépasse pas ce qui reste à rendre. Combien de pièces\nou billets rend-il pour la somme $68$ ?",
          "options": [
            {
              "text": "$5$, soit $50 + 10 + 5 + 2 + 1$",
              "correct": true,
              "feedback": "Bonne réponse : à chaque étape, la plus grande valeur possible\nest choisie, ce qui donne $50 + 10 + 5 + 2 + 1 = 68$ en $5$ pièces ou\nbillets. Avec ce système, le résultat est aussi le minimum.\n"
            },
            {
              "text": "$6$, soit $50 + 10 + 5 + 2 + 1 + 0$",
              "correct": false,
              "feedback": "Erreur : recompte les termes de la décomposition, il y en a\n$5$.\n"
            },
            {
              "text": "$4$",
              "correct": false,
              "feedback": "Erreur : avec $4$ pièces ou billets, aucune combinaison ne\ndonne $68$ dans ce système.\n"
            },
            {
              "text": "$10$",
              "correct": false,
              "feedback": "Erreur : $10$ correspondrait à des valeurs bien plus petites que\ncelles choisies par l'algorithme glouton.\n"
            }
          ],
          "explanation": "Le système monétaire de l'euro est dit canonique : la stratégie\ngloutonne y rend toujours le nombre minimal de pièces."
        },
        {
          "statement": "Avec les pièces et billets de valeurs $1$, $2$, $5$, $10$, $20$ et\n$50$, l'algorithme glouton prend à chaque étape la plus grande\nvaleur qui ne dépasse pas ce qui reste à rendre. Combien de pièces\nou billets rend-il pour la somme $24$ ?",
          "options": [
            {
              "text": "$3$, soit $20 + 2 + 2$",
              "correct": true,
              "feedback": "Bonne réponse : à chaque étape, la plus grande valeur possible\nest choisie, ce qui donne $20 + 2 + 2 = 24$ en $3$ pièces ou\nbillets. Avec ce système, le résultat est aussi le minimum.\n"
            },
            {
              "text": "$4$, soit $20 + 2 + 2 + 0$",
              "correct": false,
              "feedback": "Erreur : recompte les termes de la décomposition, il y en a\n$3$.\n"
            },
            {
              "text": "$2$",
              "correct": false,
              "feedback": "Erreur : avec $2$ pièces ou billets, aucune combinaison ne\ndonne $24$ dans ce système.\n"
            },
            {
              "text": "$6$",
              "correct": false,
              "feedback": "Erreur : $6$ correspondrait à des valeurs bien plus petites que\ncelles choisies par l'algorithme glouton.\n"
            }
          ],
          "explanation": "Le système monétaire de l'euro est dit canonique : la stratégie\ngloutonne y rend toujours le nombre minimal de pièces."
        }
      ]
    },
    {
      "id": "q27",
      "difficulty": 2,
      "skills": [
        "activites",
        "critere",
        "tri"
      ],
      "title": "Le critère du choix d'activités",
      "partie": "exemples",
      "statement": "Plusieurs clubs demandent la salle pour des créneaux qui se\nchevauchent, et l'on veut satisfaire le plus grand nombre de\ndemandes. Dans quel ordre l'algorithme glouton examine-t-il les\ncréneaux ?",
      "options": [
        {
          "text": "Par heure de fin croissante, pour libérer la salle au plus tôt",
          "correct": true,
          "feedback": "Bonne réponse : finir au plus tôt libère la salle le plus\nlongtemps pour la suite. Ce critère donne toujours un nombre\nmaximal de créneaux.\n"
        },
        {
          "text": "Par heure de début croissante, pour commencer au plus tôt",
          "correct": false,
          "feedback": "Erreur : un créneau qui commence tôt mais dure toute la journée\nbloquerait tous les autres.\n"
        },
        {
          "text": "Par durée croissante, pour caser le plus de créneaux courts",
          "correct": false,
          "feedback": "Erreur : un créneau court placé au milieu peut empêcher deux\ncréneaux plus longs qui ne se chevauchaient pas.\n"
        },
        {
          "text": "Par ordre alphabétique des clubs, pour traiter chacun équitablement",
          "correct": false,
          "feedback": "Erreur : l'ordre des noms n'a aucun rapport avec les\nchevauchements.\n"
        }
      ],
      "explanation": "Le choix du critère est tout l'art d'un algorithme glouton : pour\nles activités, l'heure de fin est le bon, et on peut le prouver."
    },
    {
      "id": "q28",
      "difficulty": 3,
      "skills": [
        "sac-a-dos",
        "ratio",
        "trace"
      ],
      "title": "Le sac à dos par rapport valeur sur poids",
      "partie": "exemples",
      "statement": "Un sac supporte un poids de $5$. Trois objets sont\ndisponibles : A (poids $3$, valeur $60$), B (poids $2$, valeur $50$) et C (poids $4$, valeur $70$). L'algorithme glouton classe les objets par\nrapport valeur sur poids décroissant et prend chaque objet qui\ntient encore. Quelle valeur totale obtient-il ?",
      "options": [
        {
          "text": "$110$",
          "correct": true,
          "feedback": "Bonne réponse : l'ordre des rapports est B puis A puis C. L'algorithme\nprend B puis A, qui remplissent le sac, pour une valeur de $110$.\n"
        },
        {
          "text": "$70$",
          "correct": false,
          "feedback": "Erreur : suis l'ordre des rapports valeur sur poids et vérifie\nle poids restant avant chaque objet.\n"
        },
        {
          "text": "$50$",
          "correct": false,
          "feedback": "Erreur : cette valeur ne correspond pas aux objets pris dans\nl'ordre glouton.\n"
        },
        {
          "text": "$130$",
          "correct": false,
          "feedback": "Erreur : cette combinaison dépasse le poids supporté par le sac.\n"
        }
      ],
      "explanation": "Le rapport valeur sur poids est le critère glouton usuel du sac à\ndos. Il ne garantit pas l'optimum : selon la capacité, une autre\ncombinaison peut valoir davantage.",
      "variants": [
        {
          "statement": "Un sac supporte un poids de $5$. Trois objets sont\ndisponibles : A (poids $3$, valeur $60$), B (poids $2$, valeur $50$) et C (poids $4$, valeur $70$). L'algorithme glouton classe les objets par\nrapport valeur sur poids décroissant et prend chaque objet qui\ntient encore. Quelle valeur totale obtient-il ?",
          "options": [
            {
              "text": "$110$",
              "correct": true,
              "feedback": "Bonne réponse : l'ordre des rapports est B puis A puis C. L'algorithme\nprend B puis A, qui remplissent le sac, pour une valeur de $110$.\n"
            },
            {
              "text": "$70$",
              "correct": false,
              "feedback": "Erreur : suis l'ordre des rapports valeur sur poids et vérifie\nle poids restant avant chaque objet.\n"
            },
            {
              "text": "$50$",
              "correct": false,
              "feedback": "Erreur : cette valeur ne correspond pas aux objets pris dans\nl'ordre glouton.\n"
            },
            {
              "text": "$130$",
              "correct": false,
              "feedback": "Erreur : cette combinaison dépasse le poids supporté par le sac.\n"
            }
          ],
          "explanation": "Le rapport valeur sur poids est le critère glouton usuel du sac à\ndos. Il ne garantit pas l'optimum : selon la capacité, une autre\ncombinaison peut valoir davantage."
        },
        {
          "statement": "Un sac supporte un poids de $4$. Trois objets sont\ndisponibles : A (poids $3$, valeur $60$), B (poids $2$, valeur $50$) et C (poids $4$, valeur $70$). L'algorithme glouton classe les objets par\nrapport valeur sur poids décroissant et prend chaque objet qui\ntient encore. Quelle valeur totale obtient-il ?",
          "options": [
            {
              "text": "$50$",
              "correct": true,
              "feedback": "Bonne réponse : l'ordre des rapports est B puis A puis C. L'algorithme\nprend B seul, A ne tenant plus dans les $2$ unités restantes, pour une valeur de $50$.\n"
            },
            {
              "text": "$60$",
              "correct": false,
              "feedback": "Erreur : suis l'ordre des rapports valeur sur poids et vérifie\nle poids restant avant chaque objet.\n"
            },
            {
              "text": "$70$",
              "correct": false,
              "feedback": "Erreur : cette valeur ne correspond pas aux objets pris dans\nl'ordre glouton.\n"
            },
            {
              "text": "$110$",
              "correct": false,
              "feedback": "Erreur : cette combinaison dépasse le poids supporté par le sac.\n"
            }
          ],
          "explanation": "Le rapport valeur sur poids est le critère glouton usuel du sac à\ndos. Il ne garantit pas l'optimum : selon la capacité, une autre\ncombinaison peut valoir davantage."
        },
        {
          "statement": "Un sac supporte un poids de $5$. Trois objets sont\ndisponibles : A (poids $3$, valeur $60$), B (poids $2$, valeur $50$) et C (poids $1$, valeur $30$). L'algorithme glouton classe les objets par\nrapport valeur sur poids décroissant et prend chaque objet qui\ntient encore. Quelle valeur totale obtient-il ?",
          "options": [
            {
              "text": "$80$",
              "correct": true,
              "feedback": "Bonne réponse : l'ordre des rapports est C puis B puis A. L'algorithme\nprend C puis B, A ne tenant plus dans les $2$ unités restantes, pour une valeur de $80$.\n"
            },
            {
              "text": "$110$",
              "correct": false,
              "feedback": "Erreur : suis l'ordre des rapports valeur sur poids et vérifie\nle poids restant avant chaque objet.\n"
            },
            {
              "text": "$60$",
              "correct": false,
              "feedback": "Erreur : cette valeur ne correspond pas aux objets pris dans\nl'ordre glouton.\n"
            },
            {
              "text": "$140$",
              "correct": false,
              "feedback": "Erreur : cette combinaison dépasse le poids supporté par le sac.\n"
            }
          ],
          "explanation": "Le rapport valeur sur poids est le critère glouton usuel du sac à\ndos. Il ne garantit pas l'optimum : selon la capacité, une autre\ncombinaison peut valoir davantage."
        }
      ]
    },
    {
      "id": "q29",
      "difficulty": 1,
      "skills": [
        "rendu-monnaie",
        "optimalite"
      ],
      "title": "Le glouton et les pièces de l'euro",
      "partie": "exemples",
      "statement": "Avec les pièces et billets de l'euro, l'algorithme glouton de rendu\nde monnaie donne-t-il toujours le nombre minimal de pièces ?",
      "options": [
        {
          "text": "Oui, ce système monétaire a été conçu pour cela",
          "correct": true,
          "feedback": "Bonne réponse : les valeurs $1$, $2$, $5$, $10$, $20$, $50$\nforment un système dit canonique, où prendre la plus grande\npièce possible est toujours optimal.\n"
        },
        {
          "text": "Non, il faut tester toutes les combinaisons pour être sûr",
          "correct": false,
          "feedback": "Erreur : avec ce système précis, l'optimalité du glouton est\ndémontrée ; la recherche exhaustive est inutile.\n"
        },
        {
          "text": "Oui, parce qu'un algorithme glouton est toujours optimal",
          "correct": false,
          "feedback": "Erreur : la conclusion est bonne mais la raison fausse ;\nd'autres systèmes de pièces mettent le glouton en défaut.\n"
        },
        {
          "text": "Non, le glouton rend parfois une pièce de trop",
          "correct": false,
          "feedback": "Erreur : cela arrive avec des systèmes comme $1$, $3$, $4$, pas\navec celui de l'euro.\n"
        }
      ],
      "explanation": "L'optimalité d'un glouton dépend du problème et de ses données :\nvraie pour l'euro, fausse pour d'autres systèmes monétaires."
    },
    {
      "id": "q30",
      "difficulty": 2,
      "skills": [
        "activites",
        "trace"
      ],
      "title": "Les créneaux retenus",
      "partie": "exemples",
      "statement": "Six créneaux sont demandés pour la salle : $[1, 4]$, $[3, 5]$,\n$[0, 6]$, $[5, 7]$, $[3, 9]$ et $[6, 10]$. L'algorithme glouton\ntrie par heure de fin croissante et retient chaque créneau qui\ncommence après la fin du dernier retenu. Quels créneaux retient-il ?",
      "options": [
        {
          "text": "$[1, 4]$ et $[5, 7]$",
          "correct": true,
          "feedback": "Bonne réponse : $[1, 4]$ finit en premier et est retenu ;\n$[3, 5]$ et $[0, 6]$ le chevauchent ; $[5, 7]$ commence après\n$4$ et est retenu ; $[3, 9]$ et $[6, 10]$ chevauchent $[5, 7]$.\n"
        },
        {
          "text": "$[0, 6]$ et $[6, 10]$",
          "correct": false,
          "feedback": "Erreur : $[0, 6]$ n'est pas le premier à finir ; $[1, 4]$ le\nprécède et l'exclut.\n"
        },
        {
          "text": "$[1, 4]$, $[5, 7]$ et $[6, 10]$",
          "correct": false,
          "feedback": "Erreur : $[6, 10]$ commence à $6$, avant la fin de $[5, 7]$ à\n$7$, les deux se chevauchent.\n"
        },
        {
          "text": "$[3, 5]$ et $[5, 7]$",
          "correct": false,
          "feedback": "Erreur : $[1, 4]$ finit avant $[3, 5]$ et est examiné en\npremier.\n"
        }
      ],
      "explanation": "Deux créneaux sont retenus, et aucune sélection n'en contient\ndavantage : le critère de la fin au plus tôt est optimal."
    },
    {
      "id": "q31",
      "difficulty": 3,
      "skills": [
        "activites",
        "contre-exemple",
        "critere"
      ],
      "title": "Pourquoi pas le plus court d'abord",
      "partie": "exemples",
      "statement": "Pour le choix d'activités, pourquoi le critère « le créneau le plus\ncourt d'abord » n'est-il pas optimal ?",
      "options": [
        {
          "text": "Un créneau court à cheval sur deux longs les élimine tous deux",
          "correct": true,
          "feedback": "Bonne réponse : avec $[1, 5]$, $[4, 6]$ et $[5, 9]$, le plus\ncourt, $[4, 6]$, est pris en premier et empêche les deux autres,\nalors que $[1, 5]$ et $[5, 9]$ étaient compatibles.\n"
        },
        {
          "text": "Un créneau court rapporte moins qu'un créneau long au classement",
          "correct": false,
          "feedback": "Erreur : tous les créneaux comptent pour un, la durée n'a pas de\nvaleur en soi.\n"
        },
        {
          "text": "Les créneaux courts sont toujours en fin de journée",
          "correct": false,
          "feedback": "Erreur : rien ne lie la durée d'un créneau à sa position.\n"
        },
        {
          "text": "Le tri par durée est trop coûteux à calculer pour de longues listes",
          "correct": false,
          "feedback": "Erreur : trier par durée coûte autant que trier par heure de\nfin ; le problème est le résultat, pas le coût.\n"
        }
      ],
      "explanation": "Un contre-exemple suffit à écarter un critère glouton. Trouver le\nbon critère, puis prouver qu'il marche toujours, sont deux étapes\ndistinctes."
    },
    {
      "id": "q32",
      "difficulty": 2,
      "skills": [
        "glouton",
        "trace",
        "stations"
      ],
      "title": "Les arrêts d'une voiture électrique",
      "partie": "exemples",
      "statement": "Une voiture a $300$ km d'autonomie et part batterie pleine. Des\nbornes se trouvent aux kilomètres $100$, $180$, $250$, $400$ et\n$520$, l'arrivée au kilomètre $600$. L'algorithme glouton va à\nchaque fois jusqu'à la dernière borne atteignable. Où\ns'arrête-t-elle ?",
      "options": [
        {
          "text": "Au kilomètre $250$, puis au kilomètre $520$",
          "correct": true,
          "feedback": "Bonne réponse : depuis $0$, la dernière borne atteignable sous\n$300$ km est $250$ ; depuis $250$, on atteint jusqu'à $550$,\nd'où un arrêt à $520$, puis l'arrivée. Deux arrêts, c'est le\nminimum.\n"
        },
        {
          "text": "Au kilomètre $100$, puis au kilomètre $400$",
          "correct": false,
          "feedback": "Erreur : s'arrêter à la première borne n'est pas glouton, et\n$400$ est hors de portée depuis $100$.\n"
        },
        {
          "text": "Au kilomètre $250$, puis au kilomètre $400$",
          "correct": false,
          "feedback": "Erreur : depuis $250$, la borne $520$ est encore atteignable, et\nl'algorithme choisit la plus lointaine.\n"
        },
        {
          "text": "Au kilomètre $180$, puis au kilomètre $400$",
          "correct": false,
          "feedback": "Erreur : depuis $0$, $250$ est atteignable, donc $180$ n'est pas\nle choix glouton.\n"
        }
      ],
      "explanation": "Aller aussi loin que possible à chaque étape minimise le nombre\nd'arrêts : c'est un glouton dont l'optimalité se démontre."
    },
    {
      "id": "q33",
      "difficulty": 2,
      "skills": [
        "glouton",
        "tri",
        "methode"
      ],
      "title": "Pourquoi trier avant de choisir",
      "partie": "principe",
      "statement": "Beaucoup d'algorithmes gloutons commencent par trier les données\nselon le critère de choix. Qu'y gagne-t-on ?",
      "options": [
        {
          "text": "Le meilleur choix local devient le prochain élément de la liste",
          "correct": true,
          "feedback": "Bonne réponse : une fois trié, il suffit de parcourir la liste\ndans l'ordre ; chaque étape se fait en temps constant au lieu de\nrechercher le meilleur élément à chaque fois.\n"
        },
        {
          "text": "Le résultat devient optimal, quel que soit le problème",
          "correct": false,
          "feedback": "Erreur : trier ne change pas la qualité des choix, seulement\nleur coût.\n"
        },
        {
          "text": "Les données triées occupent moins de mémoire une fois rangées",
          "correct": false,
          "feedback": "Erreur : trier ne réduit pas la taille des données.\n"
        },
        {
          "text": "On évite d'avoir à parcourir la liste après le tri",
          "correct": false,
          "feedback": "Erreur : la liste est parcourue une fois après le tri ; ce qui\nest évité, ce sont les recherches répétées.\n"
        }
      ],
      "explanation": "Tri puis parcours : le schéma donne un coût en $n \\log n$ dominé par\nle tri, bien plus faible qu'une recherche du meilleur élément à\nchaque étape."
    },
    {
      "id": "q34",
      "difficulty": 1,
      "skills": [
        "glouton",
        "principe"
      ],
      "title": "Une seule solution construite",
      "partie": "principe",
      "statement": "Combien de solutions candidates un algorithme glouton construit-il\navant de rendre sa réponse ?",
      "options": [
        {
          "text": "Une seule, bâtie choix après choix",
          "correct": true,
          "feedback": "Bonne réponse : chaque étape fixe un choix définitif. La\nsolution rendue est la seule explorée, ce qui rend l'algorithme\nrapide mais parfois non optimal.\n"
        },
        {
          "text": "Toutes, pour retenir la meilleure",
          "correct": false,
          "feedback": "Erreur : c'est la recherche exhaustive, dont le coût explose\navec la taille des données.\n"
        },
        {
          "text": "Deux, pour comparer et garder la meilleure",
          "correct": false,
          "feedback": "Erreur : il n'y a aucune comparaison entre solutions, seulement\ndes choix locaux successifs.\n"
        },
        {
          "text": "Autant que de données en entrée",
          "correct": false,
          "feedback": "Erreur : le nombre de données fixe le nombre d'étapes, pas le\nnombre de solutions construites.\n"
        }
      ],
      "explanation": "Glouton veut dire pressé : on avance sans jamais revenir en\narrière ni comparer avec une autre solution."
    },
    {
      "id": "q35",
      "difficulty": 2,
      "skills": [
        "sac-a-dos",
        "critere",
        "choix"
      ],
      "title": "Trois critères pour le sac à dos",
      "partie": "principe",
      "statement": "Pour remplir un sac à dos de capacité limitée avec des objets de\npoids et de valeurs variés, trois critères gloutons sont possibles :\nla valeur la plus grande d'abord, le poids le plus petit d'abord, ou\nle rapport valeur sur poids le plus grand d'abord. Que peut-on en\ndire ?",
      "options": [
        {
          "text": "Aucun ne garantit l'optimum, le rapport étant souvent le meilleur",
          "correct": true,
          "feedback": "Bonne réponse : chaque critère a ses contre-exemples. Le rapport\nvaleur sur poids donne souvent de bons résultats, mais seule une\nrecherche exhaustive assure l'optimum.\n"
        },
        {
          "text": "Le critère de la valeur est toujours optimal, quel que soit le sac",
          "correct": false,
          "feedback": "Erreur : un objet très lourd et précieux peut remplir le sac\nalors que plusieurs petits objets vaudraient plus ensemble.\n"
        },
        {
          "text": "Le critère du poids est toujours optimal, quels que soient les objets",
          "correct": false,
          "feedback": "Erreur : prendre les objets légers peut remplir le sac de\nchoses sans valeur.\n"
        },
        {
          "text": "Les trois critères donnent toujours le même résultat",
          "correct": false,
          "feedback": "Erreur : ils peuvent choisir des objets différents et aboutir à\ndes valeurs différentes.\n"
        }
      ],
      "explanation": "Le sac à dos est l'exemple type d'un problème où le glouton est\nune bonne heuristique sans être une méthode exacte."
    },
    {
      "id": "q36",
      "difficulty": 3,
      "skills": [
        "glouton",
        "preuve",
        "optimalite"
      ],
      "title": "Affirmer qu'un glouton est optimal",
      "partie": "principe",
      "statement": "Un algorithme glouton a donné la solution optimale sur dix exemples\ntestés. Que faut-il pour affirmer qu'il est optimal en général ?",
      "options": [
        {
          "text": "Une preuve que chaque choix local reste compatible avec un optimum",
          "correct": true,
          "feedback": "Bonne réponse : c'est l'argument d'échange classique. Des\nexemples réussis ne prouvent rien ; un seul contre-exemple\nsuffirait à réfuter.\n"
        },
        {
          "text": "Cent exemples de plus, tous réussis, sur des données variées",
          "correct": false,
          "feedback": "Erreur : aucun nombre d'exemples ne remplace une preuve ; le\ncontre-exemple peut être le suivant.\n"
        },
        {
          "text": "Que l'algorithme soit rapide sur tous les exemples testés",
          "correct": false,
          "feedback": "Erreur : la vitesse d'un glouton est acquise ; c'est la qualité\nde sa réponse qui est en question.\n"
        },
        {
          "text": "Que les exemples testés soient de grande taille et nombreux",
          "correct": false,
          "feedback": "Erreur : la taille des exemples ne change rien au raisonnement.\n"
        }
      ],
      "explanation": "Un glouton correct se démontre ; un glouton faux se réfute par un\ncontre-exemple. Les tests ne font que suggérer."
    },
    {
      "id": "q37",
      "difficulty": 2,
      "skills": [
        "rendu-monnaie",
        "contre-exemple",
        "calcul"
      ],
      "title": "Un système de pièces qui piège le glouton",
      "partie": "limites",
      "statement": "Avec les pièces de valeurs $1$, $4$ et $6$, on rend la somme $8$.\nCombien de pièces donne l'algorithme glouton, et quel est le nombre\nminimal de pièces ?",
      "options": [
        {
          "text": "Glouton $3$ pièces, minimum $2$",
          "correct": true,
          "feedback": "Bonne réponse : le glouton donne $6 + 1 + 1$, soit $3$ pièces,\nalors que $4 + 4$ n'en utilise que $2$. Ce système n'est pas\ncanonique.\n"
        },
        {
          "text": "Glouton $2$ pièces, minimum $3$",
          "correct": false,
          "feedback": "Erreur : le minimum ne peut pas dépasser ce que donne le\nglouton ; les deux nombres sont inversés.\n"
        },
        {
          "text": "$3$ pièces dans les deux cas",
          "correct": false,
          "feedback": "Erreur : $4 + 4 = 8$ n'utilise que $2$ pièces.\n"
        },
        {
          "text": "$2$ pièces dans les deux cas",
          "correct": false,
          "feedback": "Erreur : le glouton commence par la pièce de $6$ et aboutit à\n$6 + 1 + 1$, soit $3$ pièces.\n"
        }
      ],
      "explanation": "Changer les valeurs des pièces suffit à faire échouer le glouton :\nc'est la différence entre un système canonique et un système qui ne\nl'est pas.",
      "variants": [
        {
          "statement": "Avec les pièces de valeurs $1$, $4$ et $6$, on rend la somme $8$.\nCombien de pièces donne l'algorithme glouton, et quel est le nombre\nminimal de pièces ?",
          "options": [
            {
              "text": "Glouton $3$ pièces, minimum $2$",
              "correct": true,
              "feedback": "Bonne réponse : le glouton donne $6 + 1 + 1$, soit $3$ pièces,\nalors que $4 + 4$ n'en utilise que $2$. Ce système n'est pas\ncanonique.\n"
            },
            {
              "text": "Glouton $2$ pièces, minimum $3$",
              "correct": false,
              "feedback": "Erreur : le minimum ne peut pas dépasser ce que donne le\nglouton ; les deux nombres sont inversés.\n"
            },
            {
              "text": "$3$ pièces dans les deux cas",
              "correct": false,
              "feedback": "Erreur : $4 + 4 = 8$ n'utilise que $2$ pièces.\n"
            },
            {
              "text": "$2$ pièces dans les deux cas",
              "correct": false,
              "feedback": "Erreur : le glouton commence par la pièce de $6$ et aboutit à\n$6 + 1 + 1$, soit $3$ pièces.\n"
            }
          ],
          "explanation": "Changer les valeurs des pièces suffit à faire échouer le glouton :\nc'est la différence entre un système canonique et un système qui ne\nl'est pas."
        },
        {
          "statement": "Avec les pièces de valeurs $1$, $4$ et $6$, on rend la somme $9$.\nCombien de pièces donne l'algorithme glouton, et quel est le nombre\nminimal de pièces ?",
          "options": [
            {
              "text": "Glouton $4$ pièces, minimum $3$",
              "correct": true,
              "feedback": "Bonne réponse : le glouton donne $6 + 1 + 1 + 1$, soit $4$ pièces,\nalors que $4 + 4 + 1$ n'en utilise que $3$. Ce système n'est pas\ncanonique.\n"
            },
            {
              "text": "Glouton $3$ pièces, minimum $4$",
              "correct": false,
              "feedback": "Erreur : le minimum ne peut pas dépasser ce que donne le\nglouton ; les deux nombres sont inversés.\n"
            },
            {
              "text": "$4$ pièces dans les deux cas",
              "correct": false,
              "feedback": "Erreur : $4 + 4 + 1 = 9$ n'utilise que $3$ pièces.\n"
            },
            {
              "text": "$3$ pièces dans les deux cas",
              "correct": false,
              "feedback": "Erreur : le glouton commence par la pièce de $6$ et aboutit à\n$6 + 1 + 1 + 1$, soit $4$ pièces.\n"
            }
          ],
          "explanation": "Changer les valeurs des pièces suffit à faire échouer le glouton :\nc'est la différence entre un système canonique et un système qui ne\nl'est pas."
        },
        {
          "statement": "Avec les pièces de valeurs $1$, $4$ et $6$, on rend la somme $20$.\nCombien de pièces donne l'algorithme glouton, et quel est le nombre\nminimal de pièces ?",
          "options": [
            {
              "text": "Glouton $5$ pièces, minimum $4$",
              "correct": true,
              "feedback": "Bonne réponse : le glouton donne $6 + 6 + 6 + 1 + 1$, soit $5$ pièces,\nalors que $6 + 6 + 4 + 4$ n'en utilise que $4$. Ce système n'est pas\ncanonique.\n"
            },
            {
              "text": "Glouton $4$ pièces, minimum $5$",
              "correct": false,
              "feedback": "Erreur : le minimum ne peut pas dépasser ce que donne le\nglouton ; les deux nombres sont inversés.\n"
            },
            {
              "text": "$5$ pièces dans les deux cas",
              "correct": false,
              "feedback": "Erreur : $6 + 6 + 4 + 4 = 20$ n'utilise que $4$ pièces.\n"
            },
            {
              "text": "$4$ pièces dans les deux cas",
              "correct": false,
              "feedback": "Erreur : le glouton commence par la pièce de $6$ et aboutit à\n$6 + 6 + 6 + 1 + 1$, soit $5$ pièces.\n"
            }
          ],
          "explanation": "Changer les valeurs des pièces suffit à faire échouer le glouton :\nc'est la différence entre un système canonique et un système qui ne\nl'est pas."
        }
      ]
    },
    {
      "id": "q38",
      "difficulty": 3,
      "skills": [
        "plus-proche-voisin",
        "contre-exemple"
      ],
      "title": "Toujours la ville la plus proche",
      "partie": "limites",
      "statement": "Pour visiter plusieurs villes et revenir au départ en parcourant le\nmoins de kilomètres possible, un algorithme glouton va à chaque\nétape vers la ville non visitée la plus proche. Que vaut cette\nméthode ?",
      "options": [
        {
          "text": "Rapide, mais le circuit peut être bien plus long que le meilleur",
          "correct": true,
          "feedback": "Bonne réponse : les premières étapes, courtes, peuvent laisser\npour la fin une ville très éloignée, et le retour coûte alors\nplus que tout le reste.\n"
        },
        {
          "text": "Elle donne toujours le circuit le plus court possible",
          "correct": false,
          "feedback": "Erreur : des contre-exemples simples existent, avec quatre ou\ncinq villes.\n"
        },
        {
          "text": "Elle ne termine jamais, les villes proches étant revisitées",
          "correct": false,
          "feedback": "Erreur : chaque ville visitée est écartée, et l'algorithme\ntermine en autant d'étapes que de villes.\n"
        },
        {
          "text": "Elle est aussi coûteuse que l'examen de tous les circuits",
          "correct": false,
          "feedback": "Erreur : elle est bien plus rapide ; c'est son résultat qui\nn'est pas garanti.\n"
        }
      ],
      "explanation": "Le voyageur de commerce n'a pas d'algorithme efficace connu ; le\nplus proche voisin est une heuristique, utile faute de mieux."
    },
    {
      "id": "q39",
      "difficulty": 2,
      "skills": [
        "sac-a-dos",
        "contre-exemple",
        "valeur"
      ],
      "title": "Le plus précieux d'abord",
      "partie": "limites",
      "statement": "Un sac supporte un poids de $10$. Trois objets : A pèse $10$ et vaut\n$60$, B pèse $5$ et vaut $40$, C pèse $5$ et vaut $40$. Que donne\nle glouton qui prend l'objet de plus grande valeur en premier, et\nquel est l'optimum ?",
      "options": [
        {
          "text": "A pour $60$, alors que B et C ensemble valent $80$",
          "correct": true,
          "feedback": "Bonne réponse : A remplit le sac à lui seul. Le glouton par\nvaleur rend $60$, tandis que B et C, qui tiennent ensemble,\nrendent $80$.\n"
        },
        {
          "text": "B et C pour $80$, ce qui est aussi l'optimum",
          "correct": false,
          "feedback": "Erreur : trié par valeur, A vient en premier et est pris\npuisqu'il tient dans le sac.\n"
        },
        {
          "text": "A puis B pour $100$, le poids n'étant vérifié qu'à la fin",
          "correct": false,
          "feedback": "Erreur : après A, le sac est plein, B ne tient plus.\n"
        },
        {
          "text": "A pour $60$, ce qui est aussi l'optimum",
          "correct": false,
          "feedback": "Erreur : B et C valent $80$ ensemble, pour un poids de $10$.\n"
        }
      ],
      "explanation": "Un seul exemple suffit à montrer que le critère de la valeur n'est\npas optimal pour le sac à dos."
    },
    {
      "id": "q40",
      "difficulty": 3,
      "skills": [
        "recherche-exhaustive",
        "denombrement",
        "calcul"
      ],
      "title": "Le nombre de combinaisons à examiner",
      "partie": "limites",
      "statement": "Pour résoudre exactement un sac à dos à $20$ objets, la recherche\nexhaustive examine tous les sous-ensembles d'objets. Combien y en\na-t-il ?",
      "options": [
        {
          "text": "$2^{20}$, soit $1\\,048\\,576$",
          "correct": true,
          "feedback": "Bonne réponse : chaque objet est pris ou non, et les choix se\ncombinent : $2^{20}$ sous-ensembles, environ un million. C'est ce coût qui\nrend le glouton attrayant malgré ses limites.\n"
        },
        {
          "text": "$20^2$, soit $400$",
          "correct": false,
          "feedback": "Erreur : le nombre de sous-ensembles n'est pas un carré mais une\npuissance de deux.\n"
        },
        {
          "text": "$2 \\times 20$, soit $40$",
          "correct": false,
          "feedback": "Erreur : deux choix par objet se multiplient, ils ne\ns'additionnent pas.\n"
        },
        {
          "text": "$20$, un par objet",
          "correct": false,
          "feedback": "Erreur : un sous-ensemble peut contenir plusieurs objets ; il y\nen a bien plus que d'objets.\n"
        }
      ],
      "explanation": "Le nombre de sous-ensembles double à chaque objet ajouté : la\nrecherche exhaustive devient vite impraticable, d'où le recours\naux algorithmes gloutons.",
      "variants": [
        {
          "statement": "Pour résoudre exactement un sac à dos à $20$ objets, la recherche\nexhaustive examine tous les sous-ensembles d'objets. Combien y en\na-t-il ?",
          "options": [
            {
              "text": "$2^{20}$, soit $1\\,048\\,576$",
              "correct": true,
              "feedback": "Bonne réponse : chaque objet est pris ou non, et les choix se\ncombinent : $2^{20}$ sous-ensembles, environ un million. C'est ce coût qui\nrend le glouton attrayant malgré ses limites.\n"
            },
            {
              "text": "$20^2$, soit $400$",
              "correct": false,
              "feedback": "Erreur : le nombre de sous-ensembles n'est pas un carré mais une\npuissance de deux.\n"
            },
            {
              "text": "$2 \\times 20$, soit $40$",
              "correct": false,
              "feedback": "Erreur : deux choix par objet se multiplient, ils ne\ns'additionnent pas.\n"
            },
            {
              "text": "$20$, un par objet",
              "correct": false,
              "feedback": "Erreur : un sous-ensemble peut contenir plusieurs objets ; il y\nen a bien plus que d'objets.\n"
            }
          ],
          "explanation": "Le nombre de sous-ensembles double à chaque objet ajouté : la\nrecherche exhaustive devient vite impraticable, d'où le recours\naux algorithmes gloutons."
        },
        {
          "statement": "Pour résoudre exactement un sac à dos à $30$ objets, la recherche\nexhaustive examine tous les sous-ensembles d'objets. Combien y en\na-t-il ?",
          "options": [
            {
              "text": "$2^{30}$, soit $1\\,073\\,741\\,824$",
              "correct": true,
              "feedback": "Bonne réponse : chaque objet est pris ou non, et les choix se\ncombinent : $2^{30}$ sous-ensembles, environ un milliard. C'est ce coût qui\nrend le glouton attrayant malgré ses limites.\n"
            },
            {
              "text": "$30^2$, soit $900$",
              "correct": false,
              "feedback": "Erreur : le nombre de sous-ensembles n'est pas un carré mais une\npuissance de deux.\n"
            },
            {
              "text": "$2 \\times 30$, soit $60$",
              "correct": false,
              "feedback": "Erreur : deux choix par objet se multiplient, ils ne\ns'additionnent pas.\n"
            },
            {
              "text": "$30$, un par objet",
              "correct": false,
              "feedback": "Erreur : un sous-ensemble peut contenir plusieurs objets ; il y\nen a bien plus que d'objets.\n"
            }
          ],
          "explanation": "Le nombre de sous-ensembles double à chaque objet ajouté : la\nrecherche exhaustive devient vite impraticable, d'où le recours\naux algorithmes gloutons."
        },
        {
          "statement": "Pour résoudre exactement un sac à dos à $10$ objets, la recherche\nexhaustive examine tous les sous-ensembles d'objets. Combien y en\na-t-il ?",
          "options": [
            {
              "text": "$2^{10}$, soit $1\\,024$",
              "correct": true,
              "feedback": "Bonne réponse : chaque objet est pris ou non, et les choix se\ncombinent : $2^{10}$ sous-ensembles, un peu plus de mille. C'est ce coût qui\nrend le glouton attrayant malgré ses limites.\n"
            },
            {
              "text": "$10^2$, soit $100$",
              "correct": false,
              "feedback": "Erreur : le nombre de sous-ensembles n'est pas un carré mais une\npuissance de deux.\n"
            },
            {
              "text": "$2 \\times 10$, soit $20$",
              "correct": false,
              "feedback": "Erreur : deux choix par objet se multiplient, ils ne\ns'additionnent pas.\n"
            },
            {
              "text": "$10$, un par objet",
              "correct": false,
              "feedback": "Erreur : un sous-ensemble peut contenir plusieurs objets ; il y\nen a bien plus que d'objets.\n"
            }
          ],
          "explanation": "Le nombre de sous-ensembles double à chaque objet ajouté : la\nrecherche exhaustive devient vite impraticable, d'où le recours\naux algorithmes gloutons."
        }
      ]
    }
  ]
}