• Aucun résultat trouvé

3.4 Le Problème de Coupure Minimale

3.4.8 L'algorithme du ot maximal

On trouve dans la littérature deux approches pour résoudre le problème de ot maximal [Cor- men et al., 2001]. La première est l'algorithme de chemin augmentant dû à Ford et Fulkerson [Ford et Fulkerson, 1962], et la deuxième est de type Push-Relabel.

L'algorithme du chemin augmentant

Ford et Fulkerson [Ford et Fulkerson, 1962] ont élaboré une solution du problème de ot maximal basée sur le chemin augmenté. En eet, si il existe un chemin augmenté dans le graphe résiduel Gr, alors le ot n'est pas maximal. L'algorithme commence par trouver un chemin

augmenté, puis on accroît le ot par une valeur égale à la capacité du chemin augmenté (la capacité minimale de toutes les arêtes dans le chemin augmenté), et ensuite on remet à jour le graphe résiduel Gr. Cette opération sera répétée tant qu'il y aura un chemin augmenté.

La complexité de l'algorithme du chemin augmenté est de O(e∗MaxF lot) [Ford et Fulkerson, 1962], où e est le nombre des arêtes dans le graphe et MaxF lot la valeur du ot maximal.

L'algorithme de Push-Relabel

L'idée de l'algorithme de Push-Relabel peut être clariée par l'exemple suivant : supposons que le graphe est représenté comme suit : la source s est au sommet et le puits t en bas du graphe (hauteur nulle). On fait couler l'eau de la source s vers le bas. À chaque site, l'eau en excès va couler vers le site le plus bas avec un débit majoré par la capacité de l'arc reliant ces deux sites. Après cette opération, l'eau est maintenant dans le site du bas, et l'excès est diminué dans le site du haut. On suit l'eau jusqu'à ce qu'elle arrive au puits t. L'algorithme s'arrête lorsqu'il n'y aura plus d'excès dans aucun site.

Chapitre 3. Stéréovision et Coupure de Graphe

Algorithme 3.2 : Flot maximal : L'algorithme du chemin augmentant G = (V, E) : un graphe

V : l'ensemble des sites E : l'ensemble des arêtes s : la source

t : le puits

pour (u, v) ∈ E faire f (u, v) ← 0 f (v, u) ← 0 n

Trouver le graphe résiduel Gr

tant que il existe un chemin augmenté p dans le graphe résiduel Gr entre s et t faire

cf(p) = min{cf(u, v) : (u, v) ∈ p}

pour (u, v) ∈ p faire f (u, v) ← cf(p) + f (u, v)

f (v, u) ← −f (u, v) n

Mettre à jour le graphe résiduel Gr

n

La Hauteur d'un site : On observe que le chemin le plus long de la source au puits contient au maximum V noeuds. Ainsi, on peut aecter la hauteur de chaque site de manière suivante :

• Hauteur(s) = V. • Hauteur(t) = 0.

• φ(u, v) > 0 ⇐⇒ Hauteur(u) > Hauteur(v)

En quelques mots, dans l'algorithme de Push-Relabel, les hauteurs des sites (sauf s et t) sont ajustées, et le ot est envoyé entre noeuds, jusqu'à son arrivée au puits t. De plus, les hauteurs des sites internes sont augmentées jusqu'à ce que tout ot dans le graphe n'ayant pas encore arrivé au puits t, puisse y arriver.

3.4. Le Problème de Coupure Minimale Algorithme 3.3 : Flot maximal : L'algorithme général de Push-Relabel

G = (V, E) : un graphe V : l'ensemble des sites E : l'ensemble des arêtes s: la source

t : le puits

tant que il existe un site v dans le graphe G qui a un excès ((v) > 0) faire Sélectionner le site v.

Faire une opération légale de Push(v) ou Faire une opération légale de Relabel(v) n

Dénition de Préot

Un préot est similaire au ot, à l'exception que la quantité totale qui s'écoule dans un site peut excéder le ot sortant (le principe de conservation du ot n'est plus respecté). La notion de préot à été introduite par Karzanov [Karzanov, 1974]. Soit G = (V, E) un graphe. Un préot est une fonction :

P : V xV → R+ telle que :           

∗ ∀(u, v) ∈ E : P (u, v) ≤ c(u, v)

∗ ∀(u, v) ∈ E : P (v, u) = −P (u, v) ∗ ∀u ∈ V − {s} :P (w,u)∈EP (w, u) − P (w,u)∈EP (u, w) ≥ 0 (3.16)

Soit (u) = P (V, u), (u) est appelé l'excès en u, qui est la diérence entre le débit entrant dans le site u et le débit sortant de ce site. Un site u ∈ V − {s, t} est dit débordé si (u) > 0. L'opération Push(v)

Faire un push de u à v signie : envoyer une partie de l'excès de ot du site u au site v. Avant de faire une opération de push, on doit vérier trois conditions :

Chapitre 3. Stéréovision et Coupure de Graphe qu'à partir de lui.

• c(u, v) − f (u, v) > 0 : l'arête (u, v) n'est pas saturée.

• h(u) > h(v). Le site u est situé à une hauteur plus élevée que le site v. Quand ces conditions sont satisfaites, on va envoyer une quantité de ot égale à :

valeur de Push = minn (u) , c(u, v) − φ(u, v)o (3.17)

L'opération Relabel(v)

Durant l'opération de Relabel d'un site u, on augmente sa hauteur jusqu'à ce qu'il soit plus haut qu'au moins un site v dont il existe une arête non saturée de u vers v. Les conditions de re-label sont :

• e(u) > 0 : il y un excès de ot.

• Hauteur(u) ≤ Hauteur(v) pour tous les sites v tels que c(u, v) − f(u, v) > 0. Les seuls sites ayant des arêtes entrantes non saturées sont plus hauts.

Quand on re-label un site u, on ajuste sa hauteur h(u) pour qu'elle soit égale à la plus petite valeur vériant h(u) > h(v) pour tous les sites v ayant c(u, v) − f(u, v) > 0.

Complexité des algorithmes de ot maximal

• L'algorithme 3.3 donne une implémentation générale de l'algorithme Push-Relabel, qui utilise les operations de Push et Relabel dénies juste après l'algorithme [Goldberg et Tarjan, 1988].

• L'algorithme de Push-Relabel est un des algorithmes les plus performants pour calculer le ot maximal. L'algorithme général a une complexité de O(v2e) [Cormen et al., 2001],

avec v le nombre de sites dans V et e est le nombre des arêtes dans E, alors qu'une implémentation avec FIFO vertex (le d'attente des sites) a une complexité de O(v3)

[Cormen et al., 2001]. La complexité théorique de l'algorithme proposé par Goldberg est de O(v e log(v2/e))[Goldberg et Tarjan, 1988].

Pour notre implémentation, nous avons choisi l'implémentation de Push-Relabel proposée par Goldberg [Goldberg, 1985], inclue dans Boost Graph Library 1. La complexité est de

O(v3).

3.5. Mise en Correspondance Stéréoscopique par Coupure de Graphe