STRUCTURES DE DONNÉES Maxime CROCHEMORE

Slides:



Advertisements
Présentations similaires
LES NOMBRES PREMIERS ET COMPOSÉS
Advertisements

Tris.
Fonctions & procédures
Calcul géométrique avec des données incertaines
Introduction à l’Algorithmique
Calculs de complexité d'algorithmes
LE CALCUL LITTÉRAL AU COLLÈGE
Problème de 8 dames: Sachant que dans un jeu des échecs, une dame peut pendre toute pièce se trouvant sur la colonne ou sur la ligne ou sur les diagonales.
1 UMLV Optimalité des tris par comparaisons : O(n logn) Classements linéaires Tris lexicographiques Tri lexicographique.
1 UMLV 1. Introduction 2. Hachage ouvert 3. Hachage fermé 4. Implémentation des fonctions Méthodes de hachage.
UMLV 1 Problème G = (S, A) graphe (orienté) Calculer H = (S, B) où B est la clôture réflexive et transitive de A. Note : (s,t) B ssi il existe un chemin.
Cours n°2M2. IST-IE (S. Sidhom) UE 303 Promo. M2 IST-IE 2005/06 Conception dun système d'information multimédia Architecture trois-tiers : PHP/MySQL &
et évaluation des compétences
INTRODUCTION.
ESIEE Paris © Denis BUREAU I N Initiation à la programmation avec le langage Java.
Ordonnancement des mouvements de deux robots
Les sous-programmes Chapitre n° 5: Objectifs : Activité:
Références Bibliographiques
1 Cours numéro 3 Graphes et informatique Définitions Exemple de modélisation Utilisation de ce document strictement réservée aux étudiants de l IFSIC.
Récursivité.
Introduction à l’algorithmique
Les structures de données arborescentes
Analyse lexicale Généralités Expressions rationnelles Automates finis
Les algorithmes: complexité et notation asymptotique
1.2 COMPOSANTES DES VECTEURS
Détection de co-évolution de gènes Master 2 : Informatique à Finalité Professionnelle et Recherche Unifiée (IFPRU) Parcours Ingénierie de lIntelligence.
Les tris.
F Copyright © Oracle Corporation, Tous droits réservés. Créer des programmes avec Procedure Builder.
Analyse d’Algorithmes
Calculs et écritures fractionnaires
Introduction à l’algorithmique
Courbes de Bézier.

1.1 LES VECTEURS GÉOMÉTRIQUES
Notre calendrier français MARS 2014
Algorithmique (Introduction)
1 La récursion. Nous avons vu qu'un programme est constitué d'un ensemble de fonctions. Il est possible pour une fonction donnée d'appeler une autre fonction.
Efficacité des algorithmes
Chapitre 9 Les sous-programmes.
Chapitre 3 Syntaxe et sémantique.
Introduction au calcul quantique
Les Algorithmes de Tri Introduction Tri par Sélection
Programmation dynamique
Tutorat en bio-informatique Le 21 novembre Exercices 2 et 3 (MAT1400) - solutions Chapitre 11.7, Analyse - concepts et contextes vol. 2 27) Cherchez.

326 UMLV Méthodes de classement destinées à de grandes masses de données Applicables à des fichiers séquentiels Complexité : évaluée surtout en nombre.
Programmation linéaire en nombres entiers : les méthodes de troncature
NORMALISATION DES LANGAGES DE PROGRAMMATION des Automates Programmables Industriels CEI

ASI 3 Méthodes numériques pour l’ingénieur
Structures des données
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
CALENDRIER-PLAYBOY 2020.
LES PILES ET FILES.
O-notation 1. Introduction 2. O-notation 3. Opérations 3.1 Somme 3.2 Produit 4. Règles générales 5. Exemple 6.Analyse des algorithmes récursifs 6.1 Dilatation.
INTRODUCTION.
Chapitre 3 :Algèbre de Boole
Rappels de statistiques descriptives
ITI1520 Lab #8: Récursivité Gilbert Arbez, Mohamad Eid, Daniel Amyot, Sylvia Boyd, Diana Inkpen et Alan Williams.
Algorithmique et programmation (1)‏
Algorithmes de tri et de recherche
2005/2006 Structures de Données Introduction à la complexité des algorithmes.
Cours 5 - Trois algorithmes de tri d'un tableau
8PRO107 Éléments de programmation Les tableaux. Étude de cas 1 Description du problème : Lire une liste d’entiers et l’afficher d’abord dans le même ordre.
CSI2510 Structures de données et algorithmes Analyse des algorithmes
Chap. 3 Récursion et induction. Les définitions par récurrence consistent à construire des objets finis, à partir d'autres, selon certaines règles. Les.
L'exécution d'un programme nécessite l'utilisation des ressources de l'ordinateur : temps de calcul pour exécuter les opérations, et l'occupation de la.
1 UMLV  Université de Marne-la-Vallée STRUCTURES DE DONNÉES Maxime CROCHEMORE
Transcription de la présentation:

