0% ont trouvé ce document utile (0 vote)
66 vues98 pages

Algorithmes et Structures de Données 2024

Le document présente un cours sur les algorithmes et les structures de données, structuré en plusieurs chapitres allant des notions de base aux structures avancées comme les arbres et les graphes. Il détaille également les concepts fondamentaux tels que les variables, les instructions d'affectation, et les structures de contrôle et de répétition. Le cours est prévu pour se dérouler du 21 février au 15 mars 2024, avec des travaux dirigés et pratiques intégrés.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
66 vues98 pages

Algorithmes et Structures de Données 2024

Le document présente un cours sur les algorithmes et les structures de données, structuré en plusieurs chapitres allant des notions de base aux structures avancées comme les arbres et les graphes. Il détaille également les concepts fondamentaux tels que les variables, les instructions d'affectation, et les structures de contrôle et de répétition. Le cours est prévu pour se dérouler du 21 février au 15 mars 2024, avec des travaux dirigés et pratiques intégrés.
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

ALGORITHME ET STRUCTURES DE DONNEES

LICENCE - 2024

Par Jeannet NOUO VOUDZA


Ingénieur Informaticien
Chargé de cours
PLAN DU COURS

Chapitre 1 : Les Généralités et Notions de Base


Chapitre 2 : Les Enregistrements et les Tableaux
Chapitre 3 : Les Fichiers
Chapitre 4 : Les Pointeurs
Chapitre 5 : Les Listes, Files et Piles
Chapitre 6 : Les Arbres
Chapitre 7 : Les Graphes
Chapitre 8: La Complexité Algorithmique

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

Chap. 1 : Les Généralités et Notions de Base

I - Ordinateur, Programme et Langage


II - Variables et instruction d'affectation
III - Les structures de contrôle
IV- Les structures de répétition
V-Les Fonctions et Procédures

NVJ - LICENCE 4
I
Ordinateur, Programme et Langage

5
NVJ - LICENCE 5
I : Ordinateur, Programme et Langage

L’ordinateur

Il traite l’informations grâce à un programme qu’il mémorise. Il communique


et archive des informations:

✓ Mémoire centrale: Programme et infos temporaires


✓ Unité centrale: chargée de prélever une à une les instructions du
programme, il y a deux types d’instructions:
• Opérations internes (addition, soustraction, …)
• Opérations de communication (affichage, archivage, …)
✓ Périphériques: d’entrée, de sortie, d’entrée/sortie

6
NVJ - LICENCE 6
I : Ordinateur, Programme et Langage
L’ordinateur

1. Prélèvement d’une instruction

2. Exécution de l’instruction avec possibilité d’échange avec la MC

3. Exécution d’une instruction d’échange avec un périphérique


7
NVJ - LICENCE 7
I : Ordinateur, Programme et Langage
L’ordinateur

ORGANISATION DE LA MÉMOIRE CENTRALE

✓ C’est une ‘’grille’’ où chaque case peut prendre la valeur 0 ou 1 (bit);

✓ On ne manipule pas des cases mais des ensembles de case qu’on


appelle mots;

✓ Généralement un mot correspond à un octet (8 bits);

✓ Chaque mot a une adresse;

8
NVJ - LICENCE 8
I : Ordinateur, Programme et Langage
L’ordinateur
UNITE CENTRALE

✓ Sait exécuter des opérations très simples:

• Addition, soustraction, comparaison, …

✓ Chaque instruction du programme doit préciser

• La nature de l’opération (son code binaire)

• La ou les adresses sur lesquelles porte l’opération

✓ Les instructions sont exécutées l’une à la suite de l’autre

• Sauf si on rencontre une opération de branchement


9
NVJ - LICENCE 9
I : Ordinateur, Programme et Langage
L’ordinateur

NOTION DE SYSTÈME D’EXPLOITATION

✓ Logiciel de base d’un ordinateur (Windows, Unix, OS/400, Android,


IOS, Mac OS, etc…)

✓ Fait le lien entre les utilisateurs et les logiciels applicatifs

✓ Gère les différents accès aux ressources des logiciels

10
NVJ - LICENCE 10
I : Ordinateur, Programme et Langage
Programme

Lire les Ecrire les


Effectuer les
données en données en
calculs
entrée sortie

✓ L’ordinateur ne comprend que le binaire, est ce pour autant qu’on


doive écrire des programmes en binaire ?

✓ Il existe des langages de programmation dits « évolués » (proches


du langage courant, généralement de l’anglais)

