Algorithmique Avancée

publicité
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
Téléchargement