Algorithmes et Structures de Données 2024
Algorithmes et Structures de Données 2024
LICENCE - 2024
NVJ - LICENCE 2
DEROULE DU COURS
Début : 21 Fev 2024
Fin : 15 Mars 2024
Chap. 1 : Les Généralités et Notions de Base (4h)
Chap. 2 : Les Enregistrements et les Tableaux (4h)
Chap. 3 : Les Fichiers (2h)
Chap. 4 : Les Pointeurs (8h)
Chap. 5 : Les Listes, Files et Piles (8h)
Chap. 6 : Les Arbres (10h)
Chap. 7 : Les Graphes (10h)
Travaux Dirigés (10h)
Travaux Pratiques : (15h)
Evaluation :
NVJ - LICENCE 3
PLAN DU COURS
NVJ - LICENCE 4
I
Ordinateur, Programme et Langage
5
NVJ - LICENCE 5
I : Ordinateur, Programme et Langage
L’ordinateur
6
NVJ - LICENCE 6
I : Ordinateur, Programme et Langage
L’ordinateur
8
NVJ - LICENCE 8
I : Ordinateur, Programme et Langage
L’ordinateur
UNITE CENTRALE
10
NVJ - LICENCE 10
I : Ordinateur, Programme et Langage
Programme
12
NVJ - LICENCE 12
I : Ordinateur, Programme et Langage
Langage
✓ Or, il y a plusieurs langages, est ce que cela veut dire qu’il existe
plusieurs sortes de programmation?
13
NVJ - LICENCE 13
I : Ordinateur, Programme et Langage
Programmation
14
NVJ - LICENCE 14
I : Ordinateur, Programme et Langage
Algorithme
15
NVJ - LICENCE 15
Conclusion
Étapes de conception d'un programme informatique
16
NVJ - LICENCE 16
II
Variables et instruction d'affectation
17
NVJ - LICENCE 17
II : Variables et instruction d'affectation
Notion de Variable
✓ Les variables servent à « nommer » des emplacements ou adresses de
la mémoire;
✓ Une variable est un espace mémoire nommé de taille fixe, prenant au
cours du déroulement de l’algorithme un nombre indéfini de valeurs
différentes;
✓ Permettent de manipuler des valeurs sans connaître leurs emplacements
exactes;
Coté machine Coté Programmeur
001 A
010 B
011 Montant
18
Mémoire Centrale 18
II : Variables et instruction d'affectation
Type d’une Variable
✓ Le type d’une variable permet
– De savoir quel est l’espace mémoire occupé par une variable
– Quelles sont les opérations autorisées sur la variable
✓ Les types de base:
- Entiers
Une variable de type entier peut prendre comme valeur
l'ensemble des nombres entiers signés. Les opérations associées sont
les opérations usuelles +,-,*,/.
- Réels
Une variable de type réél peut prendre comme valeur
l'ensemble des nombres réels. Les opérations associées sont les
opérations usuelles +,-,*,/.
19
NVJ - LICENCE 19
II : Variables et instruction d'affectation
Type d’une Variable
- Caractères
Une variable de type car peut prendre comme valeur l'ensemble des
caractères imprimables.
On notera les valeurs entre guillemets. On considère souvent que les
caractères sont ordonnés dans l'ordre alphabétique.
Les valeurs :
o "1" qui est un caractère,
o 1 qui est un entier,
o 1. qui est un réel
sont différentes et ne seront pas codés de la même manière dans la mémoire
de la machine.
- Booléens
Une variable de type booléen prend comme valeur VRAI ou FAUX.
Les opérations usuelles sont ET, OU et NON qui sont données dans les
tables qui suivent.
20
NVJ - LICENCE 20
II : Variables et instruction d'affectation
Déclaration d’une Variable
✓ Déclaration d’une variable dans un algorithme obéit à la syntaxe :
– Variable nom_de_variable : Type
– Ex:
• Variable Note: Réel
• Variable Coefficient: Entier
L’instruction d’affectation
✓ L’Affectation est une opération qui consiste à attribuer une valeur à une
variable. Elle est notée ← ,
Ex: Note ←14;.
21
NVJ - LICENCE 21
II : Variables et instruction d'affectation
Structure d’un algorithme
Algorithme Carre;
Constante
Type
Var a,b,c, D: Réel;
Début
Instructions;
Fin.
✓ Convention de fonctions:
❖ Lire(a); ou Saisir(a): Lit une donnée à une entrée et
l’affecte à la variable a;
❖ Ecrire(a) ou Afficher(a) : Affiche/Ecrit sur sortie la valeur
contenue dans la variable a. 22
NVJ - LICENCE 22
III
Les structures de contrôle
23
NVJ - LICENCE 23
III : Les structures de contrôle
Il y a trois structures principale de contrôle qui permettent de
construire des algorithmes
✓ Bloc d'instruction
Début
instruction1
instruction2
.............
Fin
Ex: Algorithme Carre;
Var a,b,c, D: Réel;
Début
a ←Lire(); // Est équivalent à Lire(a);
b ←Lire();
c ←Lire();
D←b*b-4*a*c;
Ecrire(‘’La valeur de D est :’’, D);
Fin.
24
NVJ - LICENCE 24
III : Les structures de contrôle
✓ Alternative
Alternative simple
Si ExpressionBooléenne alors
BlocInstruction1
Sinon
BlocInstruction2
Finsi;
Ex:
Si (D>0) alors
Ecrire(‘’ll y a deux solutions’’)
Sinon Si (D=0) alors
Ecrire(‘’ll y a une solution double’’)
Sinon
Ecrire(‘’ll n’y a pas de solution dans IR’’)
Finsi;
25
NVJ - LICENCE 25
III : Les structures de contrôle
Alternative multiple
Selon que D
cas cas1 : BlocInstruction1
cas cas2 : BlocInstruction2
.............
autrement : BlocInstruction
Finselonque
Ex:
Selon que abréviation
"M" : Ecrire(" Monsieur " );
"Mme" : Ecrire(" Madame " );
"Mlle" : Ecrire(" Mademoiselle " );
Autres : Ecrire(" Monsieur, Madame " );
FinSelonque
26
NVJ - LICENCE 26
IV
Les structures de répétition
27
NVJ - LICENCE 27
IV : Les structures de répétition
• La condition doit finir par devenir vraie (on répète le traitement jusqu’à
ce que la condition soit vraie, i.e. tant que la condition est fausse)
• Le traitement est réalisé au moins une fois, car le test est effectué
après.
Répéter
<instruction>
Jusqu’à <condition>
✓ Principe de la boucle Pour
La boucle POUR permet d’effectuer un traitement à plusieurs reprises en
incrémentant ou décrémentant automatiquement une variable entière.
L’instruction Pour:
• Initialise une variable de boucle (le compteur)
• Incrémente cette variable de la valeur de « pas »
• Vérifie que cette variable ne dépasse pas la borne supérieure
Attention :
• le traitement ne doit pas modifier la variable de boucle
Pour cpt ← 1 à MAX Faire
si (Condition) alors
cpt ← MAX;
Finpour 30
NVJ - LICENCE 30
IV : Les structures de répétition
Est équivalent à
cpt ← 0;
Tant que cpt <nbVal Faire
Afficher("Donnez une valeur :");
Saisir(valeur);
totalValeurs ← totalValeurs+ valeur;
cpt ← cpt + 1;
FinTantQue
31
NVJ - LICENCE 31
IV : Les structures de répétition
33
NVJ - LICENCE 33
IV : Les structures de répétition
Est équivalent à
34
NVJ - LICENCE 34
IV : Les structures de répétition
35
NVJ - LICENCE 35
V
Les Fonctions et Procédures
36
NVJ - LICENCE 36
V: Les Fonctions et Procédures
▪ Les fonctions
Une fonction est une section d'algorithme qui a un objectif
bien défini et un nom. Elle possède des variables locales qui ne sont
pas visibles à l'extérieur de la fonction.
Une fonction retourne une valeur par l'instruction simple
retourne (Expression).
Syntaxe:
fonction NomDeFonction (ListeParamètres) : TypeRésultat;
//déclarations des variables ou fonctions locales
début
// partie instruction qui contient l'appel à retourne
finFonction
Exemple:
Fonction exemple(val n:entier;ref m: entier):Entier;
Var Tot:Entier;
début
Tot ← n*m;
Retourne(Tot);
finFonction 37
NVJ - LICENCE 37
V: Les Fonctions et Procédures
▪ Les Procédures
Une procédure est une section d'algorithme qui a un objectif
bien défini et un nom. Elle possède des variables locales qui ne sont
pas visibles à l'extérieur de la fonction.
A l’opposé de la fonction, elle ne retourne pas une valeur et
n’a pas de type de résultat.
Syntaxe:
Procedure NomDeFonction (ListeParamètres);
//déclarations des variables ou fonctions locales
début
// partie instruction
finProcedure
Exemple:
Procedure exemple(val n:entier;ref m: entier);
Var Tot:Entier;
début
Tot ← n*m;
m ← 23*Tot+n*Tot;
finProcedure
38
NVJ - LICENCE 38
V: Les Fonctions et Procédures
39
NVJ - LICENCE 39
TRAVAUX DIRIGES
40
NVJ - LICENCE 40
PLAN DU COURS
I – Les Enregistrements
II - Les Tableaux
III- Les Applications
NVJ - LICENCE 41
I: Les Enregistrements
✓ Définition
Un enregistrement est un type de données défini par
l'utilisateur et qui permet de grouper un nombre fini d'éléments (ou
champs) de types éventuellement différents(hétérogène).
✓ Déclaration
Nom_type = Enregistrement
champ 1 : Type 1
----
champ n : Type n
Fin Nom_Type
✓ Exemple
Fiche = Enregistrement
nom, prénom : Chaîne;
sexe : Caractère;
numéro : Entier non signé;
moyenne : Réel;
Fin Fiche 42
NVJ - LICENCE 42
I: Les Enregistrements
✓ Exemple (Ecriture)
Var Etudiant : Fiche ;
[Link] ← ‘’Charles’’ ;
[Link] ← ‘’NGUEMA’’ ;
[Link] ← ‘’M’’ ;
[Link] ← 25;
[Link] ← 14.25;
Autrement
Avec Etudiant Faire
nom ← ‘’Charles’’ ;
prenom ← ‘’NGUEMA’’ ;
sexe ← ‘’M’’ ;
numero ← 25;
moyenne ← 14.25;
Fin Avec
✓ Exemple (Lecture)
Var Moyenne : Entier non signé;
Moyenne ← [Link]; 43
NVJ - LICENCE 43
I: Les Enregistrements
✓ Exemple (Pascal)
Fiche = Record
nom, prenom : String;
sexe : Char;
numéro : Integer;
moyenne : Real;
Fin Fiche;
[Link] := ‘’Charles’’ ;
[Link]énom :=‘’NGUEMA’’ ;
[Link] :=‘’M’’;
[Link]éro := 25;
[Link] := 14.25;
44
NVJ - LICENCE 44
II: Les Tableaux
✓ Définition
Un tableau est un vecteur ou un regroupement d’éléments
de même type.
✓ Déclaration
Nom_type_tableau = Tableau de Nom_type ;
✓ Exemple
Fiche = Enregistrement
nom, prénom : Chaîne;
sexe : Caractère;
numéro : Entier non signé;
moyenne : Réel;
Fin Fiche
0 1 2 3 4 5 6 …. Max
Liste_Etudiants
46
NVJ - LICENCE 46
II: Les Tableaux
✓ Parcours d’un tableau
Var T: Tableau [1…Max] de Fiche;
➢ En lecture
Pour i ← 0 à Max Faire
Lire(T[i]. Nom);
Lire(T[i]. Prénom);
FinPour
➢ En Ecriture
Pour i ← 0 à N Faire
Ecrire(T[i]. Nom) ;
Ecrire(T[i]. Prénom) ;
FinPour
0 1 2 3 4 5 6 …. Max
T
- La désignation du produit
- La référence du produit
- Sa quantité en stock
Exercice 2:
Proposer une structure pouvant permettre la manipulation des nombres
complexes (Ensemble ℂ).
48
NVJ - LICENCE 48
III: Les Applications
Exercice 3:
Exercice 4:
49
NVJ - LICENCE 49
III: Les Applications
Exercice 5:
- un numéro (entier) ;
- un numéro de téléphone (10 caractères maximum) ;
50
NVJ - LICENCE 50
II: Les Tableaux
➢ Les tableaux à deux dimension
C’est une matrice M x N ou un regroupement d’éléments de
même type.
✓ Déclaration
Nom_type_tableau2 = Tableau de [1..Max1] [1..Max2] de Nom_type ;
52
NVJ - LICENCE 52
PLAN DU COURS
NVJ - LICENCE 53
Chap. 3 : Les Fichiers
I-Définition:
II-Accès à un fichier :
➢ accès séquentiel ;
o Dans le cas d'un fichier texte, cela signifie qu'on lit le fichier ligne
par ligne (enregistrement par enregistrement).
54
NVJ - LICENCE 54
Chap. 3 : Les Fichiers
➢ accès direct;
III-Manipulation de fichiers :
Accès direct :
o Décaler(F, position, décalage) ;
position::= Début_fichier | Fin_fichier | Position_courante
56
NVJ - LICENCE 56
Chap. 3 : Les Fichiers
IV-Exemple en Pascal: Ouverture et fermeture des fichiers
ASSIGN(F1,’[Link]’) ;
REWRITE(F1) ; {création et ouverture du fichier F1 en
écriture}
………
{ initialisation du fichier avec READ/WRITE}
………
CLOSE(F1) ; {Fermeture du fichier}
RESET(F1); {Ouverture du fichier en lecture/écriture}
………
………
{Manipulation du fichier READ,WRITE,SEEK etc… }
………
………
CLOSE(F1) ; {fermeture du fichier}
57
NVJ - LICENCE 57
PLAN DU COURS
NVJ - LICENCE 58
Chap. 4 : Les Pointeurs
I-Définition:
Un pointeur est une variable dont la valeur est une adresse mémoire.
Un pointeur, noté P, pointe sur une variable dynamique notée P^.
Le type de base est le type de la variable pointée. Le type du
pointeur est l'ensemble des adresses des variables pointées du type
de base. Il est représenté par le symbole ^ suivi de l'identificateur du
type de base.
60
NVJ - LICENCE 60
Chap. 4 : Les Pointeurs
III-Déclaration :
Soit l’exemple ci-dessous basé sur la liste vue plus haut:
Type Cellule= Structure
Info : Chaîne;
Suivant : Liste;
Fin Structure;
Afin de développer des algorithmes sur les listes linéaires chainées, on construit une
machine abstraite avec les opérations suivantes :
• Allouer(P) : Allocation d’un espace de taille spécifiée par le type de P.
• Libérer(P) : Libération de l’espace pointé par P.
• Valeur(P) : Consultation du champ Valeur du maillon pointé par P.
• Suivant(P) : Consultation du champ Suivant du maillon pointé par P.
• Aff_Adr(P, Q) : Dans le champ Suivant du maillon pointé par P, on range
l’adresse Q.
• Aff_Val(P,Val) : Dans le champ Valeur du maillon pointé par P, on range la
valeur Val.
62
NVJ - LICENCE 62
Chap. 4 : Les Pointeurs
V-Quelques Algorithmes :
Déclarations des types pour la liste :
Type Liste = ^Element
Type Element = Structure
Info : chaîne de caractères;
Suivant : Liste;
Fin Structure
Algorithme CréationListe2Elements;
Var Tete, P : Liste
NombreElt : entier
DEBUT
Tete ← Nil; /* pour l'instant la liste est vide*/
Allouer(P) ; /* réserve un espace mémoire pour le premier élément */
Lire(P^.Info); /* stocke dans l'Info de l'élément pointé par P la valeur saisie */
P^.Suivant ← Nil; /* il n'y a pas d'élément suivant */
Tete ← P; /* le pointeur Tete pointe maintenant sur P */
/* Il faut maintenant ajouter le 2e élément, ce qui revient à insérer un élément en tête de liste */
Allouer(P); /* réserve un espace mémoire pour le second élément */
Lire(P^.Info); /* stocke dans l'Info de l'élément pointé par P la valeur saisie */
P^.Suivant ← Tete; /* élément inséré en tête de liste */
Tete ← P;
FIN
63
NVJ - LICENCE 63
Chap. 4 : Les Pointeurs
V-Quelques Algorithmes :
Algorithme CréationListeNombreConnu;
Var Tete, P : Liste;
NombreElt : entier;
Compteur : entier;
Debut
Lire(NombreElt);
Tete ←Nil;
Pour Compteur de 1 à NombreElt Faire
Allouer(P); /* réserve un espace mémoire pour l’élément à ajouter */
Lire(P^.Info); /* stocke dans l'Info de l'élément pointé par P la valeur saisie */
P^.Suivant ←Tete; /* élément inséré en tête de liste */
Tete ← P; /* le pointeur Tete pointe maintenant sur P */
Fin Pour
Fin
Exercices d’applications:
Proposer pour chaque point ci-dessous un algorithme qui :
1- Crée une liste chaînée contenant un nombre indéterminé d'éléments,
2- Affiche tous les éléments d’une liste,
3- Recherche un élément dans une liste,
4- Supprime un élément d’une liste
5- Insère un élément à une position donnée.
64
NVJ - LICENCE 64
Chap. 4 : Les Pointeurs
VI-Listes Doublement chainées :
✓ Il existe aussi des liste chaînées, dites bidirectionnelles, qui peuvent être parcourues dans
les deux sens, du 1er élément au dernier et inversement.
Exercices d’applications:
Proposer pour chaque point ci-dessous un algorithme qui, pour une liste doublement chaînée :
1- Crée une liste contenant un nombre indéterminé d'éléments,
2- Affiche tous les éléments,
3- Recherche un élément dans une liste,
4- Supprime un élément d’une liste,
5- Insère un élément à une position donnée d’une liste.
65
NVJ - LICENCE 65
PLAN DU COURS
NVJ - LICENCE 66
Chap. 5 : Les Piles et les Files
I-Les Piles
Une pile est une liste chaînée d'informations dans laquelle :
✓ Un élément ne peut être ajouté qu'au sommet de la pile,
✓ Un élément ne peut être retiré que du sommet de la pile.
Il s'agit donc d'une structure de type LIFO (Last In First Out). On ne travaille que sur le
sommet de la pile.
67
NVJ - LICENCE 67
Chap. 5 : Les Piles et les Files
➢ Les algorithmes des Piles
➢ Exercices d’applications
68
NVJ - LICENCE 68
Chap. 5 : Les Piles et les Files
II-Les Files
Une file est une liste chaînée d'informations dans laquelle :
✓ Un élément ne peut être ajouté qu‘à la queue de la file,
✓ Un élément ne peut être retiré que de la tête de la file.
Il s'agit donc d'une structure de type FIFO (First In First Out). On ne travaille à la fois en
tête et en queue de la pile.
69
NVJ - LICENCE 69
Chap. 5 : Les Piles et les Files
➢ Exercices d’applications
70
NVJ - LICENCE 70
PLAN DU COURS
Chap. 6: La Récursivité
I-Le Principe
II-La Pile d’exécution
NVJ - LICENCE 71
Chap. : La Récursivité
➢ Le principe:
Un programme est dit récursif s'il s'appelle lui-même Il s'agit
forcément d'une fonction.
Exemple : La factorielle, n! = 1 x 2 x ... x n donc n! = n x (n-1)!
➢ Objectif :
La récursivité permet de décomposer un problème en sous
problèmes “plus simples”. A leur tour, ces sous-problèmes seront
décomposés jusqu’à un niveau d’opérations “élémentaires”, faciles à
réaliser 72
NVJ - LICENCE 72
Chap. 6 : La Récursivité
➢ Le déroulé:
Fact(3):reel;
début
Fact <- 3 * Fact(2);
fin
Fact(2):reel;
début
Fact <- 2 * Fact(1); La fonction ne s’arrête pas,
fin il faut prévoir une condition
d’arrêt à la récursion.
Fact(1):reel;
début
Fact <- 1 * Fact(0);
fin
73
NVJ - LICENCE 73
Chap. 6 : La Récursivité
➢ Le déroulé:
La factorielle avec condition d’arrêt :
74
NVJ - LICENCE 74
Chap. 6 : La Récursivité
➢ La pile d’exécution
Fact(2):reel;
début
Fact(3) Fact(2) Fact(1) Fact(0)
Fact <- 2 * Fact(1);
fin a= 3 a= 2 a= 1 a= 0
NVJ - LICENCE 76
Chap. 7 : Les Arbres
I-La Définition
Un arbre est une structure dynamique d’éléments appelés aussi parfois « sommet
» ou « Nœud ». Ses nœuds sont organisés d’une manières hiérarchique (Père,
Fils ,Petit-fils,…). Les Nœuds sont reliés par des «Arcs »
tel que chaque Nœud (à part la racine) a exactement un arc pointant vers lui.
La «racine » est un Nœud particulier car il n’a pas de prédécesseur. Les feuilles
sont les nœuds sans successeurs.
Enfin, chaque nœud est composé de données et de pointeurs.
77
NVJ - LICENCE 77
Chap. 7 : Les Arbres
II-Les terminologies
✓ Arité : L’arité de l’arbre est le nombre de fils qu’il possède. Un arbre dont
les nœuds ne comporteront qu'au maximum n fils sera d'arrité n. On
parlera alors d'arbre n-aire.
Il existe un cas particulièrement utilisé : c'est l'arbre binaire. Dans un tel
arbre, les nœuds ont au maximum 2 fils. On parlera alors de fils gauche et
de fils droit pour les nœuds constituant ce type d'arbre.
79
NVJ - LICENCE 79
Chap. 7 : Les Arbres
III-Les arbres binaires
❖ Un arbre binaire est un cas particulier des arbres.
❖ Un arbre binaire est un arbre où chaque nœud possède au plus deux fils :
le fils droit et le fils gauche. Même si un nœud possède un seul fils, il peut
être un fils gauche ou un fils droit.
❖ Un arbre binaire A est :
➢ Soit l’arbre vide, noté ф.
➢ Soit un triplet ( Ag, r, Ad ) où :
✓ r est un nœud, appelé la racine de A,
✓ Ag est un arbre binaire, appelé le sous-arbre gauche de A,
✓ Ad est un arbre binaire, appelé le sous-arbre droit de A,
.
80
NVJ - LICENCE 80
Chap. 7 : Les Arbres
III-Les arbres binaires
➢ Les fonctions qui permettent de récupérer
➢ La structure le fils gauche et le fils droit d'un arbre:
Type Arbre= ^Nœud;
▪ Fonction FilsGauche( T : arbre ) : arbre
Noeud= Enregistrement
Debut
Valeur:Telement
Si EstVide(T) alors
Ag : Arbre ; {Fils gauche}
renvoyer arbre_vide
Ad : Arbre ; {Fils droit}
sinon
Fin Enregistrement
renvoyer sous_arbre_gauche;
➢ La fonction qui teste si un arbre est vide Fin si
Fonction EstVide( T : arbre ) : booléen; Fin
Debut
Si T = Nil alors ▪ Fonction FilsDroit( T : arbre ) : arbre
EstVide ← vrai; Debut
Sinon Si EstVide(T) alors
EstVide ← faux; renvoyer arbre_vide
FinSi sinon
Fin renvoyer sous_arbre_droit;
Fin si
Fin
81
NVJ - LICENCE 81
Chap. 7 : Les Arbres
III-Les arbres binaires
❖ Parcours d’arbres
Un parcours d’arbres est un algorithme qui permet de visiter chacun des
nœuds de cet arbre. Nous distinguerons deux types de parcours :
✓ Le parcours en profondeur:
Il permet d'explorer l'arbre en explorant jusqu'au bout une branche pour
passer à la suivante.
✓ Le parcours en largeur :
Il permet d'explorer l'arbre niveau par niveau. C'est à dire que l'on va pa
rcourir tous les nœuds du niveau 1 puis ceux du niveau deux et ainsi de
suite jusqu'à l'exploration de tous les nœuds.
82
NVJ - LICENCE 82
Chap. 7 : Les Arbres
❖ Parcours en profondeur:
On définit trois parcours en profondeur privilégiés qui sont :
✓ Le parcours préfixé (pré-ordre),
✓ Le parcours infixe,
✓ Le parcours postfixé (post-ordre).
✓ Le parcours infixe,
1. Le parcours du sous-arbre gauche ;
2. Traitement de la racine ;
3. Parcours du sous arbre-droit.
84
NVJ - LICENCE 84
Chap. 7 : Les Arbres
III-Les arbres binaires
❖ Les algorithmes
✓ Le parcours préfixé (pré-ordre), ✓ Le parcours postfixé (post-ordre).
Procedure Parcours_prof_prefixe( A : arbre );
Procedure Parcours_prof_postfixe( A : arbre );
Debut
Debut
Si Non EstVide(A) alors
Si Non EstVide(A) alors
Traiter_racine(A);
Parcours_prof_postfixe(FilsGauche(A));
Parcours_prof_prefixe(FilsGauche(A));
Parcours_prof_postfixe(FilsDroit(A));
Parcours_prof_prefixe(FilsDroit(A));
Traiter_racine(A);
FinSi
FinSi
Fin;
Fin;
✓ Le parcours infixe,
Procedure Parcours_prof_infixe( A : arbre );
Debut
Si Non EstVide(A) alors
Parcours_prof_infixe(FilsGauche(A));
Traiter_racine(A);
Parcours_prof_infixe(FilsDroit(A));
FinSi
Fin;
85
NVJ - LICENCE 85
Chap. 7 : Les Arbres
❖ Parcours en largeur:
➢ Le principe de l’algorithme associé:
[Link] nous sommes sur un nœud nous traitons ce nœud
(par exemple nous l'affichons) puis nous mettons les fils
gauche et droit non vides de ce nœud dans la file d'attente,
puis nous traitons le prochain nœud de la file d'attente.
[Link] début, la file d'attente ne contient rien, nous y plaçons
donc la racine de l'arbre que nous voulons traiter.
3.L'algorithme s'arrête lorsque la file d'attente est vide. En effet,
lorsque la file d'attente est vide, cela veut dire qu'aucun des
nœuds parcourus précédemment n'avait de sous arbre
gauche ni de sous arbre droit
86
NVJ - LICENCE 86
Chap. 7 : Les Arbres
❖ Parcours en largeur:
➢ L’algorithme :
Procedure Parcours_largeur (A : arbre)
Debut
Creer_File_D'attente(F);
Ajouter(F, Racine (A));
Tant que Non EstVide(F) faire
X <- Extraire(F);
Traiter_racine(X);
Si non EstVide(FilsGauche(X)) alors
Ajouter(F,FilsGauche(X));
Finsi
Si non EstVide(FilsDroit(X)) alors
Ajouter(F,FilsDroit(X));
Finsi
FinTantque;
Fin;
87
NVJ - LICENCE 87
PLAN DU COURS
Chap. 8: La complexité
I-La Définition
II-Le Calcul de la Complexité
III-La récursivité croisée
NVJ - LICENCE 88
Chap. 8 : La Complexité
I-La définition:
La complexité d'un algorithme est une mesure du temps requis
par l'algorithme pour accomplir sa tâche, en fonction de la taille de
l'échantillon à traiter.
On dira d'un problème qu'il est aussi complexe que le meilleur
algorithme connu pour le résoudre.
89
NVJ - LICENCE 89
Chap. 8 : La Complexité
I-La définition
La complexité d'un algorithme est une mesure du temps requis
par l'algorithme pour accomplir sa tâche, en fonction de la taille de
l'échantillon à traiter.
On dira d'un problème qu'il est aussi complexe que le meilleur
algorithme connu pour le résoudre.
On parlera de :
▪ complexité constant s'il ne dépend pas de la taille de N,
▪ complexité linéaire s'il est "d'ordre" N,
▪ complexité quadratique s'il est "d'ordre" N2,
▪ complexité exponentielle si "l'ordre" est de la forme d'une
puissance où N apparaît en exposant,
90
NVJ - LICENCE 90
Chap. 8 : La Complexité
➢ Notation O
91
NVJ - LICENCE 91
Chap. 8 : La Complexité
Propriétés:
Les opérations qui vont devoir être comptabilisées auront les coûts suivant :
92
NVJ - LICENCE 92
Chap. 8 : La Complexité
La coût de cet algorithme est dite constant. Ce sera le cas de tous les
algorithmes avec T(n)=a où a est un réel.
➢ Coût quadratique:
✓ si le coût est proche d'être proportionnel au carré de la
taille n lorsque n est très grand ; ce coût est désormais
noté O(n2) :
✓ si le temps d'exécution T(n) est majorée par a×n2+b×n+c,
avec a, b et c trois constantes réelles, alors on
note T(n)=O(n2)
95
NVJ - LICENCE 95
Chap. 8 : La Complexité
➢ complexité linéaire
double volume_sphere(double rayon) {
const double PI = 3.14159; // (0)
double volume;
volume = 4.0 / 3.0 * PI * rayon * rayon * rayon; // (1)
return volume; // (2)
}
2. [Link]
NVJ - LICENCE
MERCI ET A BIENTOT
NVJ - LICENCE