[email protected] http://x.heurtebise.free.fr
Objectifs de ce cours
• Appréhender les notions de complexité et de récursivité
• Aborder des techniques algorithmiques avancées
• Appréhender les différentes structures de données
• Mettre en œuvre des algorithmes
• Apprentissage du langage JAVASCRIPT2
Organisation de ce cours
• Ce cours, d’un total de 24h, est composé de :
• des enseignements suivants :• 4h de CM• 6h de TD• 10h de TP (avec suivi)
• et pour évaluer ce cours :• 2h de contrôle continu (algorithmes + questions de cours)• 2h de TP noté (programmes en JAVASCRIPT)
3Total : 24h
Plan de ce cours
1. Notion de complexité
2. Récursivité
3. Structures de données1. Tableaux2. Listes3. Files4. Piles5. Arbres6. Fichiers
4
Chapitre 1
1. Notion de complexité
• Introduire la notion de complexité
• Comprendre le lien entre :
• la complexité algorithmique
• l’efficacité d’un algorithme
6
Objectifs
1. Notion de complexité
• Pour un problème donné, on cherche le meilleur algorithme(agissant sur des données de très grande taille)
• On détermine une mesure de coût qui rende compte de lacomplexité de l’algorithme INDEPENDAMMENT du langagede programmation et de la machine utilisés
Coût = f ( temps, place mémoire )
7
Définition
1. Notion de complexité
• Le temps d’exécution est proportionnel au nombred’opérations élémentaires dénombrer les opérations
• Opérations séquentielles (affectation, opérations mathématiques)• Dénombrement simple
• Tests conditionnels (si condition alors… sinon…)• Majorant du coût = coût de la branche la plus coûteuse
• Boucles (pour…, tant que…)• Dénombrement du nombre de passages dans la boucle
(en tenant compte de la condition d’arrêt éventuelle)
• Procédures et fonctions récursives• Résolution d’une équation de récurrence... 8
Mesure de coût
1. Notion de complexité
• Calcul du produit matriciel C, de deux matrices A et B detaille N × N
9
Exemple
Pour i allant de 1 à N FairePour j allant de 1 à N Faire
C[i,j] ← 0
Pour k allant de 1 à N FaireC[i,j] ← C[i,j] + A[i,k]*B[k,j]
FinPourFinPour
FinPour
Complexité : N
1. Notion de complexité
• Calcul du produit matriciel C, de deux matrices A et B detaille N × N
10
Exemple
Pour i allant de 1 à N FairePour j allant de 1 à N Faire
C[i,j] ← 0
Pour k allant de 1 à N FaireC[i,j] ← C[i,j] + A[i,k]*B[k,j]
FinPourFinPour
FinPour
Complexité : N x N = N2
1. Notion de complexité
• Calcul du produit matriciel C, de deux matrices A et B detaille N × N
• Complexité totale : N3
11
Exemple
Pour i allant de 1 à N FairePour j allant de 1 à N Faire
C[i,j] ← 0
Pour k allant de 1 à N FaireC[i,j] ← C[i,j] + A[i,k]*B[k,j]
FinPourFinPour
FinPour
Complexité : N2 x N = N3
1. Notion de complexité
12
Notation et types de complexité
Notation Type de complexitéO ( 1 ) constanteO ( log(n) ) logarithmiqueO ( n ) linéaireO ( n x log(n) ) quasi-linéaireO ( n2 ) quadratiqueO ( n3 ) cubiqueO ( np ) polynomialeO ( nlog(n) ) quasi-polynomialeO ( 2n ) exponentielleO ( n! ) factorielle
1. Notion de complexité
13
Comparaison des complexités
1 log(n) n n x log(n) n2 n3 2n
n = 102 ~ 1 µs 6.6 µs 0.1 ms 0.6 ms 10 ms 1 s 4 x 1016 a
n = 103 ~ 1 µs 9.9 µs 1 ms 9.9 ms 1 s 17 min 4 x 10296 a
n = 104 ~ 1 µs 13.3 µs 10 ms 0.1 s 100 s 11.5 j ∞
n = 105 ~ 1 µs 16.6 µs 0.1 s 1.6 s 2.7 h 31.7 a ∞
n = 106 ~ 1 µs 19.9 µs 1 s 19.9 s 11.5 j 317 siècles ∞
1. Notion de complexité
• But• Écrire des algorithmes simples
dont la complexité peut être déterminé facilement
• Calculs de la complexité d’un algorithme• Dénombrer les opérations élémentaires• Liée à la taille N des données
• Algorithme performant = fonction de sa complexité• Permet d’éviter les algorithmes dont les temps de calcul
risquent de devenir un véritable problème
14
Conclusion sur la complexité
Chapitre 2
2. Notion de récursivité
• Fonction récursive• Notion vue au premier semestre, dans le cours « Algorithmique 1 »
• But• Rappeler ce qu’est un algorithme récursif.• Donner les caractéristiques d’un algorithme récursif.
16
Objectifs
2. Notion de récursivité
• Les algorithmes récursifs sont fondamentaux en informatique.
• Définition• Un algorithme est dit récursif s'il s'appelle lui-même.
• On oppose généralement :• les algorithmes récursifs
• l’algorithme récursif s’appelle lui-même
• les algorithmes impératifs (ou itératifs)• l’algorithme itératif s'exécute sans s’invoquer ou s’appeler explicitement lui-même.
17
Définition
• Prenons maintenant un exemple issu des mathématiques, celui de lafactorielle. Celle-ci peut se traduire par le programme ci-dessous :
2. Notion de récursivité
18
Exemple
Fonction factoriel(→n : Entier) : EntierDonnée : n un entier (n≥0)Résultat : Calcul la factorielle de nVariable locale : aucune
DébutSi n<1 Alors Retourner 1Sinon Retourner n × factoriel(n-1)
Fin
2. Notion de récursivité
• Le mode d'appel : direct / indirect
• Un algorithme récursif qui dansson corps s'appelle lui-mêmeest dit direct.
• Un algorithme récursif estdit indirect s'il est défini parun ensemble de fonctionsqui s'appellent en chaîne.
19
Les 4 caractéristiques
Fonction algo_direct(→n : Entier) : EntierDébut
… algo_direct(n-1) …
Fin
Fonction fonction_annexe(→n : Entier) : EntierDébut
… algo_indirect(n-1) …
Fin
Fonction algo_indirect(→n : Entier) : EntierDébut
… fonction_annexe(n-1) …
Fin
2. Notion de récursivité
• Le nombre de paramètres sur lesquels porte la récursion : arité• L'arité d'un algorithme est le nombre de paramètres d'entrée.
• Un algorithme récursif peut effectuer des appels récursifs en modifiant unnombre quelconque non nul de ses paramètres.
• Exemples• Fonction « factorielle »
• L'algorithme prend un seul paramètre d'entrée et le modifie lors des appels récursifs.
• Fonction « puissance entière »• L'algorithme prend deux entrées, la base et l'exposant.• Dans les appels récursifs, seul l'exposant est modifié.
20
Les 4 caractéristiques
Fonction algo_récursif(→param1, →param2 : Entier) : EntierDébut
…
Fin
Arité : 2 (binaire)
2. Notion de récursivité
• Le nombre d'appels récursifs : ordre de récursion• Si pour déterminer la valeur d'un appel, on a besoin que d'un seul appel
récursif, alors les algorithmes sont dits d'ordre 1.
• Certains algorithmes font plusieurs appels récursifs.• Exemple de la version naïve du calcul de la suite de Fibonacci (Cf TD)
• Celle-ci doit faire deux appels récursifs• une fois avec le paramètre n-1• une seconde fois avec le paramètre n-2 pour calculer une valeur de retour
• C'est un algorithme récursif d'ordre 2.
21
Les 4 caractéristiques
Fonction Fibonacci(→n : Entier) : EntierDébut
Si n=0 ou n=1 Alors Retourner 1
Sinon Retourner Fibonacci(n-1) + Fibonacci(n-2)Fin
Ordre de récursion : 2
2. Notion de récursivité
• Le genre de retour : terminal/non terminal• Un algorithme est dit terminal si les valeurs de retour sont
• Soit des valeurs fixes (nombres définis ou contenu d’une variable)• Soit des valeurs directement issues d'un appel récursif, sans aucune modification
• Dans le cas contraire, il sera dit non-terminal.
22
Les 4 caractéristiques
Fonction ajouter(→x, →y : Entier) : EntierDébut
Si y=0 Alors Retourner x
Sinon Retourner ajouter(x,y-1) + 1Fin
Fonction ajouter(→x, →y : Entier) : EntierDébut
Si y=0 Alors Retourner x
Sinon Retourner ajouter(x+1,y-1)Fin
Chapitre 3
3. Structure de données
• But : Étudier les structures de données suivantes :• Ensemble de données ordonnées : Tableaux et Listes• Gestion de listes d’attente : Files et Piles• Gestion d’arborescence : Arbres• Gestion de fichiers : Fichiers
• But : Étudier les algorithmes associés à ces structures :• Parcours• Mise à jour : insertion et suppression de données• Algorithme de gestion (ex : tri)
24
Les différentes structures
3. Structure de données
25
Plan
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les tableaux
• Exemple• Imaginons un programme qui calcule la moyenne de 12 notes.• Évidemment, une solution simple consiste à déclarer 12
variables, appelées par exemple N1, N2, N3…• Le calcul de la moyenne peut devenir très laborieux :
• Moy ← (N1+N2+N3+N4+N5+N6+N7+N8+N9+N10+N11+N12)/12• Ouf ! C’est tout de même bigrement laborieux. Imaginez avec
quelques centaines ou quelques milliers de valeurs à traiter !!! • Cerise sur le gâteau :
• Si en plus on ne peut pas savoir d’avance combien il y aura devaleurs à traiter, alors que faire ?
26
Problématique
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les tableaux
• Notion de tableau à une dimension :• Variable qui permet de stocker plusieurs valeurs du même type
• Chaque valeur assignée au tableau doit être du même type quele type déclaré pour le tableau
Tableau nom[taille] : Type
• Chaque élément d’un tableau est noté : nom[i]avec i variant de 0 à N-1 (si N est la taille du tableau)
27
Notion de tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
• Notion de tableau à une dimension :• Variable qui permet de stocker plusieurs valeurs du même type,
sous forme d’une liste :
• Chaque valeur assignée au tableau doit être du même type quele type déclaré pour le tableau
Tableau nom[taille] : Type
• Chaque élément d’un tableau est noté : nom[i]avec i entre 0 et N-1 (si N est la taille du tableau)
3. Structure de données > Les tableaux
28
Notion de tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
val1 val2 val3 … … … … … … valN
val1 val2 val3 … … … … … … valN
[0] [1] [2] … … … … … … [N-1]
• Notion de tableau à 2 dimensions :• Variable qui permet de stocker
plusieurs valeurs du même type,sous forme d’une matrice.
• Chaque valeur assignée au tableau doit être du même type quele type déclaré pour le tableau
Tableau nom[nb_lignes,nb_colonnes] : Type
• Chaque élément d’un tableau est noté : nom[i,j] ou nom[i][j]• i correspond à l’indice des lignes
i entre 0 et N-1 (N = nb de lignes)• j correspond à l’indice des colonnes
j entre 0 et M-1 (M = nb de colonnes)
3. Structure de données > Les tableaux
29
Notion de tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
val1 val2 … …
… … … …
… … … valN
[0,0] [0,1] … [0,M-1]
[1,0] [1,1] … [1,M-1]
… … … …
[N-1,0] [N-1,1] … [N-1,M-1]
3. Structure de données > Les tableaux
• L’accès à un élément d’un tableau se fait• en précisant les coordonnées de la case à traiter
• En une dimension : nom[i]• En deux dimensions : nom[i,j] ou nom[i][j]• En trois dimensions : nom[i,j,k] ou nom[i][j][k]• …• En N dimensions : nom[i,j,…,n] ou nom[i][j][…][n]
• en temps constant• Complexité de parcours : O(1)
30
Accès à une donnée
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les tableaux
• Algorithme de calcul de la moyenne des valeurs d’un tableau
31
Accès à une donnée
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Fonction Moyenne(→Tableau T[T_MAX] : Réels) : Réel
Donnée : T un tableau de réels de taille T_MAXRésultat : Moyenne, un réel, des valeurs du tableau TVariable locale : i un entier, Somme un réel
Début// Somme de toutes les valeurs du tableau TSomme ← 0Pour i allant de 0 à T_MAX-1 Faire
Somme ← Somme + T[i]
FinSi
// Moyenne des valeurs du tableau T
Moyenne ← Somme / T_MAX
// On retourne le résultat
Retourner Moyenne
Fin
Complexité : N
3. Structure de données > Les tableaux
• Algorithme d’insertion d’un nombre dans un tableau
32
Insertion d’une donnée
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
1 2 8 4
1 2 8 4
5
1 2 5 8 4
Position d’insertion
Décalage vers la droite des éléments après la position d’insertion
Insertion du nouvel élément dans la case vide
Procédure Insérer(→v : Réels, p : Entier, ↔Tableau T[T_MAX] : Réels)
Donnée : p>0, T un tableau de réels de taille T_MAXRésultat : Insère v à la position p dans le tableau TVariable locale : i un entier
DébutSi ( p>=0 ou p<T_MAX )Alors
Pour i allant de T_MAX-2 à p FaireT[i+1] ← T[i]
FinPourT[p] ← v
FinSiFin
Complexité : N
3. Structure de données > Les tableaux
• Algorithme d’insertion d’un nombre dans un tableau
• Complexité de mise à jour (insertion) : O(n) 33
Insertion d’une donnée
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
1 2 8 4
1 2 8 4
5
1 2 5 8 4
Position d’insertion
Décalage vers la droite des éléments après la position d’insertion
Insertion du nouvel élément dans la case vide
Procédure Insérer(→v : Réels, p : Entier, ↔Tableau T[T_MAX] : Réels)
Donnée : p>0, T un tableau de réels de taille T_MAXRésultat : Insère v à la position p dans le tableau TVariable locale : i un entier
DébutSi ( p>=0 ou p<T_MAX )Alors
Pour i allant de T_MAX-2 à p FaireT[i+1] ← T[i]
FinPourT[p] ← v
FinSiFin
Complexité : N
3. Structure de données > Les tableaux
• Algorithme de suppression d’un nombre dans un tableau
34
Suppression d’une donnée
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Procédure Supprimer(→p : Entier, ↔Tableau T[T_MAX] : Réels)Donnée : p>0, T un tableau de réels de taille T_MAXRésultat : Supprimer une valeur à la pos° p dans le tableau TVariable locale : i un entier
DébutSi ( p>=0 ou p<T_MAX )Alors
Pour i allant de p à T_MAX-2 FaireT[i] ← T[i+1]
FinPourFinSi
Fin1 2 8 4
1 2 8 4
5
1 2 5 8 4
Position de suppression
Extraction et suppression de l’élément sélectionné
Décalage vers la gauche des éléments après la case vide
Complexité : N
3. Structure de données > Les tableaux
• Algorithme de suppression d’un nombre dans un tableau
• Complexité de mise à jour (suppression) : O(n) 35
Suppression d’une donnée
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Procédure Supprimer(→p : Entier, ↔Tableau T[T_MAX] : Réels)Donnée : p>0, T un tableau de réels de taille T_MAXRésultat : Supprimer une valeur à la pos° p dans le tableau TVariable locale : i un entier
DébutSi ( p>=0 ou p<T_MAX )Alors
Pour i allant de p à T_MAX-2 FaireT[i] ← T[i+1]
FinPourFinSi
Fin1 2 8 4
1 2 8 4
5
1 2 5 8 4
Position de suppression
Extraction et suppression de l’élément sélectionné
Décalage vers la gauche des éléments après la case vide
Complexité : N
3. Structure de données > Les tableaux
• Algorithmes de tri de tableau, par ordre de complexité :• Quadratique : O(n²)
• Tri à bulle• Tri par insertion• Tri par sélection
• Logarithmique : O(n x log(n))• Tri par fusion• Tri rapide• Tri par tas
• Linéaire : O(m)• Tri par radical (m = nombre de clés)
36
Tri d’un tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
• Exemple : tri par insertion
3. Structure de données > Les tableaux
37
Tri d’un tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Procédure TriInsertion(↔Tableau T[T_MAX] : Réels)Donnée : T un tableau de réels de taille T_MAXRésultat : Trier l’intégralité du tableau TVariable locale : i,j,temp trois entiers
DébutPour i allant de 0 à T_MAX-1 Faire
temp ← T[i]Pour j allant de i-1 à 0 Faire
Si T[j-1]>T[j]Alors T[j] ← T[j-1]Sinon T[j-1] ← temp
FinSiFinPour
FinPourFin
1 2 8 9
4
1 2 8
Position d’extraction
Décalage vers la droite des éléments jusqu’à la position d’insertion
Un élément de plus dans la zone triée
9 4
1 2 8
Extraction de la donnée à trier
9
4
1 2 4 8 9
Complexité : 4
• Exemple : tri par insertion
3. Structure de données > Les tableaux
38
Tri d’un tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Procédure TriInsertion(↔Tableau T[T_MAX] : Réels)Donnée : T un tableau de réels de taille T_MAXRésultat : Trier l’intégralité du tableau TVariable locale : i,j,temp trois entiers
DébutPour i allant de 0 à T_MAX-1 Faire
temp ← T[i]Pour j allant de i-1 à 0 Faire
Si T[j-1]>T[j]Alors T[j] ← T[j-1]Sinon T[j-1] ← temp
FinSiFinPour
FinPourFin
1 2 8 9
4
1 2 8
Position d’extraction
Décalage vers la droite des éléments jusqu’à la position d’insertion
Un élément de plus dans la zone triée
9 4
1 2 8
Extraction de la donnée à trier
9
4
1 2 4 8 9
Complexité : N
• Exemple : tri par insertion
• Complexité de tri (par insertion) : O(n2)
3. Structure de données > Les tableaux
39
Tri d’un tableau
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Procédure TriInsertion(↔Tableau T[T_MAX] : Réels)Donnée : T un tableau de réels de taille T_MAXRésultat : Trier l’intégralité du tableau TVariable locale : i,j,temp trois entiers
DébutPour i allant de 0 à T_MAX-1 Faire
temp ← T[i]Pour j allant de i-1 à 0 Faire
Si T[j-1]>T[j]Alors T[j] ← T[j-1]Sinon T[j-1] ← temp
FinSiFinPour
FinPourFin
1 2 8 9
4
1 2 8
Position d’extraction
Décalage vers la droite des éléments jusqu’à la position d’insertion
Un élément de plus dans la zone triée
9 4
1 2 8
Extraction de la donnée à trier
9
4
1 2 4 8 9
Complexité : N x N = N2
3. Structure de données
40
Plan
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• Problèmes des tableaux• Opérations de tri, d’insertion et de suppression de données
coûteuses en temps de calcul
• But• Permettre de construire une structure ordonnée où chaque
élément peut facilement être déplacé, supprimé, ajouté,copié en temps constant.
41
Problématique
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• Définition• Les listes sont un regroupement ordonné de données.• Chaque composante sait où se trouve(nt) les composantes
suivantes et/ou précédentes.
• On parle alors de listes chaînées• Simplement ou doublement chaînées• Chaque cellule est une donnée élémentaire de la liste,
qui contient :• Un champ « clé » : la donnée• Un champ « pointeur(s) » : pointage sur les cellules suivantes
et/ou précédentes 42
Définition
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• Liste chaînée• Simple : les cellules contiennent un champ « clé » et un
champ « pointeur », qui pointe uniquement sur l’élémentqui suit.
• Double : les cellules contiennent un champ « clé » et deux champs« pointeurs », dont un pointe sur l’élément qui suit et le second sur l’élément qui précède.
43
Listes chaînées
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
clé clé clé clé
clé clé cléclé
• Notion de liste :• Variable qui permet de stocker plusieurs valeurs du même type
• Chaque valeur contenue dans la liste doit être du même type quele type déclaré pour la liste
Liste[double/simple] nom : Type
• Accès à :• Première cellule de la liste L : tete[L]
• Dernière cellule de la liste L : queue[L]
• Successeur de la cellule x : succ[x]
• Prédécesseur de la cellule x : prec[x]
• Valeur clé de la cellule x : cle[x] ou clef[x]
3. Structure de données > Les listes
44
Notions de listes
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• L’accès à un élément d’une liste se fait• Liste chaînée simple :
• en partant du premier élément, puis en parcourant la listechainée jusqu’à l’élément désiré
• Liste chaînée double :• Depuis l’élément courant, puis en parcourant la liste chaînée,
en avant ou en arrière, jusqu’à l’élément désiré• Inconvénient :
• Savoir où se trouve l’élément désiré par rapport à l’élément courant• Solution :
• Accès à un élément comme pour une liste chaînée simple. 45
Accès à une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• Accès à partir du premier élément, jusqu’à l’élément désiré
• Complexité d’accès : O(n), où n = indice de l’élément désiré46
Accès à une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Fonction Cellule(→n : Entier, →Liste[simple/double] L : Réels) : RéelDonnée : n≥0, L une liste SIMPLEMENT ou DOUBLEMENT chainée de réelsRésultat : Aller à l’élément n dans la listeVariable locale : i un entier, c une cellule de L
Débuti ← 0
c ← tete[L]
Tant que i < n et succ[c] <> NULL Fairec ← succ[c]
FinTantQueRetourne clé[c]
Fin
Complexité : N
Complexité : 2
Complexité : 1
3. Structure de données > Les listes
• Affichage des valeurs d’une liste chainée
• Complexité d’accès : O(n), où n = indice de l’élément désiré47
Accès à une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure AfficherListe(→Liste[simple/double] L : RéelsDonnée : L une liste SIMPLEMENT ou DOUBLEMENT chainée de réelsVariable locale : i un entier, c une cellule de L
Début// On vérifie que la liste n’est pas vide et on l’affiche
Si empty(L) est faux Alors // ou est_vide(L)
c ← tete[L]
RépéterEcrire clé[c]c ← succ[c]
Tant que empty(c) est faux // ou est_vide(c)FinSi
Fin
Complexité : N
3. Structure de données > Les listes
• Algorithme d’insertion d’un nombre dans une liste simple
• Complexité de mise à jour (insertion) : O(1) 48
Insertion d’une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure Insérer_Après(→v : Réels, ↔Cellule c1 : Réels)Donnée : c1 une cellule de la liste SIMPLEMENT chainée L de réelsRésultat : Insère une valeur après une cellule de la liste chainéeVariable locale : c2 une cellule de L
Débutclé[c2] ← vsucc[c2] ← succ[c1]succ[c1] ← c1
Fin
Complexité : 3
clé
clé clé cléc1 c2
3. Structure de données > Les listes
• Algorithme d’insertion d’un nombre dans une liste double
• Complexité de mise à jour (insertion) : O(1) 49
Insertion d’une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure Insérer_Après(→v : Réels, ↔Cellule c1 : Réels)Donnée : c1 une cellule de la liste DOUBLEMENT chainée L de réelsRésultat : Insère une valeur après une cellule de la liste chainéeVariable locale : c2,c3 une cellule de L
Débutc3 ← succ[c1] et clé[c2] ← v // cellule après la cellule courantesucc[c2] ← c3 et prec[c2] ← c1 // Affectation des pointeurs de la cellule inséréeprec[c3] ← c2 et succ[c1] ← c2 // Affectation des pointeurs des cellules c1 et c3
Fin
Complexité : 6
clé clé
clé
cléc1
c2
c3
3. Structure de données > Les listes
• Algorithme d’insertion d’un nombre dans une liste• Simple et double :
• Insertion après une cellule• Insertion au début de la liste• Insertion à la fin de la liste
• Double seulement :• Insertion avant une cellule
• Complexité de mise à jour (insertion) : O(1)50
Insertion d’une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• Algorithme de suppression d’un nombre dans une liste simple
• Complexité de mise à jour (suppression) : O(1) 51
Suppression d’une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure Supprimer(↔Cellule c1 : Réels)Donnée : c1 une cellule de la liste SIMPLEMENT chainée L de réelsRésultat : Supprime la cellule courante de la liste chainée, la
cellule suivante devient la cellule courante
Variable locale : c2 une cellule de L
Débutc2 ← succ[c1]clé[c1] ← clé[c2] // cellule courante ← cellule suivantesucc[c1] ← succ[c2]
Fin
Complexité : 3
clé clé cléc1 c2
clé
3. Structure de données > Les listes
• Algorithme de suppression d’un nombre dans une liste double
• Complexité de mise à jour (suppression) : O(1) 52
Suppression d’une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure Supprimer(↔Cellule c1 : Réels)Donnée : c1 une cellule de la liste DOUBLEMENT chainée L de réelsRésultat : Supprime la cellule courante de la liste chainée, la cellule suivante
devient la cellule courante
Variable locale : c0, c2 deux cellules de L
Débutc0 ← prec[c1] et c2 ← succ[c1] // cellules suivante et précédente de c1succ[c0] ← c2 et prec[c2] ← c0 // mise à jour des pointeursc1 ← c2 // cellule courante ← cellule suivante
Fin
Complexité : 5
clé cléc1 c2c0
clé clé
3. Structure de données > Les listes
• Algorithme de suppression d’un nombre dans une liste• Simple et double :
• Suppression de la cellule courante• Suppression après une cellule• Suppression au début de la liste
• Double seulement :• Suppression avant une cellule• Suppression à la fin de la liste
• Complexité de mise à jour (suppression) : O(1) 53
Suppression d’une donnée
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
3. Structure de données > Les listes
• Exemple : tri par insertion
54
Tri d’une liste
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure TriInsertion(↔Liste L : Réels)Donnée : L une liste chainée de réelsRésultat : Trier l’intégralité de la liste chainée LVariable locale : item, c, temp trois cellules
Débutitem ← tete[L] et c ← tete[L]
Tant que succ[item] <> NULL FaireTant que succ[c] <> item et cle[succ[c]] <= cle[item] Faire
c ← succ[c]
FinTantQueSi succ[c] <> item Alors
Insérer_après(cle[item],c) et Supprimer(item)
FinSiitem ← succ[item] et c ← tete[L]
FinTantQueFin
1 2 8 9
4
1 2 8
Position d’extraction
Recherche de laposition d’insertion
Un élément trié de plus
9 4
1 2 8
Extraction de la donnée à trier
9
4
1 2 4 8 9
Complexité : 3
Complexité : N
Complexité : 2
3. Structure de données > Les listes
• Exemple : tri par insertion
• Complexité de tri (par insertion) : O(n2) 55
Tri d’une liste
Les tableauxLes listes
Les filesLes piles
Les arbresLes fichiers
Procédure TriInsertion(↔Liste L : Réels)Donnée : L une liste chainée de réelsRésultat : Trier l’intégralité de la liste chainée LVariable locale : item, c, temp trois cellules
Débutitem ← tete[L] et c ← tete[L]
Tant que succ[item] <> NULL FaireTant que succ[c] <> item et cle[succ[c]] <= cle[item] Faire
c ← succ[c]
FinTantQueSi succ[c] <> item Alors
Insérer_après(cle[item],c) et Supprimer(item)
FinSiitem ← succ[item] et c ← tete[L]
FinTantQueFin
1 2 8 9
4
1 2 8
Position d’extraction
Recherche de laposition d’insertion
Un élément trié de plus
9 4
1 2 8
Extraction de la donnée à trier
9
4
1 2 4 8 9
Complexité : N x N = N2Complexité : 2
3. Structure de données
56
Plan
Les tableauxLes listesLes filesLes piles
Les arbresLes fichiers
3. Structure de données > Les files
• Définition• Les files sont des structures de données, ordonnées, qui
ne permettent l’accès qu’à une seule donnée à la fois.
• Correspondances• Files d’attente
• Les nouvelles données sont placées en queue de la file• Les données extraites se situent en tête de file
• On parle d’algorithmes• PEPS (Premier Entré, Premier Sorti)• FIFO (First In, First Out) 57
Définition
Les tableauxLes listesLes filesLes piles
Les arbresLes fichiers
Queue de file Tête de file
• Notion de file :• Variable qui permet de stocker plusieurs valeurs du même type
• Chaque valeur contenue dans la file doit être du même type quele type déclaré pour la file
File nom : Type
• Les fonctions de base sont :• Ajout d’une donnée (enfilage) :
Prodécure add(→Type : v, ↔File F : Type)
• Extraction et suppression d’une donnée (défilage) :Fonction extract(↔File F : Type) : Type
• La file est-elle vide ?Fonction empty(→File F : Type) : Booléen
3. Structure de données > Les files
58
Notion de file
Les tableauxLes listesLes filesLes piles
Les arbresLes fichiers
3. Structure de données > Les files
• Comment les files sont-elles réalisées en JAVASCRIPT ?• On préfère utiliser des listes chaînées qui permettent
l’insertion et la suppression rapide de données en débutou fin de liste (complexité : O(1))
• Avec des tableaux, il serait nécessaire de déplacer leséléments un à un, soit à l’insertion, soit à la suppressionde données
• Applications• Mise en file d’attente pour le gestionnaire d’impression• Mise en file d’attente pour le gestionnaire de téléchargement
59
Application
Les tableauxLes listesLes filesLes piles
Les arbresLes fichiers
3. Structure de données > Les files
60
Application
Les tableauxLes listesLes filesLes piles
Les arbresLes fichiers
• Algorithme d’insertion de nombres dans une file, et affichage
• Cet algorithme affiche la liste suivante :• 0, 1, 2, 3, 4, 5, …, 19 (order inchangé)
DébutVariable File F : RéelsVariable i : Entier
// Remplissage de la file F avec les 20 premiers nombres entiersPour i allant de 0 à 19 Faire
add(i,F) // ou enfiler(i,F)
FinSi
// Affichage des valeurs de la file F
Tant que empty(F) est faux faire // ou est_vide(F)
Ecrire extract(F) // ou defiler(F)
FinTantQueFin
Complexité : N
3. Structure de données
61
Plan
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les piles
• Définition• Les piles sont des structures de données,
ordonnées, qui ne permettent l’accès qu’àune seule donnée à la fois.
• Correspondances• Pile d’assiette ou tas
• Les nouvelles données sont placées sur le tas• Les données utiles sont extraites sur le tas
• On parle d’algorithmes• DEPS (Dernier Entré, Premier Sorti)• LIFO (Last In, First Out) 62
Définition
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Queue de pile
Tête de pile
• Notion de pile :• Variable qui permet de stocker plusieurs valeurs du même type
• Chaque valeur contenue dans la pile doit être du même type quele type déclaré pour la pile
Pile nom : Type
• Les fonctions de base sont :• Ajout d’une donnée (empilage) :
Prodécure add(→Type : v, ↔Pile P : Type)
• Extraction et suppression d’une donnée (dépilage) :Fonction extract(↔Pile P : Type) : Type
• La pile est-elle vide ?Fonction empty(→Pile P : Type) : Booléen
3. Structure de données > Les piles
63
Notion de pile
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les piles
• Comment les piles sont-elles réalisées en JAVASCRIPT ?• On préfère utiliser des tableaux car on n’a besoin de manipuler
des données qu’en queue de tableau (complexité : O(1))• Avec des listes, on aurait certes une bonne complexité, mais
un coût en mémoire plus important.
• Applications• Utilisation pour rendre itératif un algorithme récursif• Utilisation pour les calculatrices en notation polonaise
• L’ordre dans la pile permet d’éviter l’usage des parenthèses• Utilisation en programmation
• Conservation de l’ordre des procédures et fonctions appelées. 64
Application
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les piles
65
Application
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
• Algorithme d’insertion de nombres dans une pile, et affichage
• Cet algorithme affiche la liste suivante :• 19, 18, 17, …, 4, 3, 2, 1, 0 (order inversé)
DébutVariable Pile P : RéelsVariable i : Entier
// Remplissage de la pile P avec les 20 premiers nombres entiersPour i allant de 0 à 19 Faire
add(i,P) // ou empiler(i,P)
FinSi
// Affichage des valeurs de la pile P
Tant que empty(P) est faux faire // ou est_vide(P)
Ecrire extract(P) // ou depiler(P)
FinTantQueFin
Complexité : N
3. Structure de données > Les piles
• Comment rendre itératif un algorithme récursif• La factorielle peut être calculée avec un algorithme récursif
Passage n°1
66
Exemples
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Fonction factoriel(→n : Entier) : EntierDonnée : n>0Résultat : Calcul le factoriel de nVariable locale : aucune
DébutSi n<2 Alors Retourner 1Sinon Retourner n × factoriel(n-1)
Fin
factoriel(n) n x …
3. Structure de données > Les piles
• Comment rendre itératif un algorithme récursif• La factorielle peut être calculée avec un algorithme récursif
Passage n°2
67
Exemples
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Fonction factoriel(→n : Entier) : EntierDonnée : n>0Résultat : Calcul le factoriel de nVariable locale : aucune
DébutSi n<2 Alors Retourner 1Sinon Retourner n × factoriel(n-1)
Fin
factoriel(n-1) (n-1) x …
factoriel(n) n x …
3. Structure de données > Les piles
• Comment rendre itératif un algorithme récursif• La factorielle peut être calculée avec un algorithme récursif
Passage n°3
68
Exemples
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Fonction factoriel(→n : Entier) : EntierDonnée : n>0Résultat : Calcul le factoriel de nVariable locale : aucune
DébutSi n<2 Alors Retourner 1Sinon Retourner n × factoriel(n-1)
Fin factoriel(n-2) (n-2) x …
factoriel(n-1) (n-1) x …
factoriel(n) n x …
3. Structure de données > Les piles
• Comment rendre itératif un algorithme récursif• La factorielle peut être calculée avec un algorithme récursif
Passage n°N
69
Exemples
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Fonction factoriel(→n : Entier) : EntierDonnée : n>0Résultat : Calcul le factoriel de nVariable locale : aucune
DébutSi n<2 Alors Retourner 1Sinon Retourner n × factoriel(n-1)
Fin
factoriel(1) 1
factoriel(2) 2 x …
factoriel(3) 3 x …
… …
… …
… …
factoriel(n-2) (n-2) x …
factoriel(n-1) (n-1) x …
factoriel(n) n x …
3. Structure de données > Les piles
• Comment rendre itératif un algorithme récursif• Voici l’algorithme en version itérative
70
Exemples
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
Fonction factoriel(→n : Entier) : EntierDonnée : n>0Résultat : Calcul le factoriel de nVariable locale : v,i deux entiers
Débutv ← 1
Pour i allant de 2 à n Fairev ← v × i
FinPourRetourner v
Fin
factoriel(1) 1
factoriel(n-2) 2 x …
factoriel(n-2) 3 x …
… …
… …
… …
factoriel(n-2) (n-2) x …
factoriel(n-1) (n-1) x …
factoriel(n) n x …
3. Structure de données
71
Plan
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
3. Structure de données > Les arbres
• Problèmes des tableaux et des listes• Les listes sont des structures dynamiques unidimensionnelles
• But• Généraliser la structure au cas multidimensionnel : les arbres• Une liste est un arbre dont chaque élément a un et un seul
enfant.• On utilise un vocabulaire inspiré des arbres généalogiques
avec le parent et les enfants d’un élément de l’arbre. 72
Problématique
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
clé clé clé clé
clé clé cléclé
3. Structure de données > Les arbres
• Définition• Les arbres sont un regroupement ordonné
de données.• Chaque composante sait où se trouve(nt)
son parent et/ou ses enfants.
• Les arbres• Tout comme les listes, les arbres peuvent
être simplement ou doublement chaînés• Chaque cellule est une donnée élémentaire
de la liste, qui contient :• Un champ « clé » : la donnée• Un champ « pointeur(s) » : vers le parent et/ou ses enfants. 73
Définition
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
clé
cléclé
clé clé clé
3. Structure de données > Les arbres
• Définition• Chaque cellule ou composante
d’un arbre est appelé nœud
• Chaque nœud contient une cléet des liens vers ses enfants
• Parfois, les nœuds contiennentaussi un lien vers le nœudparent dont il est l’enfant
74
Définition
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
clé
cléclé
clé clé clé
Parent dunœud N
Enfants du nœud N
Nœud N
3. Structure de données > Les arbres
• Définition• Les nœuds qui ne possèdent
pas d’enfants sont appelésfeuilles
• Le nœud qui n’est le filsd’aucun autre nœud estla racine de l’arbre
• On dit que l’arbre représentéà droite est la tête en bas.
75
Définition
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
clé
cléclé
clé clé clé
Racine
Feuilles
3. Structure de données > Les arbres
• Arité d’un arbre• Un arbre est dit N-aire si tous les
nœuds de l’arbre ont au plus N fils.
• L’exemple de droite est un arbrebinaire (N = 2)
• Une liste est un arbre unaire (N = 1)
76
Définition
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
clé
cléclé
clé clé clé
Arbre binaire
3. Structure de données > Les arbres
• Notion d’arbre:• Variable qui permet de stocker plusieurs valeurs du même type
• Chaque valeur contenue dans l’arbre doit être du même type quele type déclaré pour la liste
Arbre[double/simple] nom : Type
• Accès à :• Accès à la racine de l’arbre A : racine[A]
• Accès au parent du nœud N : parent[N]
• Accès aux enfants du nœud N : enfants[N]
• Valeur clé du nœud N : cle[N] ou clef[N]77
Notions d’arbres
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
• Représentation de la liste des enfants d’un nœud:• Un tableau : on en connaît le nombre N• Une liste : le nombre d’enfants peut facilement varier
3. Structure de données > Les arbres
78
Notions d’arbres
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
• Structure d’un nœud N• Cas d’un tableau
• Champ clé• Champ Nombre d’enfants• Champ tableau d’enfants• Champ parent
• Cas d’une liste• Champ clé• Champ liste d’enfants• Champ parent
3. Structure de données > Les arbres
• Applications• Utilisation pour une calculatrice
(autre représentation : les piles)
• Utilisation pour le DOM (Document Object Model)• Le DOM permet de construire une arborescence de la structure
d'un document et de ses éléments.• À l'inverse, à partir d'un arbre DOM donné, il est possible de
générer des documents dans le langage de balisage voulu, quipourront à leur tour être manipulés par l'interface DOM.
• DOM est utilisé pour pouvoir modifier facilement des documentsXML ou accéder au contenu des pages web. 79
Application
Les tableauxLes listesLes files
Les pilesLes arbresLes fichiers
3. Structure de données
80
Plan
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les fichiers
• Les fichiers permettent de stocker des données sur unsupport physique, et non pas dans la mémoire vive d’unordinateur.
• Avantage des fichiers :• Taille variable• Données non volatiles (par de pertes d’information même
en l’absence d’alimentation électrique)
81
Intérêt des fichiers
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les fichiers
• Inconvénient des fichiers :• Temps d’accès à une donnée plus lent qu’en mémoire• L'insertion et la suppression d'éléments autre part qu'en fin
d'un fichier est quasiment impossible.• En général, on devra passer par 3 étapes :
• Création d'un nouveau fichier• Recopie recopier le début du fichier initial jusqu'à la modification
prévue dans le nouveau fichier• Écriture des données modifiées puis recopier le reste du fichier
82
Intérêt des fichiers
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les fichiers
• Les fichiers peuvent être séquentiels• Un fichier séquentiel permet uniquement d'accéder aux
données dans l'ordre de leur écriture.
• Un fichier séquentiel ne peut en général pas être modifié,la seule possibilité étant l'ajout derrière les données déjàstockées
• Avantages :• Le fichier séquentiel peut contenir des données de tout type et
de taille différente83
Accès à un fichier
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les fichiers
• Les fichiers peuvent être séquentiels• On classe souvent sous la dénomination de fichiers
séquentiels les fichiers de texte• Ce sont souvent des fichiers à accès direct aux caractères
• On peut accéder directement au Nième caractère
• Mais l'accès est séquentiel au niveau des lignes :• Pour accéder à la Nième ligne, il faut lire le fichier depuis le
début, jusqu'à compter N-1 signes de fin de ligne.
84
Accès à un fichier
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les fichiers
• Les fichiers peuvent être à accès direct• Un fichier à accès direct correspond à un tableau en mémoire
• Toutes ses composantes ont la même taille• Possibilité d’accès directement à la Nième.
• Comme pour un tableau, les insertions et suppressionsnécessitent des décalages des composantes suivantes :
• Temps trop long (car accès fichier plus lent que l’accès mémoire) • Les tris :
• A éviter : les tri par insertion et les tris à bulles.• On préfère : le tri par sélection avec création d'un nouveau fichier.
85
Accès à un fichier
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
3. Structure de données > Les fichiers
• Les fichiers peuvent être à accès direct• L'accès au données devra être optimisé :
• Recherche par dichotomie puisque tout calcul sera beaucoupplus rapide qu'une lecture dans le fichier.
• Un fichier à accès direct peut également être utilisé pourstocker et traiter des :
• Listes, arbres ou graphes• Utilisation d’un super-tableau :
• chaque élément est numéroté, en fonction de sa position dans lefichier, les liens étant ces numéros.
86
Accès à un fichier
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers
• Notion de fichier :Fichier nom
• Fonction sur le fichier F :• D’ouverture : Procédure ouvrir(↔Fichier F)
• De fermeture : Procédure fermer(↔Fichier F)
• D’écriture des informations :Procédure écrire(↔Fichier F, →Type informations)
• De la lecture des informations :Procédure lire(↔Fichier F, ↔Type informations)
• De la taille : Fonction taille(↔Fichier F) : Entier
• D’accès à la position i :Procédure accès(↔Fichier F, →Entier i)
3. Structure de données > Les fichiers
87
Notions de fichiers
Les tableauxLes listesLes files
Les pilesLes arbres
Les fichiers