💻 NSI - Tle

NSI — Classe de terminale

Programme officiel de terminale générale — 13 chapitres

Chapitre 1 — Structures de données : listes, piles et files

I. La liste Python : indexation et coût des opérations

Définition Une liste est une séquence ordonnée et modifiable d'éléments, numérotés à partir de 0. En Python, une liste est représentée en mémoire par un tableau de références contiguës : connaître l'indice d'un élément suffit pour y accéder directement, sans parcourir les éléments qui le précèdent.
Propriété Sur une liste de longueur n : l'accès t[i] et l'affectation t[i] = x se font en O(1) ; l'ajout ou le retrait en fin de liste (append, pop()) se font en O(1) amorti ; l'insertion ou la suppression en début ou au milieu (insert(0, x), pop(0)) se font en O(n), car il faut décaler tous les éléments suivants d'une case.
Exemple Testé avec python3 :
>>> pile = []
>>> pile.append("a")
>>> pile.append("b")
>>> pile.append("c")
>>> pile
['a', 'b', 'c']
>>> pile.pop()
'c'
>>> pile
['a', 'b']
Retirer le dernier élément avec pop() ne demande aucun décalage : c'est une opération en O(1). Retirer le premier élément avec pop(0) obligerait au contraire à décaler tous les éléments restants d'un rang vers la gauche, en O(n).

II. La pile : principe LIFO et utilisations

Définition Une pile (stack) est une structure de données dans laquelle on ne peut ajouter ou retirer un élément que d'un seul côté, appelé sommet. Elle obéit au principe LIFO (Last In, First Out) : le dernier élément empilé est le premier dépilé. En Python, une liste suffit à représenter une pile : append empile, pop() dépile.

Les piles interviennent dès qu'un traitement doit « revenir en arrière » dans l'ordre inverse de ce qui a été fait : la pile d'appels d'un programme qui exécute des fonctions récursives (chapitre 6), le bouton « précédent » d'un navigateur, ou encore la vérification qu'une expression comporte des parenthèses, crochets et accolades correctement imbriqués.

Exemple Testé avec python3 :
>>> def parentheses_equilibrees(expression):
...     pile = []
...     paires = {"(": ")", "[": "]", "{": "}"}
...     for car in expression:
...         if car in "([{":
...             pile.append(car)
...         elif car in ")]}":
...             if not pile:
...                 return False
...             ouvrant = pile.pop()
...             if paires[ouvrant] != car:
...                 return False
...     return not pile
...
>>> parentheses_equilibrees("(a[b]{c})")
True
>>> parentheses_equilibrees("(a[b)c]")
False
Dans le second appel, en arrivant sur le caractère ), on dépile [ : comme il ne correspond pas à ), la fonction renvoie immédiatement False. Empiler et dépiler coûtent chacun O(1) ; le parcours complet d'une expression de longueur n coûte donc O(n).

III. La file : principe FIFO et implémentation avec deque

Définition Une file (queue) obéit au principe FIFO (First In, First Out) : le premier élément enfilé est le premier défilé, exactement comme une file d'attente. On ajoute un élément à l'arrière et on retire à l'avant.
Attention Une liste Python n'est pas une bonne représentation d'une file : défiler avec t.pop(0) coûte O(n), car tous les éléments restants doivent être décalés. On utilise plutôt une file double du module collections, la classe deque, dont les opérations append (enfiler à droite) et popleft (défiler à gauche) coûtent toutes deux O(1).
Exemple Testé avec python3 :
>>> from collections import deque
>>> file_attente = deque()
>>> file_attente.append("Alice")
>>> file_attente.append("Bilal")
>>> file_attente.append("Chloé")
>>> file_attente
deque(['Alice', 'Bilal', 'Chloé'])
>>> file_attente.popleft()
'Alice'
>>> file_attente
deque(['Bilal', 'Chloé'])
C'est Alice, arrivée la première, qui est servie la première : c'est la définition même du FIFO. On retrouvera la file au chapitre 5 pour le parcours en largeur d'un graphe, qui explore les sommets dans l'ordre où ils ont été découverts.
Méthode : choisir la structure adaptée à un problème
  1. Identifie l'ordre dans lequel les éléments doivent être traités : le plus récent d'abord, ou le plus ancien d'abord ?
  2. Si c'est le plus récent d'abord, choisis une pile (LIFO).
  3. Si c'est le plus ancien d'abord, choisis une file (FIFO), implémentée avec deque.
  4. Vérifie la complexité des opérations nécessaires (ajout, retrait, accès) avant de valider ton choix.
Vocabulaire Empiler / dépiler : ajouter / retirer un élément au sommet d'une pile ; enfiler / défiler : ajouter à l'arrière / retirer à l'avant d'une file ; LIFO : Last In, First Out ; FIFO : First In, First Out ; complexité amortie : coût moyen d'une opération répétée un grand nombre de fois.
Pile (LIFO) a b c (sommet) empiler / dépiler ici File (FIFO) Alice Bilal Chloé défiler (popleft) enfiler (append)
La pile retire l'élément le plus récent (sommet) ; la file retire l'élément le plus ancien (avant).
🔒

12 chapitres font partie de l'abonnement

Le premier chapitre de chaque matière reste accessible gratuitement. L'inscription ouvre 7 jours d'accès complet, sans engagement.

  • Chapitre 2 — Dictionnaires, index et clés
  • Chapitre 3 — Arbres : vocabulaire, structure et parcours
  • Chapitre 4 — Arbres binaires de recherche
  • Chapitre 5 — Graphes : représentation et parcours
  • Chapitre 6 — Récursivité
  • Chapitre 7 — Diviser pour régner
  • Chapitre 8 — Programmation dynamique
  • Chapitre 9 — Recherche textuelle
  • Chapitre 10 — Modularité, mise au point et tests
  • Chapitre 11 — Bases de données relationnelles et SQL
  • Chapitre 12 — Architectures matérielles, systèmes d'exploitation et processus
  • Chapitre 13 — Protocoles de routage et sécurisation des communications
Voir les formules — 6,99 €/mois