STRUCTURES DE DONNÉES Maxime CROCHEMORE UMLV ã STRUCTURES DE DONNÉES Maxime CROCHEMORE http://www-igm.univ-mlv.fr/~mac/ Université de Marne-la-Vallée

Algorithmes, preuve, complexité Récursivité UMLV ã Plan du cours Structures de données Algorithmes, preuve, complexité Récursivité Types abstraits, listes, ensembles Classements Recherches Algorithmique Graphes et leurs traitements Algorithmes sur les langages et automates Traitement des chaînes de caractères

Conception de méthodes pour la résolution de problèmes UMLV ã Algorithmique Conception de méthodes pour la résolution de problèmes Description des données Description des méthodes Preuve de bon fonctionnement Complexité des méthodes Efficacité : temps de calcul, espace nécessaire, ... Complexité intrinsèque, optimalité Solutions approchées Réalisation - implémentation Organisation des objets Opérations élémentaires

Pascal, C, Java, ... Modèle Algorithme Mathématique UMLV ã Modèle Mathématique Algorithme informel ou abstrait Types de données abstraits Algorithme formalisé Super-Pascal Structures de données Programme Pascal, C, Java, ...

Encyclopedia Universalis : UMLV ã Algorithme Al Khowarizmi, 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)

Beauquier, Berstel, Chrétienne Éléments d’algorithmique, Masson, 1993. UMLV ã Bibliographie Beauquier, Berstel, Chrétienne Éléments d’algorithmique, Masson, 1993. Sedgewick Algorithmes en C, InterÉditions, 1992. Aho, Hopcroft, Ullman Structures de données et algorithmes, InterÉditions, 1987. Cormen, Leiserson, Rivest Algorithmes, Dunod, 1994.

Bien distinguer ! UMLV ã Spécification d ’un algorithme : ce que fait l’algorithme cahier des charges du problème à résoudre Expression d ’un algorithme : comment il le fait texte dans un langage de type Pascal / C Implémentation d ’un algorithme : traduction du texte précédent dans un langage de programmation réel

Éléments de méthodologie UMLV ã Éléments de méthodologie Programmation structurée Modularité Programmation fonctionnelle Récursivité Types abstraits de données Objets Réutilisabilité du code

UMLV ã Exemple : classement Suite s = (7, 3, 9, 4, 3, 5) Suite classée c = (3, 3, 4, 5, 7, 9) (en ordre croissant) Spécification suite suite classée Méthode informelle (Bulles) tant que il existe i tel que si > si +1 faire échanger (si, si +1) Opérations élémentaires comparaisons transpositions d’éléments consécutifs

Inversion : (i,j) tels que i < j et si > sj UMLV ã Preuve Inversion : (i,j) tels que i < j et si > sj Inv(s) = nombre d’inversions dans la suite s Inv(7, 3, 9, 4, 3, 5) = 8 s = (s1, …, si-1, si, si+1, si+2, …, sn) échange de si et si+1 s’ = (s1, …, si-1, si+1, si, si+2, …, sn) Note : si si > si+1, alors Inv(s’) = Inv(s) - 1 c suite classée Inv(c) = 0

