R.K.Ahuja & James B.Orlin (1988)

Slides:



Advertisements
Présentations similaires
ORTHOGRAM PM 3 ou 4 Ecrire: « a » ou « à » Référentiel page 6
Advertisements

LES NOMBRES PREMIERS ET COMPOSÉS
La recherche de chemin optimal
Théorie des graphes.
VOL LENT A DIFFERENTES CONFIGURATIONS -
A l’issue des conseils de classe de 3ème,
Tris.
Licence pro MPCQ : Cours
Qui a le nombre qui vient après 8 ?
Fonctions & procédures
LIRMM 1 Journée Deuxièmes années Département Microélectronique LIRMM.
Calculs de complexité d'algorithmes
Les Prepositions.
Exercices Algorithmiques
A.Faÿ 1 Recherche opérationnelle Résumé de cours.
Plus rapide chemin bicritère : un problème d’aménagement du territoire
1 Théorie des Graphes Cycle Eulérien. 2 Rappels de définitions On dit qu'une chaîne est un chemin passant par toutes les arêtes du graphe. On dit qu'un.
Améliorer les performances du chiffrage à flot SYND
Cours 8 Arbres équilibrés
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é.
Formation E – Learning: La Réanimation Cardio-Pulmonaire de base
Les structures de données arborescentes
II. Chaînage, SDD séquentielles
1.2 COMPOSANTES DES VECTEURS
Optimisation et Complexité
Détection de co-évolution de gènes Master 2 : Informatique à Finalité Professionnelle et Recherche Unifiée (IFPRU) Parcours Ingénierie de lIntelligence.
Gestion de Fichiers Arbres B.
CHAPITRE 4 LE POTENTIEL ÉLECTRIQUE.
Systèmes d’équations du premier degré à deux variables
La Saint-Valentin Par Matt Maxwell.
Algorithme de Bellman-Ford
Arbres Rouge noir Démo : INF3105 Structures de données et algorithmes
Démo 10 - #2 En détails… Au début, tous les sommets sauf la source (1) sont dans T: S = {1}; T ={2,3,4,5,6}
Représentation des systèmes dynamiques dans l’espace d’état
Systèmes mécaniques et électriques
Représentation des systèmes dynamiques dans l’espace d’état
Génération d’un segment de droite
1.1 LES VECTEURS GÉOMÉTRIQUES
1 Licence dinformatique Algorithmique des graphes Problèmes dordonnancement. Utilisation de ce document strictement réservée aux étudiants de l IFSIC dans.
Optimisation dans les réseaux
Notre calendrier français MARS 2014
Recherche Opérationnelle
LE CHOIX DU CONSOMMATEUR ET LA DEMANDE… (suite)
3ème partie: les filtres
Les Algorithmes de Tri Introduction Tri par Sélection
C'est pour bientôt.....
Veuillez trouver ci-joint
Ordonnancement de tâches
Résoudre une équation du 1er degré à une inconnue
2.2 PRODUIT SCALAIRE ET CALCUL D’ANGLES
Atelier de formation : MAT optimisation II (les graphes).
Équipe 2626 Octobre 2011 Jean Lavoie ing. M.Sc.A.
Pour le chemin le plus court pour tous les couples
Programmation linéaire en nombres entiers : les méthodes de troncature
Voici 36 bonnes raisons de preferer la biere à une femme blonde...
Coupes efficaces pour la relaxation lagrangienne
Traitement de différentes préoccupations Le 28 octobre et 4 novembre 2010.
ECOLE DES HAUTES ETUDES COMMERCIALES MARKETING FONDAMENTAL
1 Notations Asymptotiques Et Complexité Notations asymptotiques : 0 et  Complexité des algorithmes Exemples de calcul de complexité.
1. La bière ne parle pas 2.La bière est toujours prête et humide.
CALENDRIER-PLAYBOY 2020.
LES PILES ET FILES.
Médiathèque de Chauffailles du 3 au 28 mars 2009.
Programmation linéaire en nombres entiers
LE FLOT MAXIMAL et LA COUPE MINIMALE
Ceci est un graphe valué Des arcs : 1-2, 1-4, 7-10,…..
Techniques d’Optimisation Chapitre 2: Problème de flôt Dr TARI Abdelkamel Mars 2014.
Transcription de la présentation:

