Documente Academic
Documente Profesional
Documente Cultură
http://www.ensg.inpl-nancy.fr/~caumon/Teach
Introduction
Un cours dalgorithmique a Gol !???
Algorithme = suite dactions que devra effectuer un automate pour arriver partir dun tat initial, en un temps fini, un rsultat
Plan
Mmoire, pointeurs (1h) Organisation dun programme (1h) Structures de donnes: listes, arbres, tables... (8h) Algorithmique: exemple des tris (2h)
Partie I La mmoire
Les mmoires...
Mmoire et excution
Code Donnes statiques Pile
Tas
int* a = NULL;
a = NULL;
Dsallocation dynamique
a = (int*)realloc(4*sizeof(int));
Programme ??
bin a.out .exe
Excutable(s)
.so .lib .dll
lib
Programme include
.o
But du Jeu
Problmes a rsoudre
Complexit, Cot de maintenance
taille
temps
Organisation et rutilisation
Organisation du code :
En fonctions, structures, etc. En fichiers
Rutilisation
Programmes et librairies
En C : Excutable main()
Pour la rutilisation, on utilise des bibliothques (ou librairies) de fonctions : dune description de chaque fonction (dans des fichier .h den-tte, ou header), et du code compil correspondant (des .lib et .dll sous PC, des .so et .a sous UNIX)
La Compilation : Rsum
Fichiers den-tte C
.h Prprocesseur
Code source C
.c
Code pr-process
Compilateur
Librairies
.lib .so
Fichier(s) Objet
.o
Editeur de liens
excutable
a.out .exe
Introduction
Problme mtaphysique: Comment Organiser au Mieux lInformation dans un Programme ?
Tableaux int tab[10]; Structures struct Data_t { int index_; char* value_; } Data_t;
Structures de donnes
Les tableaux
Accs index (de 0 n-1 pour un tableau de n lments) Stockage compact Taille fixe, en gnral Rajustement de taille coteux en temps Insertion dlment onreuse en temps.
Tte
Noeud
Tte
Node_t
p_data p_next
List_t
Data_t
But du programme: construire et trier une liste dentiers par ordre croissant.
void push(Data_t*)
Data_t* pop(void)
Introduction la complexit
Annuaire avec noms et coordonnes
temps t t = a 2N t = a N2
t=aN
t = a logN
nombre dabonns N
Accs rapide
Tables : Associent une cl a un lment dans le conteneur.
F1
B4
B8
B5
B9 B10
B6
F3
F2
F4
B7
F5
F6
F7
F8
F9
F10
Arbres: Spcifications
Crer un arbre Parcours pre-order Parcours post-order Parcours in-order Ajout / retrait dun noeud Dtruire un arbre
TreeNode_t
p_parent p_first_child p_data p_next
Data_t
Tree.h
typedef struct TreeNode_t { struct TreeNode_t* p_parent_; struct TreeNode_t* p_first_child_; Data_t* p_data_; struct TreeNode_t* p_next_; } TreeNode_t;
Tree.h
TreeNode_t* tree_find_root( TreeNode_t* p_parent, Data_t* p_data );
Tree.h
void tree_inorder( TreeNode_t* p_root, void(* do_it)( Data_t* ) ); TreeNode_t* tree_delete_branch( TreeNode_t* branch );
N3 N9 N14 N18
Tableau entre Pour i de 1 n Faire: int j <- min_index(entree,i) Si j i Faire swap(entree[i],entree[j]) FinSi FinPour
Besoins
swap, comp
314632957182 312632957184 312132957684 212133957684 212133957684 11223 3957684 11223 457689 45768 9 45768 5768 678
Conclusion
Fonctionnement dun programme et dun ordinateur
References
Web Aho et al. Structures de donnees et algorithmes, Addisson-Wesley / InterEditions. 1989. Aho et Ullman. Concepts fondamentaux de linformatique, Dunod. 1993. Sedgewick. Algorithmes en C. Addisson-Wesley / InterEditions. 1991.
short carre( short v ) { return a * a; } void imprimer( int nb_elems, short (* function )( short ) ) { for( i = 0; i < nb_elems; ++i ) { printf( %d , (* function) ( tab[i] ) ); } }
int main() { for( i = 0; i < 10; i++ ) { tab[i] = n; } imprimer( 10, carre ); }