répéter Algorithme Bulles1 { i : = 1 ; UMLV ã Formalisation Algorithme Bulles1 répéter { i : = 1 ; tant que i < n et si £ si+1 faire i := i + 1 ; si i < n alors {échanger (si, si+1) ; inversion := vrai ; } sinon inversion := faux ; } tant que inversion = vrai ;

T(algo, d) = temps d'exécution de l'algorithme algo UMLV ã Temps de calcul Complexité en temps T(algo, d) = temps d'exécution de l'algorithme algo appliqué aux données d Éléments de calcul de la complexité en temps T(opération élémentaire) = constant T( si C alors I sinon J ) £ T(C) + max (T(I), T(J)) T( pour i ¬ e1 à e2 faire I i ) = T(e1) + T(e2) +  T(Ii) Temps de calcul de procédures récursives ® solution d’équations de récurrence

Temps de calcul (suite) UMLV ã Temps de calcul (suite) T(algo, d) dépend en général de d. Complexité au pire TMAX (algo, n) = max {T(algo, d) ; d de taille n } Complexité au mieux TMIN (algo, n) = min {T(algo, d) ; d de taille n } Complexité en moyenne TMOY (algo, n) = å p(d).T (algo, d) d de taille n p(d) = probabilité d'avoir la donnée d TMIN (algo, n) £ TMOY (algo, n) £ TMAX (algo, n)

UMLV ã Algorithme Bulles2 { pour j := n-1 à 1 pas -1 faire pour i := 1 à j faire si si > si+1 alors échanger(si, si+1) ; } Temps d ’exécution TMAX (Bulles2, n) j donné ¾® temps £ k.j + k' TMAX (Bulles2, n) £ å (k.j + k') + k'' j £ + k'.(n-1) + k'' Nb comparaisons = Nombre d'échanges £

Comparaisons de complexités UMLV ã Comparaisons de complexités Ordres de grandeur asymptotique "grand O" T(n) = O(f(n)) ssi $ c > 0 $ N > 0 " n > N T(n) £ c.f(n) "grand oméga" T(n) = W (f(n)) ssi $ c > 0 $ N > 0 " n > N T(n) ³ c.f(n) "grand théta" T(n) = Q(f(n)) ssi T(n) = O(f(n)) et T(n) = W(f(n)) Exemple (complexités au pire) T (BULLES2,n) = O(n2) = W(n2) T (BULLES1,n) = O(n3) = W(n3)

T(n) n UMLV ã Ordres de grandeur (exemples) 1, log n, n, n.log n, n2, n3, 2n 2n n 2 n T(n) Log n 1 n

UMLV ã Évolution du temps Évolution de la taille quand la taille est quand le temps est 10 fois plus grande 10 fois plus grand 1 t ¥ log2n t + 3,32 n10 n 10 x t 10 x n n log2n (10 + ) x t (10 - ) x t n2 100 x t 3,16 x n n3 1000 x t 2,15 x n 2n t 10 n + 3,32

UMLV ã Optimalité E (P) = ensemble des algorithmes qui résolvent un problème P au moyen de certaines opérations élémentaires. A Î E (P) est optimal en temps (par rapport à E (P)) ssi " B Î E (P) " donnée d T(B,d) ³ T(A,d) A Î E (P) est asymptotiquement optimal ssi T(A,n) = O(T(B,n)) Exemple ( complexité au pire) BULLES 2 est asymptotiquement optimal parmi les algorithmes de classement qui utilisent les opérations élémentaires : comparaisons, transpositions d’éléments consécutifs. Preuve : Inv((n,n-1, …,1)) = = O (n2)

UMLV ã Remarques 1. Temps de conception ne doit pas être >> temps d ’exécution. 2. La complexité de la description nuit à la mise à jour d ’un algorithme. 3. Les constantes de proportionnalité peuvent être importantes si les données sont réduites. 4. Réduire le temps peut conduire à augmenter l’espace nécessaire 5. Pour les algorithmes numériques, la précision et la stabilité des valeurs sont des critères importants.

UMLV ã P G C D Spécification Calculer pgcd(n,m), plus grand diviseur commun aux entiers ³0, n et m. Algorithme 1 (n³m) pour i : = m à 1 pas -1 faire si i divise n et m alors retour (i) pgcd (21,9) = 3 [21 = 3x7, 9 = 3x3] 7 étapes Algorithme d ’Euclide (300 avant J-C) division entière n = q.m + r, 0 £ r < m propriété : pgcd (n,m) = pgcd (m,r) pgcd(n,m) = si m = o alors n sinon pgcd(m, n mod m) Preuve : si n<m première étape = échange, sinon propriété arithmétique Terminaison : m décroît à chaque étape (strictement) pgcd(9,21) = pgcd(21,9) = pgcd(9,3) = pgcd(3,0) = 3 3 étapes