R.K.Ahuja & James B.Orlin (1988) Un algorithme simple et rapide pour le problème de Flot Maximum R.K.Ahuja & James B.Orlin (1988)

Jadis, naguère, autrefois, ... Fulkerson & Dantzig (1955  1956) Multiples approches Augmentations de flots [Ford/Fulkerson 1956] Préflots et réseau par couches [Karzanov 1974] Arbres dynamiques (pires cas) [Sleator/Tarjan 1983] Préflots (couches) et pousse flots plus près du puits en terme de distance étiquetée [Goldberg/Tarjan 1985] Meilleurs résultats (pour graphes épars) grâce à une excellente utilisation des arbres dynamiques IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Mal de tête ... IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Faudrait pas zoublier! s, t, n, m, U, etc. On assume quelques bases s.p.g., dont: Pas de chemin de capacité infinie (teste en O(m)) Si un uij infini, on peut poser =  autres uij U, un entier et O(nk) Basé sur Goldberg & Tarjan [1985] Approche par phases (scaling) [Edmonds/Karp] ... utilisé pour flot à coût minimum ( ) Arc admissible si d(i)=d(j)+1 Où la définition de la fonction de distance d est: d(t)=0 et d(i)d(j)+1 (i,j)A où rij >0 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon L'eau à la bouche... O(nm+n2logU) Facile à implanter Faible coût constant (overheads) S'implante bien en parallèle IFT6542 - A07 - Présentation - Nicola Grenon

Poussée de préflots (Preflow-Push Algorithm) Premier algorithme Poussée de préflots (Preflow-Push Algorithm)

IFT6542 - A07 - Présentation - Nicola Grenon C’est quoi l’idée? L’algorithme va agir ainsi: À chaque itération, sauf la première et la dernière, il y aura toujours au moins un noeud actif (un is,t avec un excès positif), on va donc conserver un préflot à chaque itération. On va pousser les excès présents à chaque noeud «vers» le puits. Si on n'arrive pas à «rapprocher» du flot d'un noeud en excès, on va reétiqueter celui-ci comme étant un pas plus loin. IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Pseudotruc procedure poussée_de_préflot (entrée: G=(V,A); sortie: x) début {initialisation} pour tout iV, s,t d(i):=1 et e(i):=0 {possible un peu mieux} d(s):=n d(t):=0 pour tout (s,j)V+(s) xsj:=usj {ajuster e(j)} {corps} tant que  e(i)>0 où is,t {noeud actif} choisir un noeud actif si il y a un arc admissible dans V+(i) choisir un arc (i,j) admissible pousser =min{e(i),rij} sur (i,j) {ajuster xij, e(i), e(j)} fin sinon d(i):=min{d(j)+1|(i,j)V+(i) et rij>0} {rij du graphe résiduel} IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=1 e=0 1 [7] S T [3] d=n=4 d=0 [4] [5] 2 d=1 e=0 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=1 e=7 1 7 [7] S T [3] d=4 d=0 [4] [5] 2 4 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=1 e=7 7 1 3 S T d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=1 e=7 7 1 3 S T d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=1 e=7 7 1 3 S T d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=2 e=7 7 1 3 S T d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=2 e=7 7 1 3 S T d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=2 e=7 7 1 3 S T d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=2 e=7 7 1 3 S T 3 d=4 d=0 2 4 5 d=1 e=4 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=2 e=4 7 1 S T d=4 d=0 3 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=3 7 1 S T d=4 d=0 3 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=3 7 1 3 S T d=4 d=0 3 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 5 2 4 5 d=1 e=7 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 5 2 4 d=1 e=2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 5 2 4 d=1 e=2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 5 2 4 d=5 e=2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 5 2 4 d=5 e=2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 2 3 5 2 4 d=5 e=2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=5 e=0 3 1 4 S T d=4 d=0 3 2 5 2 2 d=5 e=0 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Tits dessins ... Actif: e(i)>0 Admissible: d(i)=d(j)+1 reétiquetage: d(i):=min{d(j)+1 de V+(i)|rij>0} Poussée: :=min{e(i),rij} flot [capacité] d=distance e=excès d=1 e=0 1 3 [7] S T [3] 3 d=4 d=0 [4] [5] 2 2 5 d=1 e=0 IFT6542 - A07 - Présentation - Nicola Grenon

