Tu ouvres ton cours de NSI, tu vois écrit « complexité algorithmique » d'un côté et « arbres binaires » de l'autre, et là, c'est le flou. Est-ce que ce sont deux chapitres séparés ? Est-ce que l'un sert à mesurer l'autre ? Bonne nouvelle : en quelques minutes, tu vas comprendre la différence, et surtout comment les relier intelligemment pour l'épreuve du bac. Accroche-toi, on démystifie tout ça.
Deux notions, deux rôles bien distincts
Commençons par poser les bases. Ces deux termes appartiennent au même univers (l'algorithmique), mais ils ne répondent pas du tout à la même question.
La complexité algorithmique : mesurer l'effort
La complexité algorithmique en NSI, c'est l'étude du coût d'un algorithme. En clair : combien de temps (ou de mémoire) ton programme va-t-il consommer en fonction de la taille des données d'entrée ? On note souvent cette taille n. Par exemple, si tu tries une liste de 1000 éléments, combien d'opérations élémentaires vas-tu effectuer ?
On distingue généralement :
- La complexité temporelle : nombre d'opérations en fonction de
n. - La complexité spatiale : quantité de mémoire utilisée.
Et on utilise la notation grand O (par exemple O(n), O(n²), O(log n)) pour décrire cet ordre de grandeur, en ignorant les constantes et les petits détails.
Les arbres binaires : une structure de données
Un arbre binaire, c'est une structure de données hiérarchique où chaque nœud possède au maximum deux enfants (un gauche, un droit). On l'utilise pour représenter des tas de choses : un arbre généalogique, l'organisation d'un système de fichiers, ou encore un arbre binaire de recherche (ABR) qui permet de retrouver une valeur très rapidement.
Un arbre binaire n'est donc pas une mesure de performance : c'est un conteneur. C'est comme comparer une étagère (structure) et un chronomètre (mesure). Tu vois la différence ?
Pourquoi on les confond tout le temps
Le piège vient du fait qu'en NSI, on étudie souvent les algorithmes sur les arbres binaires et qu'on analyse leur complexité. Du coup, dans un même exercice, tu vois les deux termes côte à côte. Résultat : ton cerveau les mélange.
Autre source de confusion : certains arbres binaires (les ABR équilibrés) permettent des recherches en O(log n), ce qui est excellent. Donc quand on parle d'arbre binaire, on parle souvent de performance… mais l'arbre reste la structure, la complexité reste la mesure.
Retiens cette phrase simple : l'arbre binaire est un objet, la complexité est une propriété de l'algorithme qui manipule cet objet.
Exemple Python : parcours d'arbre et coût associé
Rien ne vaut un bon exemple. Voici une classe Python représentant un arbre binaire, puis un parcours en profondeur (DFS). Observe bien comment on sépare la structure (l'arbre) de l'analyse de coût (la complexité).
class Noeud:
def __init__(self, valeur, gauche=None, droite=None):
self.valeur = valeur
self.gauche = gauche
self.droite = droite
# Construction manuelle d'un petit arbre
# 1
# / \
# 2 3
# / \
# 4 5
arbre = Noeud(1,
Noeud(2, Noeud(4), Noeud(5)),
Noeud(3))
def taille(noeud):
"""Renvoie le nombre de nœuds de l'arbre."""
if noeud is None:
return 0
return 1 + taille(noeud.gauche) + taille(noeud.droite)
print(taille(arbre)) # Affiche 5
Ici, la fonction taille parcourt chaque nœud exactement une fois. Si l'arbre contient n nœuds, on effectue n appels récursifs. La complexité temporelle est donc O(n) : linéaire en le nombre de nœuds.
Tu vois la mécanique ? L'arbre est la structure, O(n) est la complexité. Les deux vivent ensemble mais ne se confondent pas.
Cas de l'arbre binaire de recherche (ABR)
Prenons maintenant un ABR, où pour chaque nœud, toutes les valeurs à gauche sont plus petites et toutes celles à droite plus grandes. La recherche d'une valeur devient très efficace :
def rechercher(noeud, cible):
if noeud is None:
return False
if noeud.valeur == cible:
return True
if cible < noeud.valeur:
return rechercher(noeud.gauche, cible)
return rechercher(noeud.droite, cible)
À chaque appel, on divise l'espace de recherche par 2 (on descend d'un niveau). La complexité est O(log n) si l'arbre est équilibré, mais peut dégénérer en O(n) si l'arbre est un simple « peigne » (chaque nœud n'a qu'un enfant). Voilà pourquoi on parle d'arbres équilibrés en NSI.
Mise en pratique : comparer deux algorithmes sur la même donnée
Imaginons que tu doives chercher un élément dans une liste triée. Deux stratégies :
- Recherche linéaire : tu parcours la liste du début à la fin →
O(n). - Recherche dichotomique (sur liste triée) : tu coupes en deux à chaque étape →
O(log n).
Avec un million d'éléments, la recherche linéaire peut faire 1 000 000 d'opérations, la dichotomique environ 20. Le gain est énorme ! C'est exactement le même raisonnement qui s'applique aux ABR équilibrés : à chaque étape, on élimine la moitié des candidats.
Pour t'entraîner à ce genre de comparaison, va jeter un œil aux exercices NSI proposés sur le site : tu y trouveras des situations concrètes.
Méthode de révision : ne plus jamais confondre
Voici une petite routine pour ancrer la distinction dans ta tête :
- Fais une fiche mémo avec deux colonnes : à gauche « structures de données » (listes, piles, files, arbres, graphes), à droite « mesures de performance » (complexité temporelle, spatiale, notations O).
- Entraîne-toi à calculer le coût de chaque algorithme que tu écris : boucle simple →
O(n), boucle imbriquée →O(n²), récursion divisant par 2 →O(log n). - Code les parcours d'arbres (préfixe, infixe, suffixe) et demande-toi à chaque fois : combien d'appels récursifs ? Quelle complexité ?
- Utilise les fiches de révision NSI pour réviser les définitions clés avant un contrôle.
Lien avec l'épreuve du bac NSI
Au bac, on te demandera rarement de calculer une complexité formelle compliquée. En revanche, on peut te demander :
- D'écrire une fonction récursive sur un arbre binaire.
- De justifier la complexité d'un algorithme de recherche ou de tri.
- De comparer deux structures de données selon leur coût d'utilisation.
Tu dois donc être capable de passer d'un arbre binaire à une analyse de complexité sans t'emmêler les pinceaux. Pour approfondir, le cours NSI en ligne couvre ces deux chapitres en détail, avec des schémas.
Si tu veux aussi consolider tes bases en algorithmique générale, jette un œil aux ressources d'Allolycée : elles complètent bien le programme. Et pour préparer l'oral ou l'écrit du bac, Allobac propose des fiches méthodologiques utiles.
Conclusion : deux notions, un seul objectif
Tu l'as compris : la complexité algorithmique NSI mesure l'efficacité d'un algorithme, tandis que les arbres binaires sont une structure de données. Ils ne sont pas concurrents, ils sont complémentaires. Un bon informaticien choisit la bonne structure (arbre binaire, liste, dictionnaire) en fonction du coût qu'il est prêt à accepter.
Alors, la prochaine fois que tu vois ces deux termes dans un même exercice, souris : tu sais maintenant que l'un est l'outil, l'autre est la règle du jeu. Continue à coder, à tester, à mesurer, et tu verras que tout devient plus clair. Tu as toutes les cartes en main !
