Fiche de cours

Choisir une structure de données en fonction de la situation

Lycée   >   Terminale   >   NSI   >   Choisir une structure de données en fonction de la situation

  • Fiche de cours
  • Quiz et exercices
  • Vidéos et podcasts
Objectif

Choisir une structure de données adaptée à la situation à modéliser.

Points clés
  • Le choix d’une structure de données a une influence sur la performance d’un algorithme.
  • La liste n'est pas adaptée pour accéder à un élément quelconque, car il faut la parcourir.
  • La liste est intéressante si on doit supprimer ou insérer régulièrement des données.
  • Si on doit ajouter ou retirer des éléments en tête de liste, on utilise la pile.
  • Si on doit insérer des éléments d'un côté et les retirer de l'autre, on utilise la file.
  • Le dictionnaire est très efficace dans la recherche d’un élément à partir de sa clé, et dans l’insertion d’un couple du type (clé,élément).
  • Les arbres équilibrés sont à privilégier pour :
    • récupérer un maximum ou minimum (il suffit de regarder la racine) ;
    • insérer d'un élément.
  • Un arbre binaire de recherche permet de représenter une collection triée de données. Cette structure est très utilisée pour rechercher et insérer des éléments dans un ensemble trié au préalable.
Pour bien comprendre
  • Pile, file, liste, dictionnaire
  • Les arbres
  • Les graphes
1. L'importance du choix d'une structure de données
a. Principe

Avant de se lancer dans l’écriture d’un programme, il faut se poser la question du choix de la structure de données : le but est de choisir une structure de données qui permette à l’algorithme d’être le plus efficace possible.

On va généralement retrouver des opérations dites usuelles comme la recherche d’un élément, un tri, etc.

Certaines structures sont plus adaptées que d’autres, en particulier lorsqu’on doit appliquer les mêmes opérations un très grand nombre de fois. Il faut donc parfois choisir un tableau plutôt qu’une liste, une pile plutôt qu’une liste, etc.

b. Les primitives

Pour pouvoir faire le bon choix, il faut étudier les différentes règles que les données doivent respecter. Avant de se lancer dans le choix, il faut lister ce dont on a besoin, c’est-à-dire déterminer les opérations (primitives) de la structure de données.

c. La complexité temporelle

Si on a un doute entre deux structures de données, on peut implémenter les deux structures et faire des tests empiriques (sur des exemples bien choisis) sur la complexité temporelle.

Principe
Étudier la complexité temporelle d’un algorithme consiste à estimer le temps d’exécution de cet algorithme.
La complexité temporelle d’un algorithme dépend directement de la taille de la ou des données traitées.

Étudier ce cout en temps revient à estimer le nombre d’affectations, le nombre de comparaisons et d’opérations nécessaires à l’exécution de l’algorithme.
  • Une affectation est une procédure qui permet d’attribuer une valeur à une variable.
  • Une comparaison est une instruction qui met en jeu deux variables et qui renvoie True ou False (vrai ou faux).
  • Une opération est une instruction qui utilise +*///% ou **.
Exemple
La complexité temporelle du tri par sélection est quadratique. C’est-à-dire que, pour un tableau de taille n, l’ordre de grandeur du temps du tri est n2. On dit que la complexité temporelle du tri par insertion est en O(n2).
Remarque
Dans la suite de cette fiche, on donne pour chaque type de structure de données la complexité temporelle des opérations les plus utilisées ; Ces complexités temporelles sont à connaitre par cœur, mais il n’est pas exigé de connaitre leur explication en terminale.

On peut ainsi comparer ces structures de données et faire un choix.

