Algorithmes et structures de données avancées Cours 1+2+3

Slides:



Advertisements
Présentations similaires
Algorithmes et structures de données (avancées) Cours 1+2
Advertisements

Structures de données avancées : MTH ( Multidimensional trie hashing )
Chap. 4 Recherche en Table
Parcours.
Algorithmes et structures de données avancées Cours 7
Patrick Reuter maître de conférences
Algorithmes et structures de données avancées Cours 4
Algorithmes et structures de données 9ème cours Patrick Reuter maître de conférences
Algorithmes et structures de données avancées 6ème cours Patrick Reuter
Algorithmes et structures de données avancées 5ème cours Patrick Reuter
Algorithmes et structures de données avancées Cours 6 Patrick Reuter
Algorithmes et structures de données 7ème cours
Algorithmes et structures de données avancés
Algorithmes et structures de données 3ème cours Patrick Reuter
Algorithmes et structures de données
Patrick Reuter maître de conférences
Simplification Out-of-Core des modèles polygonales complexes
Algorithmes et structures de données Cours 8
Algorithmes et structures de données Cours 3
Algorithmes et structures de données Cours 7
Algorithmes et structures de données Cours 1 Patrick Reuter
Algorithmes et structures de données 4ème cours
Algorithmes et structures de données 5ème cours
Algorithmes et structures de données Cours 2
Structures de données et complexité
Structures de données et complexité LIFO – FILO – FIFO – etc…

Sensibilisation à l’Algorithmique
Au programme du jour …. Un peu plus de structures de données
Introduction à l’Algorithmique
Chapitre IV. Structures linéaires (piles, files, listes chaînées)
Références Bibliographiques
Structures de données linéaires
IPA – Catherine Faron Zucke et Anne Marie Deryr. suite ordonnée d'éléments de taille variable ArrayList liste; liste = new ArrayList (); Ne peuvent contenir.
ALGORITHMIQUE Plan du cours Généralités -définition -importance
TD3 2 IMACS Romaric GUILLERM Algo-Prog en Ada.
II. Chaînage, SDD séquentielles
Les algorithmes: complexité et notation asymptotique
Structures de données IFT-2000
Structures de données IFT-2000
Structures de données IFT-2000 Abder Alikacem Standard Template library Édition Septembre 2009 Département dinformatique et de génie logiciel.
Structures de données IFT-10541
Structures de données IFT-10541
Présentation Structures de Données et TDA


Table de hachage Introduction Notion de clé Fonction de hachage
IFT Structures de données Abder Alikacem Département dinformatique et de génie logiciel.
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.
III. Récursivité Principe et exemples
Structures de données IFT-2000

Introduction à l’algorithmique et aux structures de données
ALGORITHME DE TRI Le tri par insertion.
LES PILES ET FILES.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
ETNA – 1ème année Guillaume Belmas –
Structures de données avancées : LH (Hachage linéaire) D. E ZEGOUR Institut National d ’Informatique.
La Récursivité.
Tutorat en bio-informatique Le 28 novembre Au programme… Algorithmes de tri dans un tableau (suite) Récursivité MAT1400.
Programmation Orienté Objet en C++
La récursivité Mireille Goud HEG Vd AlgSD - Résurisivité.
Structures de données avancées : Introduction D. E ZEGOUR Institut National d ’Informatique.
Structures de données avancées : MTH ( Multidimensional trie hashing ) D. E ZEGOUR Institut National d ’Informatique.
Chaînage et LSC : motivation et principe Manipuler la LSC : exemples Variantes : LDC, liste circulaire, … Etude de cas : réalisation d’un buffer clavier.
SDD Helen KASSEL (amphi), Helen KASSEL, Itheri YAHIAOUI, Albin MORELLE(TD) Albin MORELLE, Itheri YAHIAOUI(TP) 1.
ASM 13 – Conception CONSTRUCTION D’UN BÂTIMENT D’HOSPITALISATION PSYCHIATRIQUE DE 40 LITS DONT 12 EN SERVICE FERME à SOISY SUR SEINE (91) PRESENTATION.
Présentation Structure données abstraite (TDA) Rappel : File
Transcription de la présentation:

Algorithmes et structures de données avancées Cours 1+2+3 Patrick Reuter maître de conférences http://www.labri.fr/~preuter

Déroulement CM mardi 8h30 – 9h30 TD/TP en alternance mardi de 10h00–11h30

Motivation Niklaus Wirth, ETH Zuerich, 1976 « Algorithms + Data Structures = Programs »

Motivation Structure de donnée: p.ex. fantôme couleur position direction aggressif ou pas ? Algorithmes: p.ex. mettre a jour le meilleur score p. ex. / ex:

Motivation Structure de donnée: - tableau a 2 dimension Algorithmes: - surtout I.A. a / à

Motivation Structure de donnée : Pile LIFO (Last In First Out)

