🧩nsi

Algorithme glouton vs Pile et File : ne confonds plus en NSI

8 juillet 2026 7 min de lecture

Tu as déjà confondu un algorithme glouton avec une pile ou une file ? Pas de panique, c'est super courant en NSI. Pourtant, ces notions sont très différentes : les gloutons sont une stratégie algorithmique, tandis que les piles et files sont des structures de données. Dans cet article, on va démêler tout ça avec des exemples concrets en Python, des astuces pour le bac, et des exercices pour t'entraîner.

1. Qu'est-ce qu'un algorithme glouton ?

Un algorithme glouton (ou greedy) prend la meilleure décision locale à chaque étape, en espérant que cela mène à une solution globale optimale. Il ne revient jamais en arrière : il fait un choix définitif et continue. C'est un peu comme construire une tour en prenant la plus grosse pièce disponible à chaque instant, sans vérifier si une combinaison plus petite serait plus stable.

Exemple classique : le rendu de monnaie

Supposons que tu doives rendre 37 centimes avec des pièces de 20, 10, 5, 2 et 1 centime. L'algorithme glouton prendra d'abord la plus grande pièce possible : 20, puis 10, puis 5, puis 2 (mais 37-20-10-5 = 2, donc une pièce de 2), total 4 pièces. C'est optimal ici. Mais ce n'est pas toujours le cas (ex: pièces 1, 3, 4 pour rendre 6 : glouton donne 4+1+1=3 pièces, alors que 3+3=2 pièces).

def rendu_glouton(somme, pieces):
    pieces.sort(reverse=True)
    rendu = []
    for p in pieces:
        while somme >= p:
            rendu.append(p)
            somme -= p
    return rendu

print(rendu_glouton(37, [1,2,5,10,20]))  # [20, 10, 5, 2]

2. Piles et files : des structures de données

Une pile (stack) fonctionne en LIFO (Last In, First Out) : le dernier élément ajouté est le premier retiré. Une file (queue) fonctionne en FIFO (First In, First Out) : le premier ajouté est le premier retiré. Elles ne sont pas des algorithmes, mais des outils pour organiser des données.

Pile en Python

pile = []
pile.append('a')  # empiler
pile.append('b')
element = pile.pop()  # dépile 'b'
print(pile)  # ['a']

File en Python (avec deque pour efficacité)

from collections import deque
file = deque()
file.append('a')  # enfiler
file.append('b')
element = file.popleft()  # défile 'a'
print(file)  # deque(['b'])

3. Points clés pour ne plus confondre

  • Nature : glouton = stratégie (comment on résout un problème) ; pile/file = structure (comment on organise les données).
  • Objectif : glouton cherche une solution optimale (parfois) ; pile/file gèrent l'ordre de traitement.
  • Combinaison : un algorithme glouton peut utiliser une pile ou une file pour stocker des choix temporaires, mais ce n'est pas obligatoire.

4. Exemple concret : problème du sac à dos fractionnaire