2. Les structures linéaires
a. Principe d'une structure linéaire (rappels)
Une structure est qualifiée de linéaire lorsqu’on peut avoir une fonction successeur qui associe à chacun de ses éléments (sauf pour le dernier) un unique autre élément de la même structure (l'élément suivant).

On doit de plus pouvoir parcourir l'intégralité de la structure à l'aide de cette fonction successeur, sans passer deux fois par le même élément. Cela repose sur une notion que l’on nomme « liste chainée ».

b. Liste, pile et file (rappels)

La liste, la pile et la file sont des structures linéaires.

Liste
Une liste est un objet qui peut contenir différents objets de n’importe quel type. On repère un objet à l’intérieur d’une liste par rapport à sa place, en n’oubliant pas qu’en informatique le premier est à l’indice 0.
Exemple
Voici une liste qui représente les notes d’un élève : [10, 11.5, 13.1]
Pile
Une pile (stack en anglais) est une structure de données fondée sur le principe du « dernier arrivé, premier sorti », en anglais « Last In, First Out », que l’on abrège en LIFO.
Exemple
Voici une pile qui représente les notes d’un élève.
On « empile » les notes.
File
Une file (queue en anglais) est une structure de données basée sur le principe « premier entré, premier sorti », en anglais « First In, First Out », que l’on abrège en FIFO.
Exemple
Voici une file qui représente les sites visités lors d’une navigation sur le web.
c. Choisir entre une liste, une pile et une file
Quelle structure linéaire faut-il choisir ?
  • La liste n'est pas adaptée pour accéder à un élément quelconque, car il faut la parcourir.
  • La liste est intéressante si on doit supprimer ou insérer régulièrement des données.
  • Si on doit ajouter ou retirer des éléments en tête de liste, on utilise la pile (car elle respecte le principe « dernier arrivé, premier sorti »).
  • Si on doit insérer des éléments d'un côté et les retirer de l'autre, on utilise la file (car elle respecte le principe « premier entré, premier sorti »).
La complexité temporelle de quelques opérations

Voici la complexité temporelle de quelques opérations utilisées par les structures linéaires.

  • Accéder à un élément quelconque : O(n)
  • Insérer un élément : O(1)
  • Supprimer un élément : O(1)
3. Les dictionnaires
a. Principe d'un dictionnaire (rappel)

Un dictionnaire est une sorte de liste, mais au lieu d'être indexé, un dictionnaire utilise des clés : il s’agit de valeurs non mutables pour repérer et stocker des éléments appelés valeurs, qui peuvent être des nombres, des caractères mais aussi des p-uplets.

Un dictionnaire est un ensemble de couples clé:valeur, qui est délimité par des {}. Une clé ne peut être modifiée.
Exemple
La variable informaticiens référence un dictionnaire qui contient le nom d’informaticiens et leur année de naissance.

informaticiens={“Cynthia Dwork”:1958,“Marvin Minsky”:1927}

Dans ce dictionnaire, Cynthia Dwork et Marvin Minsky sont des clés, auxquelles sont associées les valeurs 1958 et 1927.
b. Choisir le dictionnaire
Dans quels cas faut-il choisir un dictionnaire ?

Les dictionnaires permettent de faire facilement des associations entre différents éléments. L’implémentation de cette structure de données se fait par l’intermédiaire d’une fonction de hachage (celle-ci permet d’accéder directement à la valeur).

Le dictionnaire est très efficace dans la recherche d’un élément à partir de sa clé, et dans l’insertion d’un couple du type (clé,élément).

La complexité temporelle de quelques opérations

Voici la complexité temporelle de quelques opérations utilisées par les dictionnaires.

  • Insérer un élément : O(1)
  • Rechercher un élément : O(1)
4. Les arbres
Un arbre est une structure hiérarchique constituée de nœuds reliés entre eux par des branches, telle que chaque nœud a un père et un seul, à l’exception d’un nœud appelé racine. Chaque nœud porte une information appelée étiquette, valeur ou clé.
a. Arbre binaire équilibré
Principe d’un arbre binaire équilibré
Rappel
Dans un arbre binaire, chaque nœud comporte au plus deux nœuds fils.
On parle d’un arbre équilibré si chaque parent a une valeur plus grande (ou plus petite) que ses fils. Le maximum (respectivement le minimum) correspondra donc à la racine.
Exemple
Le maximum correspond ici à la racine, donc à 4.
Choisir l’arbre binaire équilibré
Dans quels cas faut-il choisir un arbre binaire équilibré ?

Les arbres équilibrés sont à privilégier pour :

  • récupérer un maximum ou minimum (il suffit de regarder la racine) ;
  • insérer d'un élément (il suffit de regarder les valeurs pour placer l’élément).
La complexité temporelle de quelques opérations

Voici la complexité temporelle de quelques opérations utilisées par les arbres binaires équilibrés.

  • Lire le maximum ou minimum : O(1)
  • Supprimer le maximum ou le minimum : O(log n)
  • Insérer un élément : O(log n)
b. Arbre binaire de recherche
Principe d’un arbre binaire de recherche (rappel)
Dans un arbre binaire de recherche (ABR), chaque nœud a au plus deux enfants ordonnés de la manière suivante.
  • Les enfants à gauche d’un nœud ont des valeurs inférieures à lui.
  • Les enfants à droite d’un nœud ont des valeurs supérieures à lui.

Cette relation entre les deux enfants d’un nœud se retrouve de manière récursive à tous les nœuds de l’arbre.

Exemple
L’arbre suivant est un arbre binaire de recherche.

Le sous-arbre gauche de cet arbre est en effet le suivant.

C’est un ABR car la racine est 1 et on a :
  • à gauche : 0 ≤ racine :
  • à droite : 2 > racine.
Également, le sous-arbre droit de cet arbre est le suivant.

C’est un ABR car la racine est 5 et on a :
  • à gauche : 4 ≤ racine ;
  • à droite : 6 > racine.
Et enfin, si on considère 3, la racine de l’arbre, on a :
  • à gauche : 1 ≤ racine (le fils gauche de la racine est inférieur ou égal à la racine) ;
  • à droite : 5 > racine (le fils droit de la racine est supérieur à la racine).
Choisir un arbre binaire de recherche
Dans quels cas faut-il choisir un arbre binaire de recherche ?

Un arbre binaire de recherche permet de représenter une collection triée de données. On ne doit l’utiliser que pour des données qui sont comparables.

Cette structure de données est très utilisée pour rechercher et insérer des éléments dans un ensemble trié au préalable.

La complexité temporelle de quelques opérations

Voici la complexité temporelle de quelques opérations utilisées par les arbres binaires de recherche.

  • Lire le maximum ou minimum : O(1)
  • Insérer un élément dans un ABR : O(log n)
  • Rechercher un élément dans un ABR : O(log n)

Évalue ce cours !

 

Des quiz et exercices pour mieux assimiler sa leçon

La plateforme de soutien scolaire en ligne myMaxicours propose des quiz et exercices en accompagnement de chaque fiche de cours. Les exercices permettent de vérifier si la leçon est bien comprise ou s’il reste encore des notions à revoir.

S’abonner

 

Des exercices variés pour ne pas s’ennuyer

Les exercices se déclinent sous toutes leurs formes sur myMaxicours ! Selon la matière et la classe étudiées, retrouvez des dictées, des mots à relier ou encore des phrases à compléter, mais aussi des textes à trous et bien d’autres formats !

Dans les classes de primaire, l’accent est mis sur des exercices illustrés très ludiques pour motiver les plus jeunes.

S’abonner

 

Des quiz pour une évaluation en direct

Les quiz et exercices permettent d’avoir un retour immédiat sur la bonne compréhension du cours. Une fois toutes les réponses communiquées, le résultat s’affiche à l’écran et permet à l’élève de se situer immédiatement.

myMaxicours offre des solutions efficaces de révision grâce aux fiches de cours et aux exercices associés. L’élève se rassure pour le prochain examen en testant ses connaissances au préalable.

S’abonner

Des vidéos et des podcasts pour apprendre différemment

Certains élèves ont une mémoire visuelle quand d’autres ont plutôt une mémoire auditive. myMaxicours s’adapte à tous les enfants et adolescents pour leur proposer un apprentissage serein et efficace.

Découvrez de nombreuses vidéos et podcasts en complément des fiches de cours et des exercices pour une année scolaire au top !

S’abonner

 

Des podcasts pour les révisions

La plateforme de soutien scolaire en ligne myMaxicours propose des podcasts de révision pour toutes les classes à examen : troisième, première et terminale.

Les ados peuvent écouter les différents cours afin de mieux les mémoriser en préparation de leurs examens. Des fiches de cours de différentes matières sont disponibles en podcasts ainsi qu’une préparation au grand oral avec de nombreux conseils pratiques.

S’abonner

 

Des vidéos de cours pour comprendre en image

Des vidéos de cours illustrent les notions principales à retenir et complètent les fiches de cours. De quoi réviser sa prochaine évaluation ou son prochain examen en toute confiance !

S’abonner

Découvrez le soutien scolaire en ligne avec myMaxicours

Plongez dans l'univers de myMaxicours et découvrez une approche innovante du soutien scolaire en ligne, conçue pour captiver et éduquer les élèves de CP à la terminale. Notre plateforme se distingue par une riche sélection de contenus interactifs et ludiques, élaborés pour stimuler la concentration et la motivation à travers des parcours d'apprentissage adaptés à chaque tranche d'âge. Chez myMaxicours, nous croyons en une éducation où chaque élève trouve sa place, progresse à son rythme et développe sa confiance en soi dans un environnement bienveillant.

Profitez d'un accès direct à nos Profs en ligne pour une assistance personnalisée, ou explorez nos exercices et corrigés pour renforcer vos connaissances. Notre assistance scolaire en ligne est conçue pour vous accompagner à chaque étape de votre parcours éducatif, tandis que nos vidéos et fiches de cours offrent des explications claires et concises sur une multitude de sujets. Avec myMaxicours, avancez sereinement sur le chemin de la réussite scolaire, armé des meilleurs outils et du soutien de professionnels dédiés à votre épanouissement académique.

Fiches de cours les plus recherchées

NSI

Rechercher une valeur dans une liste et dans un dictionnaire

NSI

Comprendre la structure hiérarchique des arbres binaires

NSI

Étudier et implémenter un arbre binaire

NSI

Utiliser des arbres binaires de recherche

NSI

Comprendre la structure des graphes

NSI

Implémenter un graphe

NSI

Passer d'une représentation d'un graphe à une autre

NSI

Comprendre le modèle relationnel d'une base de données

NSI

Utiliser l'algèbre relationnel dans une base de données relationnelle

NSI

Repérer des anomalies dans une base de données relationnelle