✓ Pour chaque langage, il existe un programme « qui le traduit » en


binaire
11
NVJ - LICENCE 11
I : Ordinateur, Programme et Langage
Programme

Il existe essentiellement deux modes de traduction :

✓ Compilation: la traduction se fait une fois pour toute

✓ Interprétation: a chaque fois qu’on veut exécuter le programme,


l’interprète traduit une instruction à la fois. Une fois que celle-ci est
exécutée, il passe à l’instruction suivante

12
NVJ - LICENCE 12
I : Ordinateur, Programme et Langage
Langage

✓ A priori, écriture de programmes dans un langage de programmation (C,


Java, Pascal, Visual Basic, Fortran, Python, Perl, …)

✓ Or, il y a plusieurs langages, est ce que cela veut dire qu’il existe
plusieurs sortes de programmation?

✓ En réalité, la plupart des langages utilisent les mêmes concepts


dans le cours, on utilisera une notation particulière: Notation
algorithmique

13
NVJ - LICENCE 13
I : Ordinateur, Programme et Langage
Programmation

Elle s’effectue en 2 étapes:

✓ Analyse du problème et recherche du moyen d’aboutir au résultat


à partir des données dont on dispose, écriture d’un algorithme,

✓ Traduction de l’algorithme dans un langage de programmation.

14
NVJ - LICENCE 14
I : Ordinateur, Programme et Langage
Algorithme

✓ Une description des différentes étapes permettant de résoudre un


problème quelconque
✓ Ex: Résolution d’une équation du 2nd degré
1. Connaître les valeurs de a, b et c
2. Calculer le discriminant D=b2 –4ac
3. Si D < 0 alors pas de solution
Sinon Si D = 0 alors solution double = b/2a
Sinon (donc D > 0) alors deux solutions

15
NVJ - LICENCE 15
Conclusion
Étapes de conception d'un programme informatique

1 – Identifier le problème : quelle(s) donnée(s), quel(s) résultat(s) ?


2 – Organiser les actions : écrire l'algorithme (pseudo-code, organigramme)
- Réfléchir aux informations à manipuler
- Analyser le problème et le décomposer éventuellement en sous-
problèmes
- Rendre l'algorithme compréhensible et efficace
- Penser à l'utilisateur
3 – Traduire cet algorithme en langage de programmation
4 – Compiler le programme pour qu'il puisse être exécutable

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;.

Note: Tout instruction se termine par un point virgule(;).

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

Une boucle permet d’effectuer un traitement à plusieurs reprises(Répétition).


Il existe plusieurs types de boucles :
- la boucle TANT QUE
- la boucle REPETER (ou boucle JUSQU’À CE QUE)
- la boucle POUR (extension de la boucle TANT QUE)

✓ Principe de la boucle TANT QUE

TANT QUE la condition est vraie :


- on effectue l’instruction (ou le bloc d’instructions)
- on revient au début de la boucle Lorsque la condition est fausse, on
passe à l’instruction suivante.

Tant que <condition> Faire


<instruction>
FinTantque
28
NVJ - LICENCE 28
IV : Les structures de répétition
✓ Principe de la boucle Répéter

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

Pour <var> ← valInit à valfin [par <pas>] faire


traitement {suite d’instructions}
Finpour
29
NVJ - LICENCE 29
IV : Les structures de répétition
Pour cpt ← 1 à nbVal Faire
Afficher("Donnez une valeur :")
Saisir(valeur);
totalValeurs ← totalValeurs+ valeur;
Finpour

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

✓ Comparaison des boucles POUR et TANT QUE


Pour cpt _1à nbVal Faire
afficher("Donnez une valeur :")
saisir(valeur)
totalValeurs_totalValeurs+ valeur {cumul}
Finpour

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

▪ Implicitement, l’instruction Pour:


• initialise un compteur
• incrémente le compteur à chaque pas
• vérifie que le compteur ne dépasse pas la borne
Supérieure

▪ Explicitement, l’instruction Tant que doit :


• initialiser un compteur {amorçage}
• incrémenter le compteur à chaque pas {relance}
• vérifier que le compteur ne dépasse pas la borne
supérieure {test de boucle}
32
NVJ - LICENCE 32
IV : Les structures de répétition

▪ Quand choisir POUR ou TANT QUE?

➢ Si le nombre d’itération connu à l’avance : POUR