T(Algo1, (n,m)) = O(min(m,n)) moins de 2.min(n,m) divisions entières UMLV ã Complexité Algorithme 1 T(Algo1, (n,m)) = O(min(m,n)) moins de 2.min(n,m) divisions entières Algorithme d’Euclide Théorème de Lamé (1845) : (n³m) Si l ’algorithme d ’Euclide nécessite k étapes pour calculer pgcd (n,m) on a n³m³Fibk [Fib0 = 0, Fib1 = 1, Fibk = Fibk-1 + Fibk-2, pour k>1] pgcd(21,13) = pgcd(13,8) = pgcd(8,5) = pgcd(5,3) = pgcd(3,2) = pgcd(2,1) = pgcd(1,0) = 1 T(Euclide, (n,m)) = O(log min(n,m))

UMLV ã Version récursive function PGCD(n,m: integer): integer; begin if m = 0 then return (n) else return (PGCD(m, n mod m)); end; Version itérative : var temp; while m > 0 do begin temp := m; m := n mod m; n := temp; return (n);

UMLV ã Version récursive : int PGCD(int n, int m){ /* n>=0, m>=0 */ if (m == o) return (n); else return ( PGCD(m, n % m)); } Version itérative : int temp; while (m > o){ temp = m; m = n % m; n = temp; return (n);

Récursivité terminale UMLV ã Récursivité terminale fonction F(x) ; début si C(x) alors { I; retour (y); } sinon {J; retour (F(z)); } fin. SEUL APPEL RÉCURSIF Élimination (par copier-coller) : fonction F(x) ; tant que non C(x) faire {J; x := z; } {I; retour (y); }

Factorielle UMLV ã fonction FAC(n) ; fonction FAC'(n, m) début début si n=0 alors retour (1) si n=0 alors retour (m) sinon retour (n* FAC(n-1)) ; sinon retour (FAC'(n-1, n*m)) ; fin. fin. RÉCURSIVE RÉCURSIVITÉ TERMINALE fonction FAC(n) ; fonction FAC'(n, m) ; m : = 1 ; tant que n > 0 faire tant que n > 0 faire { m : = n* m ; n : = n-1 ; } { m := n* m ; n := n-1 ; } retour (m) ; retour (m) ; fin. fin. ITÉRATIVE

Tours de Hanoï UMLV ã RÈGLES (opérations élémentaires) 1. déplacer un disque à la fois d'un bâton sur un autre 2. ne jamais mettre un disque sur un plus petit BUT transférer la pile de disques de a vers b EXEMPLE (3 disques)

UMLV ã Spécification Calculer H(n, x, y, z) = suite des coups pour transférer n disques de x vers y avec le bâton intermédiaire z (n ³ 1). Relations x-y si n = 1 H(n, x, y, z) = H(n-1, x, z, y) . x-y . H(n-1, z, y, x) si n > 1 Algorithme (n ³ 1) fonction H(n, x, y, z) ; début si n = 1 alors écrire (x-y) ; sinon { H(n-1, x, z, y); écrire(x-y); H(n-1, z, y, x); } fin.

UMLV ã Exécution H (3, a, b, c) H (2, a, c, b) a - b H (2, c, b, a) H (1, a, b, c) a - c H (1, b, c, a) H (1, c, a, b) c - b H (1, a, b, c) a - b b - c c - a a - b Temps d ’exécution T(H, n disques) = O(2 n) Longueur(H(n, a, b, c)) = 2n -1 H est optimal (parmi les algorithmes qui respectent les règles)

Jeu des chiffres UMLV ã Spécification Données : w1, w2, …, wn s Résultat : une partie I de (1, 2, …, n) telle que å wi = s Æ sinon iÎI Algorithme récursif fonction CHIFFRES (t, i) ; / * prend la valeur vrai ssi il existe une partie de (i, i+1, ..., n) qui donne la somme t ; écrit les nombres correspondants */ début si (t = 0 ) alors retour ( vrai ) sinon si ( t < 0 ) ou ( i > n ) alors retour ( faux ) sinon si CHIFFRES ( t - wi, i+1) alors { écrire (wi ) ; retour ( vrai ) ; } sinon retour (CHIFFRES ( t, i+1) ) ; fin . entiers > 0

UMLV ã Exécution sur w1 = 2, w2 = 9, w3 = 10, w4 = 7 s = 19 t i 19 1 19 1 17 2 8 3 -2 4 faux 8 4 1 5 faux faux 17 3 7 4 0 5 vrai --> w4 = 7 vrai --> w3 = 10 vrai vrai --> w1 = 2 vrai

Complexité en temps = O(2n) UMLV ã Complexité en temps = O(2n) Preuve : on vérifie que si s > å wi l'algorithme parcourt tous les sous-ensembles de (1, 2, …, n). Il y en a 2n.