Présentation Organisation Contenu Organisation Algorithmique Avancée Master Informatique M1-STL Enseignants de cours : Maryse Pelletier, [email protected] Olivier Bodini, [email protected] Supports de cours : Michèle Soria Année 2007-2008 Le site : http ://www-master.ufr-info-p6.jussieu.fr/2007 L’équipe pédagogique : Cours : Maryse Pelletier et Olivier Bodini TD-TME : G1 : Maryse Pelletier ; G2 : Olivier Bodini ; G3 : Guénaël Renault et Safia Kedad ; G4 : Phliippe Trébuchet Les séances : 10 semaines (TDs décalés d’une semaine vs cours) des séances de TME partiel semaine du 29 octobre fin des enseignements le 7 décembre examen session 1 semaine du 17 décembre examen session 2 semaine du 21 janvier Algorithmique Avancée Algorithmique Avancée Présentation Organisation Contenu Organisation Présentation Organisation Contenu Plan du cours Structures de données avancées La note : 0.4 CC + 0.6 Exam CC = 0.25 TME1 + 0.25 TME2 + 0.5 Partiel L’évaluation des TME : un rapport écrit une soutenance orale (semaine du 5 novembre pour TME1) Files Binomiales et Fibonacci Arbres-B et Hachage Algorithmique géométrique Enveloppe convexe triangulations de Delaunay Algorithmes sur les graphes Composantes fortement connexes Chemins minimaux et flots maximaux NP-complétude et réduction entre problèmes Algorithmique Avancée Algorithmique Avancée Présentation Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Organisation Contenu Plan du Cours 1 Bibliographie T. Cormen, C. Leiserson, R. Rivest, C. Stein Introduction à l’algorithmique, CHAPITRE 1 : Union de Files de Priorités Files Binomiales et Files de Fibonacci (TD) C. Froidevaux, M-C. Gaudel, M. Soria Types de données et algorithmes Opérations sur les files de priorités D. Beauquier, J. Berstel, P. Chrétienne Eléments d’algorithmique Files binomiales : définition et propriétés Arbres binomiaux : définition et propriétés Union de 2 files binomiales : algorithme, complexité logarithmique Autres opérations sur les files binomiales (complexité logarithmique) Algorithmique Avancée Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition Applications Opérations sur les files de priorités Définition Applications Représentations et Efficacité Ensemble d’éléments Nombre de comparaisons dans le pire des cas Chaque élément a une clé Ordre total sur les clés Opérations Ajouter un élément Supprimer l’élément de clé minimale Union de 2 files de priorités Construction Modification d’une clé Algorithmique Avancée Supp Min (n) Ajout (n) Construction (n) Union (n, m) Liste triée O(1) O(n) O(n2 ) O(n + m) Tas (Heap) O(log n) O(log n) O(n) O(n + m) File Binomiale O(log n) O(log n) O(n) O(log(n + m)) Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition Applications Arbre binomial- Définition Applications des Files de priorité Un arbre binomial pour chaque entier positif. Tri heapsort Sur les graphes plus court chemin à partir d’une source (Dijkstra) plus court chemin entre tous les couples de sommets (Johnson) arbre couvrant minimal (Prim) Définition par récurrence B0 est l’arbre réduit à un seul nœud, Étant donnés 2 arbres binomiaux Bk , on obtient Bk +1 en faisant de l’un des Bk le premier fils à la racine de l’autre Bk . Interclassement de listes triées Code de Huffmann (compression) Exemples : dessiner B0 , B1 , B2 , B3 , B4 Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition – Propriétes Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition – Propriétes Arbre binomial - Propriétés Définition – Propriétes Arbre binomial - Preuves Propriétés de Bk , (k ≥ 0) 1 n0 = 1 et nk = 2nk −1 Bk a 2k 2 Bk a 2k 3 Bk a hauteur k 4 4 Le degré à la racine est k 5 5 Le nombre de nœuds à profondeur i est nk ,0 = 1, nk ,l = 0 pour l > k , et nk ,i = nk −1,i + nk −1,i−1 , pour i = 1, . . . , k 6 La forêt à la racine de Bk est < Bk −1 , Bk −2 , . . . , B1 , B0 > 6 propriété de décomposition, par récurrence sur k 1 nœuds 2 − 1 arêtes 3 !k " i Algorithmique Avancée arbre : x nœuds ⇒ x − 1 arêtes h0 = 0 et hk = 1 + hk −1 d0 = 0 et dk = 1 + dk −1 Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition Propriétes Principe de l’union File Binomiale Définition Propriétes Principe de l’union Représentation d’une file de priorité Tournoi Binomial Un tournoi binomial est un arbre binomial étiqueté croissant (croissance sur tout chemin de la racine aux feuilles) File Binomiale Une file binomiale est une suite de tournois binomiaux de tailles strictement décroissantes Représentation d’une file de priorité P de n éléments si n = 2k , P tournoi binomial sinon P file binomiale, suite de tournois correspondants aux bits égaux à 1 dans la représentation binaire de n. Représentation binaire de n n= Exemples : $ bi 2i , avec i=0 FB12 =< TB3 , TB2 >, FB7 =< TB2 , TB1 , TB0 > ν(n) = Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations "log2 n# i bi : # bits à 1 dans représentation binaire de n. Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition Propriétes Principe de l’union File binomiale - Propriétes # bi ∈ {0, 1}, b"log2 n# = 1 Définition Propriétes Principe de l’union Union de files binomiales Propriétés de FBn 1 FBn a n nœuds 2 FBn a n − ν(n) arêtes 3 4 5 1 2 3 1 Le plus grand arbre de la file est B"log2 n# (hauteur $log2 n% et nombre de nœuds 2"log2 n# ) 2 Le nombre d’arbres de la file est ν(n) (avec ν(n) ≤ 1 + $log2 n%) Le minimum de la file est à la racine de l’un des arbres # n = bi 2i , # n − ν(n) = bi (2i − 1), # ν(n) = i bi Algorithmique Avancée 3 Union de 2 tournois de tailles différentes : TBk 1 ∪ TBk 2 −→ F2k 1 +2k 2 =< TBk 1 , TBk 2 > Exemple : TB1 ∪ TB2 Union de 2 tournois de même taille : TBk ∪ TBk ! −→ TBk +1 , avec rac(TBk +1 ) = min(rac(TBk ), (rac(TBk ! ))) Exemple : TB2 ∪ TB2$ Union de 2 files binomiales ≡≡ addition binaire Exemple : FB5 ∪ FB7 Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Définition Propriétes Principe de l’union Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Primitives Algorithme Complexité Primitives sur les tournois binomiaux Union de deux files 1 interclasser les 2 files en partant des tournois de poids minimum EstVide : TournoiB → booleen renvoie vrai ssi le tournoi est vide 2 lorsque 2 tournois de taille k on engendre un tournoi de taille k + 1 Degre : TournoiB → entier renvoie le dégré du tournoi 3 à chaque étape au plus 3 tournois de même taille à fusionner (1 dans chacune des files + 1 retenue de la fusion à l’étape précédente) UTid : TournoiB * TournoiB → TournoiB renvoie l’union de 2 tournois de même taille Tk ∗ Tk ,→ Tk +1 4 lorsque 3 tournois de taille k on en retient 2 pour engendrer un tournoi de taille k + 1, et l’on garde le troisième comme tournoi de taille k . Decapite : TournoiB → FileB renvoie la file binomiale obtenue en enlèvant la racine du tournoi Tk ,→< Tk −1 , Tk −2 , ..., T1 , T0 > Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Primitives Algorithme Complexité Primitives sur les files binomiales EstVide : FileB → booleen renvoie vrai ssi la file est vide Min : FileB → TournoiB renvoie le tournoi de poids minimal de la file Reste : FileB → FileB renvoie la file privée de son tournoi de poids minimal AjoutMin : TournoiB * FileB → FileB hypothèse : le tournoi est de poids inférieur au Min de la file renvoie la file obtenue en ajoutant le tournoi comme tournoi de poids minimal de la file initiale Algorithmique Avancée Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Primitives Algorithme Complexité Algorithme d’Union UnionFile : FileB * FileB −→ FileB renvoie la file binomiale union des deux files F1 et F2 Fonction UnionFile(F1, F2) Retourne UFret(F1, F2, Ø) FinFonction UnionFile UFret : FileB * FileB * TournoiB −→ FileB renvoie la file binomiale union de deux files et d’un tournoi Fonction UFret(F1, F2, T) Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Primitives Algorithme Complexité Fonction UFret(F1, F2, T) Si EstVide(T) ; pas de tournoi en retenue Si EstVide(F1) Retourne F2 Si EstVide(F2) Retourne F1 Soient T1=Min(F1) et T2=Min(F2) ;tournois poids min Si Degre(T1)<Degre(T2) Retourne AjoutMin(T1,UnionFile(reste(F1),F2)) Si Degre(T2)<Degre(T1) Retourne AjoutMin(T2,UnionFile(F1,reste(F2))) Si Degre(T2)=Degre(T1) Retourne UFret(reste(F1),reste(F2),UTid(T1,T2)) −→ Sinon ; un tournoi en retenue Si EstVide(F1) Retourne UnionFile(File(T), F2) Si EstVide(F2) Retourne UnionFile(File(T), F1) Soient T1=Min(F1) Et T2=Min(F2) ; tournois de poids min Si Degre(T)<Degre(T1) Et Degre(T)<Degre(T2) Retourne AjoutMin (T,UnionFile(F1,F2))) Si Degre(T)=Degre(T1)=Degre(T2) Retourne AjoutMin(T,UFret(reste(F1), reste(F2), UTid(T1,T2))) Si Degre(T)=Degre(T1) ; et < Degre(T2) Retourne UFret(reste(F1),F2,UTid(T1,T)) Si Degre(T)=Degre(T2) ; et < Degre(T1) Retourne UFret(F1,reste(F2),UTid(T2,T)) FinFonction UFret Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Primitives Algorithme Complexité Analyse de complexité Primitives Algorithme Complexité Primitives Algorithme Complexité Calcul Union de 2 files binomiales FBn et FBm en O(log2 (n + m)) Nombre de comparaisons pour faire l’union d’une file binomiale de n éléments et d’une file binomiale de m éléments. Critère de complexité : nombre de comparaisons entre clés Complexité dans le pire des cas idée 1 union de 2 tournois de même taille −→ 1 comparaison entre clés et ajoute une arête dans la file résultat. Conséquence : nombre de comparaisons pour faire l’union de 2 files égale nombre d’arêtes de la file union diminué du nombre d’arêtes des files de départ. #cp(FBn ∪ FBm ) = n + m − ν(n + m) − (n − ν(n)) − (m − ν(m)) = ν(n) + ν(m) − ν(n + m) < $log2 n% + 1 + $log2 m% + 1 = O(log2 (n + m)) Exemples : FB21 ∪ FB11 FB21 ∪ FB10 Algorithmique Avancée Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Ajout d’un élément x à une file FBn Algorithme : Créer une file binomiale FB1 contenant uniquement x. Puis faire l’union de FB1 et FBn Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Construction Complexité de la construction d’une file binomiale par adjonctions successives de ses n éléments. #cp(FBn ) = ν(n − 1) + 1 − ν(n) + ν(n − 2) + 1 − ν(n − 1) Complexité : ν(n) + 1 − ν(n + 1) −→ entre 0 et ν(n) + ... + ν(1) + 1 − ν(2) Exemples : = n − ν(n) FB1 ∪ FB8 Donc le nombre moyen de comparaisons pour 1 ajout est 1 − ν(n)/n < 1. Coût amorti d’une opération dans une série d’opérations : couttotal/nbreop FB1 ∪ FB7 Algorithmique Avancée Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Suppression du minimum de FBn Recherche du minimum Le minimum de la file est à la racine d’un des tournois la composant −→ ν(n) − 1 comparaisons = O(log n) Suppression du minimum Déterminer l’arbre Bk de racine minimale Supprimer la racine de Bk −→ File < Bk −1 , . . . , B0 > Faire l’union des files FBn − Bk et < Bk −1 , . . . , B0 > Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Diminuer une clé N.B. Accès direct au nœud dont il faut diminuer la clé modifier la clé échanger le nœud avec son père jusqu’à vérifier l’hypothèse de croissance (≡ tas) Le nombre maximum de comparaisons est la hauteur de l’arbre ( O(log n)) Complexité : O(log n) Algorithmique Avancée Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Coût amorti Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Coût amorti Files Binomiales : ajout d’un élément et recherche du minimum en O(1) suppression du minimum et union de 2 files en O(log n) Définition Coût amorti d’une opération dans une suite d’opérations = coût moyen d’une opération dans le pire cas. coût amorti = coût total / nombre d’opérations Files de Fibonacci : ajout d’un élément et union de 2 files en O(1) suppression du minimum en O(log n) Remarque : on ne peut pas espérer avoir O(1) pour ajout et suppression du minimum, car alors on serait en contradiction avec les résultats de borne inférieure en O(n log n) pour le tri par comparaisons. Méthodes méthode par agrégat méthode du potentiel autres... Algorithmique Avancée Algorithmique Avancée Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Coût amorti : méthode par agrégat Files de Priorités Arbres binômiaux Files binomiales Algorithme d’union Autres opérations Ajout Construction Suppression min Diminution Coût amorti Coût amorti : méthode du potentiel Principe : Principe : majorer le coût total d’une suite de n opérations et diviser par n. Exemple : opérations sur les piles empiler(S,x) dépiler(S) multidépiler(S,k) Coût amorti de chaque opération en O(1). structure de données Di , fonction potentiel Φ vérifiant Φ(Di ) ≥ Φ(D0 ) coût amorti de la i-ème opération : ĉi = ci + Φ(Di ) − Φ(Di−1 ) (ci coût réel de la i-ème opération) n $ ĉi /n coût amorti = i=1 Exemple : opérations sur les piles Φ(Di ) = nombre d’objets de Di coût amorti de chaque opération en O(1) Algorithmique Avancée Algorithmique Avancée