• Parcours de tableaux
• Test sur un nombre donné de valeurs
➢ Si la boucle s’arrête sur événement particulier : TANT QUE
• Itération avec arrêt décidé par saisie utilisateur

33
NVJ - LICENCE 33
IV : Les structures de répétition

✓ Comparaison des boucles Répéter et TANT QUE


Répéter
Afficher("Donnez une valeur positive paire :");
Saisir(valeur);
Jusqu’à (valeur < 0);

Est équivalent à

Afficher("Donnez une valeur positive paire :") ;


Saisir(valeur);
Tant que(valeur < 0) Faire
Afficher("Donnez une valeur positive paire:");
Saisir(valeur);
FinTantQue

34
NVJ - LICENCE 34
IV : Les structures de répétition

▪ Pour la boucle Tant que


• condition vérifiée avant chaque exécution du traitement
• le traitement peut donc ne pas être exécuté
• de plus : la condition porte surtout sur la saisie de nouvelles
variables (relance)

▪ Pour la boucle Répéter … Jusqu’à


• condition vérifiée après chaque exécution du traitement
=>le traitement est exécuté au moins une fois
• de plus: la condition porte surtout sur le résultat du traitement

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

▪ Les variables globales


Une variable globale est accessible à l’ensemble des sous
programmes d’un programme.
▪ Les variables locales
Une variable locale n’est accessible que dans le sous programme dans
lequel elle est déclaré.

▪ Le passage de variables par adresse


Dans ce cas, les paramètres d’une fonction/procédure sont des
adresses mémoires modifiables dans le sous programmes.

▪ Le passage de variables par valeur


Dans ce cas, les paramètres d’une fonction/procédure conservent leurs
valeurs à la fin du sous programmes.

39
NVJ - LICENCE 39
TRAVAUX DIRIGES

40
NVJ - LICENCE 40
PLAN DU COURS

Chap. 2 : Les Enregistrements et les Tableaux

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

VAR identificateur_objet : 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;

VAR Etudiant : Fiche ;

➢ Affectation des valeurs à cette variable :