Propriétés et compagnie Cet algorithme générique maintient des étiquettes de distance valides et toujours croissantes. L'initialisation créé des étiquettes valides. Pendant la poussée, un arc de G(x) peut disparaître (pas d'impact) ou apparaître, et alors, puisqu'il était admissible, la condition reste remplie. Et lors du reétiquetage, on augmente d(i) au min des d(j)+1... En tout temps de l’algorithme, il y a un chemin depuis chaque noeud en excès vers s (dans G(x)). En décomposant les préflots dans G en trois types: les chemins de s vers t, ceux de s vers un i en excès et ceux formant des cycles. Seuls ceux de s vers un i en excès peuvent expliquer cet excès. Ils sont donc présents dans le graphe résiduel. Pour tout iV, d(i)<2n. Juste avant le dernier reétiquetage de i, il avait un excès, donc G(x) contenait un chemin de i vers s (long d’au plus n-1). Comme d(s)=n et d(i)d(j)+1 si rij >0, alors d(i)d(s)+(n-1)<2n. IFT6542 - A07 - Présentation - Nicola Grenon

Propriétés... second épisode. Il y a moins de 2n2 reétiquetages Chaque reétiquetage augmente la distance d'au moins 1... et on vient de voir qu'on ne pouvait reétiqueter plus de 2n fois. Il n'y a pas plus que nm poussées saturantes. Supposons que (i,j) devient saturé. Alors pour pouvoir renvoyer du flot sur (i,j), il faut d'abord que du flot soit poussé sur (j,i). À ce moment, d'(j)=d'(i)+1d(i)+1=d(j)+2*. Donc, au maximum il y aura n saturations (2n/2)… pour m arcs. *Ça vous rappelle quelque chose? Il n'y a pas plus de 2n2m poussées non-saturantes. L'algorithme s'arrête sur un flot maximum. Comme plus aucun noeud (s,t) n'a d'excès, le flot est réalisable. Comme d(s)=n, d(t)=0 et d(i)d(j)+1 si rij>0, alors il n’y a plus de chemin de s vers t. IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon C’est long ... On remarque que le nombre de poussées saturantes est donc limité comparativement au nombre de poussées non-saturantes. Le problème vient principalement du fait que lors des poussées non-saturantes, il n’y a pas les changements de structures aisément restreints qu’occasionnent les poussées saturantes. Dans un FIFO de base, il peut y en avoir O(n3). On peut toutefois se rendre à O(n2logU/loglogU) ou à O(n2(logU)1/2). (Structures complexes d'arbres et facteur multiplicatif plus important) Ici, avec par l'approche par phases, nous allons atteindre O(n2logU). IFT6542 - A07 - Présentation - Nicola Grenon

Par réduction d'échelle des excès (Excess Scaling Algorithm) Second algorithme Par réduction d'échelle des excès (Excess Scaling Algorithm)