Motivation Structure de donnée : File FIFO (First In First Out) Aussi: File à priorité

Motivation 8.168.684.336 pages Comment ça marche ? SAM m-1 … h … ASM 1 JOE C A

Table de hachage Fonction de hachage Adressage directe h(c) injective Adressage indirecte h(c) pas forcément injective Résolution des collisions par adressage ouvert Résolution des collisions par chaînage externe sondage linéaire hi(c) = (h(c) + i) mod m Sondage quadratique hi(c) = (h(c) + a*i + b*i2) mod m

ASDA Nouvelles structures de données Preuves Récursivité/Récurrence Arbres Graphes Preuves Récursivité/Récurrence Théorie de la complexité …

Motivation Structure de donnée : Arbre (pour l’élimination des parties cachées)

Motivation Structure de donnée : Graphe (pour plannifier des trajets) plannifier / planifier

Rappel sur la récurrence

Factoriel 0! = 1 1! = 1 2! = 1*2 3! = 1*2*3 4! = 1*2*3*4 5! = 1*2*3*4*5 6! = 1*2*3*4*5*6 n! = 1*2*3*4*5*6* .. * (n-1) * n

Factoriel Deux manières de faire : Itératif Récursif

Itératif fonction factorielBoucle(n : integer): integer; var i,res : integer; début res := 1; i := 1; tant que i<=n faire res := res * i; i := i + 1; fin tant que result := res; fin

Rappel Fonction définie par récurrence Une fonction définie par récurrence se caractérise par deux propriétes : • La fonction est définie par elle-meme, c-à-d. la fonction appelle elle-meme dans le corps de la fonction • L’appel (ou les appels) de la fonction par elle-meme est isolé par une condition, la condition d’arret, pour éviter les appels infinis. Example implementation using the dictionary ADT and comparator. Only the remove method is shown, to illustrate use of the comparator class.

Sondage function factoriel(n : integer) : integer; var resultat : integer; begin if (n = 0) OR (n = 1) then resultat := 1 else resultat := n * factoriel(n-1); result := resultat; end;

Sondage function factoriel(n : integer) : integer; var resultat : integer; begin if (n = 0) OR (n = 1) then resultat := 1 else resultat := n * factoriel(n-1); result := resultat; end;

Sondage function factoriel(n : integer) : integer; var resultat : integer; begin if (n = 0) OR (n = 1) then resultat := 1 else resultat := n * factoriel(n-1); result := resultat; end; Condition d’arrêt : la fonction n’est plus appelé par elle-même

Sondage function factoriel(n : integer) : integer; var resultat : integer; begin if (n = 0) OR (n = 1) then resultat := 1 else resultat := n * factoriel(n-1); result := resultat; end; Condition d’arrêt : la fonction n’est plus appelé par elle-même Appel de la fonction par elle-même

Sondage function factoriel(n : integer) : integer; var resultat : integer; begin WriteLn(‘debut de fonction : n = ‘,n); if (n = 0) OR (n = 1) then resultat := 1 else resultat := n * factoriel(n-1); WriteLn(‘fin de fonction : resultat = ‘,resultat); result := resultat; end

Appel de fonction :  factoriel(5); factoriel := 5 * factoriel(5 - 1); factoriel := 5 * (4 * factoriel(4 - 1)); factoriel := 5 * (4 * (3 * factoriel(3 - 1))); factoriel := 5 * (4 * (3 * (2 * factoriel(2 - 1)))); factoriel := 5 * (4 * (3 * (2 * (1 ))));

Rappel : Listes type p_t_liste_simple = ^t_liste_simple; t_liste_simple = record cle : integer; nom : string; annee : integer; ... suivant : p_t_liste_simple; end; premier cle cle cle cle nom nom … nom nom annee annee annee annee suivant suivant suivant suivant

Afficher tous les éléments Itératif Récursif

Itératif … { Afficher les éléments de la liste } temp := premier; while (NOT (temp = NIL)) do begin WriteLn(temp^.annee); temp := temp^.suivant; fin; temp premier cle cle cle cle nom nom … nom nom annee annee annee annee suivant suivant suivant suivant

Itératif … { Afficher les éléments de la liste } temp := premier; while (NOT (temp = NIL)) do begin WriteLn(temp^.annee); temp := temp^.suivant; fin; temp premier cle cle cle cle nom nom … nom nom annee annee annee annee suivant suivant suivant suivant

Afficher tous les éléments : Récursif procedure afficherListe(temp : p_t_liste_simple); temp premier cle cle cle cle nom nom … nom nom annee annee annee annee suivant suivant suivant suivant

Afficher tous les éléments procedure afficherListe(temp : p_t_liste_simple); begin if (temp <> NIL) then WriteLn('Element annee : ', temp^.annee); afficherListe(temp^.suivant); end;