Le problème du sac à dos fractionnaire (où on peut prendre des fractions d'objets) se résout par un algorithme glouton : on prend les objets avec le meilleur rapport valeur/poids. Ici, on n'utilise ni pile ni file, juste un tri et une boucle.

def sac_a_dos_glouton(objets, capacite):
    # objets : liste de tuples (valeur, poids)
    objets_tries = sorted(objets, key=lambda x: x[0]/x[1], reverse=True)
    valeur_totale = 0
    for val, poids in objets_tries:
        if capacite >= poids:
            valeur_totale += val
            capacite -= poids
        else:
            valeur_totale += val * (capacite / poids)
            break
    return valeur_totale

print(sac_a_dos_glouton([(60,10),(100,20),(120,30)], 50))  # 240.0

5. Cas d'usage des piles et files

Pile : vérification de parenthèses

def parentheses_correctes(expression):
    pile = []
    for c in expression:
        if c == '(':
            pile.append(c)
        elif c == ')':
            if not pile:
                return False
            pile.pop()
    return len(pile) == 0

print(parentheses_correctes('(())'))  # True

File : parcours en largeur (BFS) dans un graphe

from collections import deque

def bfs(graphe, depart):
    visites = set()
    file = deque([depart])
    while file:
        sommet = file.popleft()
        if sommet not in visites:
            visites.add(sommet)
            for voisin in graphe[sommet]:
                if voisin not in visites:
                    file.append(voisin)
    return visites

graphe = {0: [1,2], 1: [2], 2: [0,3], 3: [3]}
print(bfs(graphe, 2))  # {0,1,2,3}

6. Conseils pour le bac NSI

Au bac, on te demande souvent de choisir la structure de données adaptée et l'algorithme approprié. Voici comment t'y prendre :

  • Si tu dois traiter des éléments dans l'ordre d'arrivée (premier arrivé, premier servi) → file.
  • Si tu dois traiter en ordre inverse (dernier arrivé, premier servi) → pile.
  • Si tu dois faire un choix local optimal sans revenir en arrière → algorithme glouton.
  • Attention : un glouton peut utiliser une pile ou une file, mais ce n'est pas ce qui le définit.

Pour t'entraîner, consulte nos cours NSI et exercices dédiés. Tu y trouveras des sujets type bac et des corrections détaillées. Et si tu veux approfondir avec des fiches de révision, n'hésite pas à visiter nos fiches.

7. Conclusion

Les algorithmes gloutons et les structures de pile/file sont deux concepts fondamentaux mais distincts. Les premiers sont une méthode de résolution, les secondes des outils de stockage. En les pratiquant avec des exemples concrets, tu verras que la confusion disparaît vite. Continue de coder, et n'oublie pas : le bac NSI, c'est avant tout de la logique et de l'entraînement. Tu gères !

Pour aller plus loin, découvre aussi nos partenaires AlloBac et AlloLycée qui proposent des ressources complémentaires.

📚 Pour aller plus loin

Questions fréquentes

Un algorithme glouton utilise-t-il forcément une pile ou une file ?

Non, un algorithme glouton n'est pas lié à une structure particulière. Il peut utiliser une simple boucle et un tableau. Les piles et files sont des structures de données qui peuvent être utilisées dans un glouton, mais ce n'est pas une obligation.

Quelle est la différence entre un algorithme glouton et un algorithme de backtracking ?

Un glouton fait un choix définitif à chaque étape et ne revient jamais en arrière. Le backtracking explore plusieurs possibilités et revient sur ses choix (backtrack) si une branche échoue. Le glouton est plus rapide mais moins complet.

Peut-on utiliser une file pour implémenter un algorithme glouton ?

Oui, si l'ordre de traitement des éléments est important (par exemple, un glouton qui traite les tâches par ordre de priorité croissante). Mais ce n'est pas la structure qui définit le glouton.

Quels sont les exemples classiques d'algorithmes gloutons au programme NSI ?

Les exemples classiques sont : le rendu de monnaie (système canonique), le problème du sac à dos fractionnaire, l'algorithme de Dijkstra (pour les plus courts chemins), et le codage de Huffman.

Comment savoir si un problème peut être résolu par un algorithme glouton ?

Il faut vérifier la propriété de sous-structure optimale (une solution optimale globale contient des solutions optimales locales) et le choix glouton (choisir localement le meilleur mène à une solution globale). Si c'est vérifié, un glouton peut fonctionner.

Est-ce que les piles et files sont utilisées dans les algorithmes gloutons ?

Parfois, oui. Par exemple, dans l'algorithme de Dijkstra, on utilise une file de priorité (souvent implémentée avec un tas). Mais le cœur de l'algorithme reste glouton : à chaque étape, on choisit le sommet le plus proche.

Bravo ! Tu as lu cet article
Inscris-toi pour sauvegarder ta progression et gagner des XP
Creer mon compte
algorithmes gloutons NSIpile file NSIdifférence glouton pile filerévision NSI terminalebac NSI algorithmique
Pixel