Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Algorithmes et
Structures de Données
Principes
Capocchi Laurent
capocchi@univ-corse.fr
http://spe.univ-corse.fr/capocchiweb
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Introduction
Processus de Conception
Analyse
Programmation, codage
Édition des liens
Compilation
Test
Problème
Programme en
langage machine
Algorithme
Programme évolué
Programme exécutable
Solution acceptable
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Introduction
Un algorithme = séquence d’actions/instructions
Deux types d’actions
Actions primitives : Directement exécutable par la
machine sans infos supplémentaires
Lecture, Écriture, Affectation
Actions complexes : Non directement exécutable par
la machine, exprimées sous la forme d’une collection
d’actions primitives (sous-algorithme)
La conception d’un algorithme est basée sur
le principe de décomposition d’une action
complexe
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Introduction
Presentation d'un Algorithme
algorithme calculer la surface d’un cercle
constante PI = 3,14
variable : rayon, surface : Réel
début
écrire (‘Calcul de la surface d’un cercle’)
écrire (‘entrer un rayon’)
lire (rayon)
surface <- PI*rayon*rayon
écrire (‘la surface est’, surface)
fin
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Sommaire
Principe de l’algorithmique
Les variables dynamiques, les pointeurs
La récursivité
Les Structures de Données (I)
Les listes
Les piles, Les files
Les algorithmes de recherche, de tri simples et
évolués, calcul de complexi
Les Structures de Données (II)
Les arbres
Les graphes
Introduction au TAD
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Notions Préalables
Variables
Types de base : Entier, Réel, …
Tableaux (type Tab = tableau[0..Max-1] de Entier; …)
Enregistrements (type Individu = structure ;…)
Caractéristiques des variables statiques
Nom, taille connus à la compilation
Structure statique = cardinalité finie
L’espace occupé en mémoire (leur taille) reste constant
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Notions Préalables
Exemple des tableaux
Déclaration
Taille (nombre de cases)
Type des éléments
X : Tableau [0..14] de Entiers
X[0] <- 10
X[1] <- 5
X[2] <- 3
510 3
Places réservées et perdues
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Insuffisance des Structures statiques
Comment faire quand on ne connaît pas à l’avance le
nombre d’élément à stocker ?
Réserver beaucoup trop de place, pour être sûr que dans
tous les cas on en aura suffisamment quitte à perdre
beaucoup d’espace mémoire
Utiliser des structures dynamiques,
On peut créer de nouveaux objets selon les besoins
Si les objets ne sont plus utilisés on
peut libérer la mémoire assoc
Optimiser l’espace mémoire
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Structure dynamique
Définition
Une structure dynamique est une structure dont la taille (le
nombre de composants) peut varier an cours d'exécution
L'allocation de l'espace se fait au fur et à mesure
des besoins
Exemples
Listes, Files, Piles
Arbres, Graphes
....
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Variable dynamique
Définition
Un objet crée pendant l'exécution d'un programme
Elle possède
Un type
Une valeur
Un emplacement mémoire
Pas d'identificateur
Cette variable est accessible par le biais
d'un pointeur
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Definition: Pointeur (1)
Un pointeur est une variable qui contient l'adresse
mémoire d'un autre objet
Chaque objet est caractérisé par une adresse mémoire
La mémoire de l'ordinateur est découpée en mot (8, 16,
32, 64 bits)
Chaque octet est repéré par son numéro d'ordre appelé
adresse
Un pointeur a donc toujours la même taille
quelque soit l'objet pointé
Taille du pointeur dépend de la machine
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Definition: Pointeur (2)
L'objet dont l'adresse est repérée par un pointeur
s'appelle objet pointé
Si p est le pointeur qui le désigne, cet objet est
accessible par p
La déclaration d'un pointeur implique d'indiquer le
type des objets qu'il peut pointer
Pour savoir combien de cases mémoire, il faut
considérer pour récupérer l'objet poin
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Definition: Pointeur (3)
p:  Entier // pointeur sur entier
Pointeur: variable dont le contenue indique
l'emplacement en mémoire d'une autre variable
créée dynamiquement et d'un type donnée
Les pointeurs servent à désigner des objets
109 237
@109
p
Espace réservé non pas
pour un entier mais
pour une adresse
L’entier 237 est « pointé »
par p : on note p
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Utilisation possibles des pointeurs
Permettre l'accès à une structure créée dynamiquement
Une liste, une file ou une pile...
Un objet quelconque
Opération possibles
Associer un objet à un pointeur
Accéder , détruire ou modifier l'objet pointé
Indiquer l'absence d'objet poin
Permettre à deux pointeurs de pointer le même objet
Comparer deux pointeurs pour savoir s'ils
pointent le même objet....
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Variable dynamique de type pointeur
Une variable de type pointeur doit spécifier un type d'objets
pointés
Les objets pointés peuvent être de tout type, même du type
pointeur
Exemple de déclarations:
P: Caractère //se lit p, pointeur sur caractère
P1: Personne ou Personne = structure
nom: Chaîne(15)
prénom: Chaîne(15)
age: Entier
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Pointeur sur rien
Un pointeur est susceptible de ne pointer sur rien (aucune
variable dynamique)
On appellera nil une valeur de type pointeur qui caractérise
l'absence de pointage: p <- nil
Cette valeur permet l'initialisation des pointeurs qui est
très importante
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Pointeur sur un objet (1)
Création dynamique de l'objet pointé
Déclaration du pointeur
P: Caractère // pointeur sur caractère
P <- nil
Création de l'objet pointé
Reservation de mémoire: p <- obtenir()
Assignation: P <- 'C'
La variable pointée n'est accessible que par
l'intermédiaire du pointeur
nil
p
@
p
c
C
@
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Pointeur sur un objet (2)
Destruction de l'objet pointé
Il faut libérer l'espace mémoire qui a été crée
dynamiquement
Libérer (p)
p
@@c
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Creation et Destruction
Creation
On utiliser la fonction « obtenir » qui renvoie comme
résultat l'adresse de l'espace réservé
Fonction obtenir() : Type
Destruction
On utilise la procédure « libérer » qui détruit l'espace
pointé par l'adresse passée en paramètre.
Procédure libérer (entrée
Type)
Université de Corse - IUP NTIC2 2005/2006 – Algorithme et Structure de Données
Attention
Ne pas confondre la variable de type pointeur avec la
variable dynamique qu'elle désigne....
Variable de
type pointeur
@
p
237
@
Variable dynamique
de type entier
1 / 10 100%