[email protected]  · 2012. 10. 5. · 1. Notion de complexité • Pour un...

87
[email protected] http://x.heurtebise.free.fr

Transcript of [email protected]  · 2012. 10. 5. · 1. Notion de complexité • Pour un...

Page 1: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

[email protected] http://x.heurtebise.free.fr

Page 2: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 3: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 4: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

Plan de ce cours

1. Notion de complexité

2. Récursivité

3. Structures de données1. Tableaux2. Listes3. Files4. Piles5. Arbres6. Fichiers

4

Page 5: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

Chapitre 1

Page 6: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

1. Notion de complexité

• Introduire la notion de complexité

• Comprendre le lien entre :

• la complexité algorithmique

• l’efficacité d’un algorithme

6

Objectifs

Page 7: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 8: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 9: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 10: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 11: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 12: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 13: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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 ∞

Page 14: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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é

Page 15: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

Chapitre 2

Page 16: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 17: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 18: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 19: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 20: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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)

Page 21: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 22: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 23: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

Chapitre 3

Page 24: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 25: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

3. Structure de données

25

Plan

Les tableauxLes listesLes files

Les pilesLes arbres

Les fichiers

Page 26: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 27: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 28: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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]

Page 29: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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]

Page 30: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 31: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 32: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 33: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 34: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 35: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 36: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 37: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 38: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 39: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 40: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

3. Structure de données

40

Plan

Les tableauxLes listes

Les filesLes piles

Les arbresLes fichiers

Page 41: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 42: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 43: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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é

Page 44: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 45: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 46: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 47: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 48: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 49: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 50: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 51: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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é

Page 52: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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é

Page 53: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 54: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 55: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 56: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

3. Structure de données

56

Plan

Les tableauxLes listesLes filesLes piles

Les arbresLes fichiers

Page 57: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 58: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 59: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 60: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 61: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

3. Structure de données

61

Plan

Les tableauxLes listesLes files

Les pilesLes arbres

Les fichiers

Page 62: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 63: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 64: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 65: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 66: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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 …

Page 67: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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 …

Page 68: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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 …

Page 69: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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 …

Page 70: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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 …

Page 71: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

3. Structure de données

71

Plan

Les tableauxLes listesLes files

Les pilesLes arbresLes fichiers

Page 72: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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é

Page 73: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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é

Page 74: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 75: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 76: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 77: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 78: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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

Page 79: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 80: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

3. Structure de données

80

Plan

Les tableauxLes listesLes files

Les pilesLes arbres

Les fichiers

Page 81: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 82: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 83: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 84: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 85: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 86: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

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

Page 87: xavier.heurtebise@univ-provence.fr  · 2012. 10. 5. · 1. Notion de complexité • Pour un problème donné, on cherche le meilleur algorithme (agissant sur des données de très

• 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