IFT6542 - A07 - Présentation - Nicola Grenon Quoi encore? L’algorithme cette fois va agir ainsi: Pour réduire le nombre de poussées non saturantes à O(n2logU), on utilise un  qui pour chaque phase va descendre d’une puissance de 2 (en débutant à )* et on va garantir qu’à chaque poussée non saturante, au moins /2 unités de flot seront poussées. Pour réussir ceci, on ne va que considérer les sommets ayant au moins cet excès. Ensuite, en prenant le sommet le plus près du puits, cela nous assure que le sommet de destination a un «faible» excès. L’astuce pour choisir efficacement un sommet ayant un excès de plus de /2 sera de maintenir une série de listes de sommets en fonction de leurs distances, ainsi qu’une variable de niveau. Finalement, pour chaque sommet, on conserve une liste fixée des arcs incidents vers l’extérieur et un pointeur vers l’arc courant. On va examiner cette liste séquentiellement pour trouver un arc admissible où pousser du flot. Cela évite de revisiter un arc avant un reétiquetage. IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Pseudotruc, le retour... procédure flot_max_par_phases (entrée: G=(V,A); sortie: x) début {initialisation} mêmes initialisations que pour le précédent algorithme :=2logU {corps} tant que 1 pour iV si e(i)>/2 alors ajouter i à LISTE(d(i)) niveau:=1 tant que niveau<2n si LISTE(niveau)= alors niveau:=niveau+1 sinon choisir un sommet i dans LISTE(niveau) pousser_ou_reétiqueter(i) fin :=/2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Pseudotruc, la fin! procédure pousser_ou_reétiqueter (entrée: i, LISTE, G, x; sortie: LISTE, G, x) début trouvé:=faux (i,j):=courant(i) {L’arc courant du sommet i} tant que trouvé=faux et (i,j)vide si d(i)=d(j)+1 et rij>0 alors trouvé:=vrai sinon (i,j):=l’arc suivant parmi le V+(i) fixé. («vide» si terminé) si trouvé=vrai pousser =min{e(i),rij,-e(j)} sur (i,j) {ajuster xij, e(i) et e(j)} si e(i)/2 alors LISTE(d(i)):=LISTE(d(i))\{i} si js,t et e(j)>/2 alors LISTE(d(j)):=LISTE(d(j)){j} niveau:=niveau-1 fin sinon {fin de la liste des arcs de i} début {reétiquetage} d(i):=min{d(j)+1|(i,j)V+(i) et rij>0} LISTE(d(i)):=LISTE(d(i)){i} courant(i):=premier arc de V+(i) fixé fin2 IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Qu’est-ce que je gagne? L’algorithme agit un peu comme un glouton, mais que l’on aurait calmé un peu. En effet : On s’assure de pousser au moins /2 (si non saturant) Aucun excès n'augmente à plus de  Comme on pousse min{e(i), rij, -e(j)} Ceci nous permet de conserver le niveau de complexité voulu. IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Hmmm ... Le total des poussées non saturantes est alors au maximum de 8n2. e(i) et d(i)2n, Donc, prenons F=e(i)d(i)/2n2. Alors, quand on examine i : Soit, plus d’admissiblereétiquetageF augmente, mais la valeur maximale de d(i) étant 2n, F ne peut augmenter de plus de 2n2 fois de cette manière. Soit on effectue une poussée et F diminue d’au moins la moitié. Au total, F ne pourra donc augmenter de plus de 4n2. Ce qui donne 8n2 augmentations au maximum. IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Bingo! On obtient finalement O(n2logU) poussées non saturantes. Comme 2U et qu’on le divise par 2 après chaque phase qui a nécessité au maximum 8n2 poussées non saturantes… La complexité totale est donc de O(nm+n2logU). La complexité dépend du nombre d’exécutions de la boucle «tant que». À chaque itération, soit niveau augmente, soit on «pousse ou reétiquette». Si on pousse, on a calculé le nombre de poussées non saturantes à O(n2logU) et il y a O(nm) poussées saturantes. On ne peut augmenter niveau que O(n) fois pour chaque sommet. Ce qui donne O(n2), négligeable ici. L’ensemble des autres opérations est aussi négligeable. IFT6542 - A07 - Présentation - Nicola Grenon

IFT6542 - A07 - Présentation - Nicola Grenon Ça achève ... Petites améliorations possibles : Changer le ratio de  d’une phase à l’autre. Ne change pas la complexité, mais peut être efficace selon les cas. Ça ajoute un facteur multiplicatif à la complexité, mais les poussées sont plus efficaces. Permettre des petites poussées non saturantes. En pressant le citron d’un sommet, même si l’algorithme nous demande de le sortir de G(x) jusqu’à ce qu’il n’ait plus d’excès ou qu’on réalise une poussée de /2. En essayant, de temps en temps, d’éliminer les sommets déconnectés du puits dans G(x) par une recherche en largeur... IFT6542 - A07 - Présentation - Nicola Grenon

C’est assez!