Structure de données - esta-inf

publicité
Structure de données
ESTA, 01 Février 2017
Mohammed Khachan
1
Objectif
• Connaître les structures de données élémentaires,
tableaux, listes chaînées, piles, files, arbres
• Concevoir des structures de données et les algorithmes
qui les manipulent.
• Il ne s'agit pas d'un cours de programmation de C.
2
Concept
• Chaque COURS sera en partie :
• de l'algorithmique (des structures de données)
• de l'implantation dans un langage de programmation (C)
• TD/TP sur machine
• approfondir les structures de données et algorithmes du cours
• alternance TD et TP d'application
• Implémenter les exercices du TD
3
Plan
• Algorithmique
• Survol de l’architecture logicielle
• Rappel
• Récursivité (utilisation dans les arbres)
• Structures
(base des structures de données)
• Tableaux statiques et dynamiques
• Chaines de caractères
• Allocation mémoire.
• Listes chainées, piles, files.
• Algorithmes de Tri et parcours.
• Arbres.
• Tables de hachage.
4
Partie I
Algorithmique
5
Algorithme
Al Khawarizmi, Bagdad IXè siècle.
Encyclopedia Universalis :
« Spécification d’un schéma de calcul sous forme
d’une suite finie d’opérations élémentaires obéissant
à un enchaînement déterminé. »
DONNÉES
RÉSULTATS, ACTIONS
Composition d ’un nombre fini d’opérations dont chacune est :
• définie de façon rigoureuse et non ambiguë
• effective sur les données adéquates
(exécution en temps fini)
6
Différence entre problème et
instance du problème
• Exemple d’un problème: Tri d’un ensemble d’éléments
Entrée: Suite de n éléments a1,…an
Sortie: La suite ordonnée
• Instances du problème:
Suite de nombres: 475, 787, 34, 245, 56, 350
Suite de noms: Pierre, Christine, Sylvie, Samuel, Fabien
7
Fonction: difference entre déclaration et definition
• Une déclaration donne le nom et le type sans apporter d'autres
détails.
int sommeInt( int , int );
• Une définition précise les détails de l'implementation ou
l'emplacement de la mémoire.
int sommeInt( int a, int b )
{
return ( a+b );
};
• La Signature d'une fonction correspond a la partie de sa
déclaration qui précise les types de paramètres et le type de
retour. Le nom de la fonction ne fait pas partie de sa signature.
8
Fonction: difference entre paramètre et argument
• int sommeInt( int a, int b);
a et b sont les paramètres de la fonction.
void main()
{
int x=5, y=7;
int res= 0;
res= sommeInt( x, y );
// x et y sont les arguments de la fonction
}
9
Subdivision d’un problème en sousproblèmes (programmation modulaire)
Problème: Trouver le plus petit nombre
premier strictement supérieur à un entier
positif donné
Déterminer si un entier m est un nombre
premier.
Il suffit de tester si m est divisible par un entier
entre 2 et m/2
– Utiliser cette fonction pour trouver le plus petit
nombre premier supérieur à un entier n.
10
Subdivision d’un problème en sous-problèmes
11
programmation modulaire
La programmation modulaire consiste à
décomposer une application en modules, groupes
de fonctions pour pouvoir les développer
indépendamment, et les réutiliser dans d'autres
applications.
Exemple:
program.c
program.h, program.c, main.c
– program.h va contenir les déclarations des fcts.
– program.c (.cpp) va contenir les définitions des fcts.
– main.c (.cpp) va contenir le programme à exécuter.
12
programmation modulaire
13
Organisation du code
• Organisation du code :
• En fonctions, structures, etc.
• En fichiers.
• But:
• Plus de lisibilité.
• Facilité la maintenance du code.
• Réutilisation.
14
Partie II
Survol d’architecture logicielle
15
Programme ??
bin
lib
a.out
Exécutable(s)
.exe
.o
.so
.lib
.dll
Librairies et fichiers objets
Programme
include
.h
Fichiers de description (header)
src
.c
Fichiers d’implantation (source code)
16
Programmes et librairies
En C :
Exécutable ↔ main()
Pour la réutilisation, on utilise des bibliothèques
(ou librairies) de fonctions : une description de
chaque fonction (dans des fichier “.h” d’en-tête, ou
header), et du code compilé correspondant (des
“.lib” et “.dll” sous PC, des “.so” et “.a” sous UNIX)
17
La Compilation : Résumé
Fichiers
d’en-tête C
Code source C
Préprocesseur
.h
.c
Code pré-processé
Compilateur
Librairies
.lib .so
Fichier(s) Objet
.o
Editeur de liens
exécutable
a.out
.exe
18
Qualité d’un programme
Architecture claire
Réutilisabilité
Structures de données + Algorithmes;
Documentation;
Tests de robustesse;
19
Efficacité d’un algorithme
• Critère de mesure : complexité, pas temps d’exécution.
• On oublie ce qui est subjectif (programmeur, matériel, ... ).
• On cherche une grandeur n pour "quantifier" les entrées.
• On calcule les performances uniquement en fonction de n.
• Complexité d'un ALGORITHME, pas d'un programme !
• On doit essayer de choisir comme grandeur (n) la dimension la plus
significative. Par exemple :
• Tableaux, listes : nombre d'éléments.
• Arbres : la hauteur, le nombre de nœuds, de feuilles, ...
• Polynômes : le degré, le nombre de coefficients différents de 0, ...
• Le choix d'une structure de données a une grande influence sur
l'efficacité d'un algorithme ! !
20
Classe de complexité
21
Partie III
Rappel Programmation C
22
Programmation C
23
Téléchargement