[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 ;

VAR identificateur_objet : Nom_type ;

✓ Exemple
Fiche = Enregistrement
nom, prénom : Chaîne;
sexe : Caractère;
numéro : Entier non signé;
moyenne : Réel;
Fin Fiche

Var Liste_Etudiants: Tableau de Fiche;


Ou
Liste_des_notes: Tableau de Réels;
45
NVJ - LICENCE 45
II: Les Tableaux
✓ Exemple
Fiche = Enregistrement
nom, prénom : Chaîne;
sexe : Caractère;
numéro : Entier non signé;
moyenne : Réel;
Fin Fiche

Var Liste_Etudiants: Tableau [1…Max] de Fiche;

0 1 2 3 4 5 6 …. Max
Liste_Etudiants

nom := ‘’Charles’’ ; nom := ‘’André’’ ;


prénom :=‘’NGUEMA’’ ; prénom :=‘’’MOUSSAVOU’’ ;
sexe :=‘’M’’; sexe :=‘’M’’;
numéro := 25; numéro := 29;
moyenne := 14.25; moyenne := 10.25;

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

nom := ‘’Charles’’ ; nom := ‘’André’’ ;


prénom :=‘’NGUEMA’’ ; prénom :=‘’’MOUSSAVOU’’ ;
47
NVJ - LICENCE 47
III: Les Applications
Exercice 1:

Un produit quelconque peut être représenté par les informations ci-


dessous :

- La désignation du produit

- La référence du produit

- Sa quantité en stock

- Son prix unitaire

Proposer une structure pouvant permettre de gérer les produits.

Exercice 2:
Proposer une structure pouvant permettre la manipulation des nombres
complexes (Ensemble ℂ).
48
NVJ - LICENCE 48
III: Les Applications
Exercice 3:

Soit un tableau T de nombre de taille Max initialisé à 0. Proposer des


algorithmes qui permettent de :

1- Permuter deux éléments en position i et j de ce tableau;

2- Supprimer un élément en position i du tableau;

3- Insérer un élément en position i du tableau;

4- Trier par ordre croissant les éléments du tableau.

Exercice 4:

Ecrire un algorithme qui déclare un tableau de 9 notes, dont on fait ensuite


saisir les valeurs par l’utilisateur.

49
NVJ - LICENCE 49
III: Les Applications

Exercice 5:

Un médecin enregistre sur ordinateur les fiches de ses Patients. Une


fiche a la structure suivante :

- un nom (chaîne de 30 caractères maximum) ;

- un numéro (entier) ;
- un numéro de téléphone (10 caractères maximum) ;

- un code d'assurance (entier non signé).

1/ Ecrire les algorithmes des différents modules d'un programme


nommé Fiche, qui permet la saisie et l'affichage de l'enregistrement
d'un Patient.
2/ Traduire ce programme en Pascal.

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 ;

VAR identificateur_objet : Nom_type_tableau2 ;


✓ Exemple
Matrice=Tableau de [1..Max1] [1..Max2] de
Var Liste_Pions: Matrice;

✓ Parcours d’un tableau à deux dimensions


Var T: Matrice;
➢ En lecture / En Ecriture
Pour i ← 0 à Max Faire
Pour i ← 0 à Max Faire
Lire(T[i,j]);
Ecrire((T[i,j]);
FinPour
FinPour
51
NVJ - LICENCE 51
II: Les Tableaux
➢ Les algorithmes de tri
Permettent de donner un ordre aux éléments d’un tableau ou
d’une liste.
✓ Tri par sélection
Procédure Tri_Selection(Var T:Tableau)
var i, j, posmini : entier;
temp : Type_des_élements_tableau
Debut
Pour i ← 0 à Max Faire
posmini ← i
Pour j ← (i + 1) à Max Faire
Si (T[j] < T[posmini]) Alors
posmini ← j
Finsi
FinPour
temp ← T[posmini];
T[posmini) ← T[i] ;
T[i] ← temp;
FinPour
Fin;

52
NVJ - LICENCE 52
PLAN DU COURS

Chap. 3: Les Fichiers


I-Définition
II-Accès à un fichier
III-Manipulation de fichiers
IV-Exemple en Pascal

NVJ - LICENCE 53
Chap. 3 : Les Fichiers
I-Définition:

Un fichier est une séquence d'enregistrements (fiches) du même type


(entier, réel, caractère, …) rangée sur une mémoire secondaire (disque,
disquette, …).

II-Accès à un fichier :

Il existe 2 types accès à un fichier :

➢ accès séquentiel ;

o On ne peut accéder qu’à la donnée suivant celle qu’on vient de lire.

o On ne peut donc accéder à une information qu'en ayant au


préalable examinée celle qui la précède.

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;

o On peut accéder directement à l’enregistrement de son choix, en


précisant le numéro de cet enregistrement.

III-Manipulation de fichiers :

o Définition du type fichier : F: Fichier de Type_données_fichier;


o Création d'un fichier : Créer(nom_fichier, F) ;
o Désignation d'un fichier : Assigner(nom_fichier, F) ;
o Ouverture d'un fichier : Ouvrir(F,mode);
mode::= lecture | écriture | lecture/écriture

o Fermeture d'un fichier : Fermer(F); 55


NVJ - LICENCE 55
Chap. 3 : Les Fichiers
III-Manipulation de fichiers :

o Ouverture d'un fichier : Ouvrir(F,mode) ;


mode::= lecture | écriture | lecture/écriture

o Fermeture d'un fichier : Fermer(F);


o Écriture dans un fichier : Ecrire(F,données) ;
o Lecture d'un fichier : Lire(F, variable);
Remarque : Après chaque écriture/lecture, le pointeur (curseur) du fichier est
automatiquement avancé.

Accès direct :
o Décaler(F, position, décalage) ;
position::= Début_fichier | Fin_fichier | Position_courante

o Fin d'un fichier : Fin(F);

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

Chap. 4: Les Pointeurs


I-Définition
II-Liste Linéaire
III-Déclaration
IV-Primitives
V-Quelques Algorithmes
VI-Listes doublement chainées

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.

La variable pointeur P pointe sur l'espace mémoire P^ d'adresse 3.


Cette cellule mémoire contient la valeur "Essai" dans le champ Info et
la valeur spéciale Nil dans le champ Suivant.
59
NVJ - LICENCE 59
Chap. 4 : Les Pointeurs

II-Liste Linéaire Chainée :


Une liste linéaire chaînée (LLC) est un ensemble de maillons, alloués
dynamiquement, chaînés entre eux. Schématiquement, on peut la
représenter comme suit : abcdef

Les listes chaînées entraînent l'utilisation de procédures d'allocation et de


libération dynamiques de la mémoire.
✓ Allouer(P) : réserve un espace mémoire P^ et donne pour valeur à
P l'adresse de cet espace mémoire.
✓ Désallouer(P) : libère l'espace mémoire qui était occupé par
l'élément à supprimer P^ sur lequel pointe P.

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;

- Définition le type du pointeur : Type Liste = ^Cellule;


- Déclaration d’une variable pointeur : Var P : Liste;
- Allocation d’une cellule mémoire qui réserve un espace en mémoire et donne
à P la valeur de l'adresse de l'espace mémoire P^ : Allouer(P);
- Affectation des valeurs à l'espace mémoire P^ : P^.Info ← "Essai" ;
P^.Suivant ← Nil;

NB: Quand P = Nil alors P ne pointe sur rien


61
NVJ - LICENCE 61
Chap. 4 : Les Pointeurs
IV-Primitives :
Les principaux traitements qui peuvent être effectué sur des listes sont les suivants :
✓ Créer une liste.
✓ Ajouter un élément.
✓ Supprimer un élément.
✓ Modifier un élément.
✓ Parcourir une liste.
✓ Rechercher une valeur dans une liste.

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.

Déclarations des types pour la liste :


Type ListeDC = ^Element;

Type Element = Structure


Precedent : ListeDC;
Info : Variant;
Suivant : ListeDC;
Fin Structure;

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

Chap. 5: Les Piles et les Files


I-Les Piles
II-Les Files

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.

Les opérations autorisées avec une pile sont :


✓ Empiler, toujours au sommet, et jusqu’à la limite de la mémoire,
✓ Dépiler, toujours au sommet, si la pile n’est pas vide,
✓ Vérifier si la pile est vide ou non.

67
NVJ - LICENCE 67
Chap. 5 : Les Piles et les Files
➢ Les algorithmes des Piles

Les procédures les plus utilisées suivantes:


✓ Initialiser(p) : Initialisation d'une pile;
✓ Est_vide(p) : Vérification si la pile est vide;
✓ Taille(p) : Taille d'une pile;
✓ Empiler(p,element) : ajouter un élément à la pile;
✓ Depiler(p) : supprimer un élément de la pile;

➢ Exercices d’applications

Ecrire les algorithmes des procédures ci-dessus traitant les différentes


opérations sur les piles.

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.

Les opérations autorisées avec une pile sont :


✓ Enfiler, toujours en queue, et jusqu’à la limite de la mémoire,
✓ Défiler, toujours en tète, si la file n’est pas vide,
✓ Vérifier si la file est vide ou non.

69
NVJ - LICENCE 69
Chap. 5 : Les Piles et les Files

➢ Les algorithmes des Files

Les procédures les plus utilisées sont:


▪ Initialiser(f), initialise la file;
▪ Est_vide(f), renvoi Vrai si la file est vide;
▪ Taille(f), renvoi le nombre d’élément dans la file;
▪ Enfiler(f,element), permet d’ajouter un élément dans la file;
▪ Defiler(f), permet de retirer un élément de la file;

➢ Exercices d’applications

Ecrire les algorithmes des procédures ci-dessus traitant les différentes


opérations sur les files.

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)!

Fonction Fact(var a:reel):reel;


Début
Fact <- a * Fact(a-1);
Fin;

➢ 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 :

si n <1 n! = 1 sinon n! = n x (n-1)!.

Fonction Fact(var a:reel):reel;


Début
Si(a <1) alors
Fact <- 1
sinon
Fact <- a * Fact(a-1);
Finsi;
Fin;

74
NVJ - LICENCE 74
Chap. 6 : La Récursivité

➢ La pile d’exécution

Fact(3):reel; Chaque sous-programme (le programme principal


début “main” aussi) utilise une zone de mémoire pour
Fact <- 3 * Fact(2); stocker ses paramètres et ses variables locales, de
fin plus, une fonction réserve aussi dans sa zone de
mémoire une place pour le résultat retourné.

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

Fact(2) Fact(1) Fact(0) 1


Fact(1):reel;
début
Fact <- 1 * Fact(0);
fin
75
NVJ - LICENCE 75
PLAN DU COURS

Chap. 7: Les Arbres


I-La Définition
II-Les Terminologies
III-Les Arbres binaires

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.

✓ Taille: On appelle la taille d'un arbre, le nombre de nœud interne qui le


compose. C'est à dire le nombre de nœud total moins le nombre de
feuille de l'arbre. On appelle également la profondeur d'un nœud la
distance en terme de nœud par rapport à l'origine. Par convention, la
racine est de profondeur 0.

✓ Hauteur: La hauteur de l'arbre est la profondeur maximale de ses


nœuds. C'est à dire la profondeur à laquelle il faut descendre dans l'arbre
pour trouver le nœud le plus loin de la racine.
78
NVJ - LICENCE 78
Chap. 7 : Les Arbres
II-Les terminologies
Exemple :

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 principe des algorithmes associés:


✓ Le parcours préfixé (pré-ordre):
1. Traitement de la racine ;
2. Parcours du sous-arbre gauche ;
3. Parcours du sous-arbre droit;

✓ Le parcours infixe,
1. Le parcours du sous-arbre gauche ;
2. Traitement de la racine ;
3. Parcours du sous arbre-droit.

✓ Le parcours postfixé (post-ordre).


1. Parcours du sous-arbre gauche ;
2. Parcours du sous-arbre droit ;
3. Traitement de la racine .
83
NVJ - LICENCE 83
Chap. 6 : Les Arbres

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

La notation la plus utilisée pour noter la complexité d'un


algorithme est la notation O (pour ordre de...), qui dénote un ordre
de grandeur.
Par exemple, on dira d'un algorithme qu'il est O(15) s'il nécessite
au plus 15 opérations (dans le pire cas) pour se compléter. En
français, on dira qu'il est O de 15 ou encore de l'ordre de 15.
Souvent, comme dans le cas où un algorithme manipule un tableau
de n éléments (on dira un tableau de taille n), la complexité sera
notée en fonction de cette taille.

91
NVJ - LICENCE 91
Chap. 8 : La Complexité

II-Le Calcul de la complexité


Pour calculer la complexité d'un algorithme donné, il convient tout
d'abord de compter le nombre d'opérations impliquées par son
exécution.

Propriétés:
Les opérations qui vont devoir être comptabilisées auront les coûts suivant :

✓ Les affectations comptent pour 1 unité de temps : a←2


✓ Les comparaisons (comme les tests) comptent pour 1 unité de temps : 2<3
✓ L'accès aux mémoires comptent pour une 1 unité de temps : Lire(a)
✓ Chaque opération élémentaire comptent pour une 1 unité de temps : 3+2
ou 12*35

92
NVJ - LICENCE 92
Chap. 8 : La Complexité

II-Le Calcul de la complexité


Pour calculer la complexité d'un algorithme donné, il convient tout
d'abord de compter le nombre d'opérations impliquées par son
exécution.
Exemple:
Déterminons le coût de la ligne de code suivante :
a←a+1
La complexité, notée T(n), est :
T(n)=1 (pour l'affectation) +1 (pour l'accès à la mémoire a)+1(pour l'addition)=3
.

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.

On notera ce type de coût constant : O(1)


.
93
NVJ - LICENCE 93
Chap. 8 : La Complexité

II-Le Calcul de la complexité


✓ Lorsqu'un algorithme est O(c) où c est une constante, on dit
qu'il s'agit alors d'un algorithme en temps constant.
✓ Une complexité constante est la complexité algorithmique
idéale, puisque peu importe la taille de l'échantillon à traiter,
l'algorithme prendra toujours un nombre fixé à l'avance
d'opérations pour réaliser sa tâche.
➢ coût linéaire :
✓ si le coût est proche d'être proportionnel à la
taille n lorsque n est très grand ; ce coût est désormais
noté O(n) :
✓ si le temps d'exécution T(n) est majorée par a×n+b,
avec a et b deux constantes réelles, alors on
note T(n)=O(n).
94
NVJ - LICENCE 94
Chap. 8 : La Complexité

II-Le Calcul de la complexité

➢ 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)

On peut utiliser cette complexité en temps pour privilégier un


algorithme à un autre.

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)
}

✓ L'algorithme sera O(2) ou O(8), tout dépendant de la manière


de compter les opérations.
✓ Lorsqu'un algorithme est O(c) où c est une constante, on dit
qu'il s'agit alors d'un algorithme en temps constant.
✓ Une complexité constante est la complexité algorithmique
idéale, puisque peu importe la taille de l'échantillon à traiter,
l'algorithme prendra toujours un nombre fixé à l'avance
d'opérations pour réaliser sa tâche.
96
NVJ - LICENCE 96
REFERENCES
1. [Link]

2. [Link]

NVJ - LICENCE
MERCI ET A BIENTOT

NVJ - LICENCE

Vous aimerez peut-être aussi