Sondage … Recherche linéare dans un tableau non-trié Recherche linéare dans une liste non-trié Recherche dans un tableau trié O(log n) (par dichotomie) Recherche dans une liste triée Table de Hachage HT Suivant la fonction de hachage h(t), au mieux O(1), au pire O(n)

Complexité asymptotique Chercher Ajouter Enlever Tableau non trié: O(n) O(n) O(n) Liste non triée: O(n) O(1) O(1) Tableau trié: O(lg n) O(n) O(n) Liste trié : O(n) O(1) O(1) Arbre binaire: Example implementation using the dictionary ADT and comparator. Only the remove method is shown, to illustrate use of the comparator class.

Arbres binaires Parcours en profondeur : 1 2 4 5 7 8 3 6 9 Parcours en largeur : 1 2 3 4 5 6 7 8 9

Arbres binaires structure de données qui peut se représenter sous la forme d'une hiérarchie chaque élément est appelé nœud le nœud initial est appelé racine. chaque nœud possède au plus deux éléments fils au niveau inférieur, habituellement appelés fils gauche et fils droit. l'élément d’un nœud fils au niveau supérieur est appelé père. au niveau le plus élevé, il y a donc un nœud racine. un nœud n'ayant aucun fils est appelé feuille. les nœuds ayant au moins un fils sont appelés nœuds internes. le nombre de niveaux total, autrement dit la distance entre la feuille la plus éloignée et la racine est appelé profondeur ou hauteur de l'arbre. Autrement dit : La hauteur d'un arbre est la longueur du plus grand chemin de la racine à une feuille.

Arbres binaires HAUTEUR : 3 Un arbre binaire est un graphe connexe acyclique, tel que le degré de chaque nœud soit au plus 3, et celui de la racine au plus 2.

Arbres binaires Arbre binaire entier est un arbre dont tous les nœuds possèdent zéro ou deux fils. Arbre binaire parfait (complet) est un arbre binaire entier dans lequel toutes les feuilles sont à la même distance de la racine. Un arbre binaire complet de hauteur h contient donc 2h+1-1 nœuds, et son nombre de feuilles est : Fh = 2h. Arbre binaire dégénéré est un arbre binaire dans lequel tous ses noeuds n'ont qu'un seul descendant.

Arbres binaires Stockage dans un tableau 1 + 2 3 2 * 4 5 1 3 6 0 0 + No contenu gauche droite 1 + 2 3 2 * 4 5 1 3 6 0 0 + 4 2 0 0 3 5 3 0 0 2 * 6 4 5 2 3

Arbres binaires type p_t_noeud = ^t_nœud; t_noeud = RECORD cle : integer; contenu : char; gauche : p_t_noeud; droite : p_t_noeud; END; racine gauche contenu + droite racine^ + 3 gauche contenu + droite gauche contenu + droite * 3 6 3 gauche + contenu droite gauche + contenu droite 2 3 3 3

Méthode d'itération des arbres binaires Préfixe, Postfixe, Infixe

Arbres binaires Préfixe, + * 6 2 3

Arbres binaires Préfixe, + (* (2),( 3)),( 6) (avec parcours en profondeur) Postfixe, + * 6 2 3

Arbres binaires Préfixe, + (* (2),( 3)),( 6) Postfixe, ((2), (3) *),( 6) + Infixe : + * 6 2 3

Arbres binaires Préfixe, + (* (2),( 3)),( 6) Postfixe, ((2), (3) *),( 6) + Infixe : ((2)*(3)) + (6) + * 6 2 3

Arbres binaires Infixe procedure parcourir( nœud : p_t_noeud ) début si NOT(nœud^.gauche = NIL)alors parcourir(nœud^.gauche) WriteLn(nœud.contenu); si NOT(nœud^.droite = NIL)alors parcourir(nœud^.droite) fin + * 6 2 3

Arbre binaire de recherche

Arbre binaire de recherche un arbre binaire dans lequel chaque nœud possède une clé, telle que chaque nœud du sous-arbre gauche ait une clé inférieure ou égale à celle du nœud considéré, et que chaque nœud du sous-arbre droit possède une clé supérieure ou égale à celle-ci Les nœuds que l'on ajoute deviennent des feuilles de l'arbre. on pourra interdire ou non des clés de valeur égale.

Complexité asymptotique Arbre balancé AVL Arbre non balancé Trouver: O(lg n) O(n) Insérer: O(lg n) O(n) Enlever: O(lg n) O(n) All cost depth of the node in question. Worst case: (n). Average case: (log n).

Arbre binaire balancé Arbre balancé AVL nommé selon ses auteurs [Andelson-Velskii et Landis, 1962] Pour chaque nœud, la hauteur du sous-arbre gauche (SAG) et du sous-arbe droite (SAD) diffèrent au plus de un

Enigme Peut-on commencer une promenade sur une île ou une rive, terminer la promenade sur n'importe quelle autre (ou la même) île ou rive en passant exactement une fois sur chacun des ponts?