Arcs sortants et entrantsstehlikm/... · 2020. 11. 21. · Arcs sortants et entrants Définition...

52
Arcs sortants et entrants Définition Soient G =(V,E) un graphe orienté et U V . Alors, on note + (U ) l’ensemble des arcs dont le début est dans U . De même, on note - (U ) l’ensemble des arcs dont la fin est dans U . U 1

Transcript of Arcs sortants et entrantsstehlikm/... · 2020. 11. 21. · Arcs sortants et entrants Définition...

  • Arcs sortants et entrants

    DéfinitionSoient G = (V,E) un graphe orientéet U ⊆ V . Alors, on note ∂+(U)l’ensemble des arcs dont le débutest dans U . De même, on note∂−(U) l’ensemble des arcs dont lafin est dans U .

    U

    δ+(U)

    δ−(U)

    1

  • Arcs sortants et entrants

    DéfinitionSoient G = (V,E) un graphe orientéet U ⊆ V . Alors, on note ∂+(U)l’ensemble des arcs dont le débutest dans U . De même, on note∂−(U) l’ensemble des arcs dont lafin est dans U .

    U

    δ+(U)

    δ−(U)

    1

  • Degré sortant et degré entrant

    Définition

    • le degré entrant d−(v), est le nombred’arcs dont la fin est v.

    • le degré sortant d+(v), est le nombred’arcs dont le début est v.

    • On a d−(v) = |∂−({v})| etd+(v) = |∂+({v})|.• v est une source si d−(v) = 0.• v est un puits si d+(v) = 0.

    v

    d+(v) = 1

    d−(v) = 2

    2

  • Degré sortant et degré entrant

    Définition

    • le degré entrant d−(v), est le nombred’arcs dont la fin est v.

    • le degré sortant d+(v), est le nombred’arcs dont le début est v.

    • On a d−(v) = |∂−({v})| etd+(v) = |∂+({v})|.• v est une source si d−(v) = 0.• v est un puits si d+(v) = 0.

    v

    d+(v) = 1

    d−(v) = 2

    2

  • Flot max et coupe min

    • Deux problèmes classiques de l’optimisation combinatoire.• Exemple de la dualité mathématique.

    Quelques applications

    • Fouille de données.• Sélection de projets.• Ordonnancement (par exemple compagnies aériennes).• Segmentation de l’image.• Connectivité et fiabilité des réseaux.• Calcul distribuée. . .

    3

  • Réseaux

    DéfinitionUn réseau est un graphe orientéG = (V,E) avec :

    • deux sommets spéciaux :• la source s tel que d−(s) = 0• le puits t tel que d+(s) = 0

    • une fonction de capacitéc : E → R+.

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 7

    4

    2

    3

    A

    4

  • Coupes

    DéfinitionUne s− t coupe est une partition(A,B) de V telle que s ∈ A et t ∈ B

    DéfinitionLa capacité d’une coupe (A,B) estcap(A,B) =

    ∑e∈δ+(A) c(e).

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 7

    4

    2

    3

    A

    cap(A,B) = 2 + 4 + 1 + 2 + 5 = 14

    5

  • Le problème de la coupe minimum

    ProblèmeTrouver une s− t coupe de capacitéminimum.

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 7

    4

    2

    3

    A

    cap(A,B) = 2 + 2 + 2 + 3 = 9

    6

  • Flots

    DéfinitionUn s− t flot est une fonctionf : E → R+ qui vérifie

    • Pour tout e ∈ E, 0 ≤ f(e) ≤ c(e)(contrainte de capacité)

    • Pour tout v ∈ V − {s, t},∑e∈δ−(v) f(e) =

    ∑e∈δ+(v) f(e)

    (conservation de flot).

    DéfinitionLa valeur d’un flot f estval(f) =

    ∑e∈δ+(s) f(e).

    s t

    2/2

    1/2

    3/8

    0/3

    2/2

    0/3

    0/4

    1/1

    0/2

    3/5

    0/2 2/7

    0/4

    1/2

    3/3

    val(f) = 2 + 1 + 3 = 6

    7

  • Le problème du flot maximum

    ProblèmeTrouver un s− t flot de valeurmaximum.

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    val(f) = 2 + 2 + 5 = 9

    8

  • Un peu d’histoire : le réseau ferroviaire soviétique

    2

    Soviet Rail Network, 1955

    Reference: On the history of the transportation and maximum flow problems.Alexander Schrijver in Math Programming, 91: 3, 2002.

    9

  • Flots et coupes

    LemmeSoit f un flot et (A,B) une s− tcoupe. Alors, le flot qui traverse lacoupe est égal au flot qui sort de s.∑e∈δ+(A)

    f(e)−∑

    e∈δ−(A)

    f(e) = val(f).

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    A

    val(f) = 2 + 2 + 5

    = 5 + 2− 2 + 4

    10

  • Flots et coupes

    Démonstration

    val(f) =∑

    e∈δ+(s)

    f(e)

    =∑

    e∈δ+(s)

    f(e)−∑

    e∈δ−(s)

    f(e)

    =∑v∈A

    ∑e∈δ+(v)

    f(e)−∑

    e∈δ−(v)

    f(e)

    =

    ∑e∈δ+(A)

    f(e)−∑

    e∈δ−(A)

    f(e).

    11

  • Dualité faible

    LemmeSoit f un flot et (A,B) une s− t coupe quelconques. Alors, la valeur de fest inférieure ou égale à la capacité de la coupe.

    Démonstration

    val(f) =∑

    e∈δ+(A)

    f(e)−∑

    e∈δ−(A)

    f(e)

    ≤∑

    e∈δ+(A)

    f(e)

    ≤∑

    e∈δ+(A)

    c(e)

    = cap(A,B).

    12

  • Certificat d’optimalité

    CorollaireSoit f un flot et (A,B) une coupe. Si val(f) = cap(A,B), alors f est un flotmax et (A,B) est une coupe min.

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    A G

    val(f) = 9

    cap(A,B) = 9

    13

  • Vers un algorithme de flot max

    Un algorithme glouton

    • Commencer par le flot nul, càd, f(e) = 0pour chaque arc e ∈ E.• Trouver un s− t chemin P où tout arc

    vérifie f(e) < c(e).

    • Augmenter le flot le long le chemin P .• Répéter jusqu’à devenir coincé.

    s t

    0/6

    0/3

    0/9

    0/3

    0/6

    val(f) = 6

    14

  • Vers un algorithme de flot max

    Un algorithme glouton

    • Commencer par le flot nul, càd, f(e) = 0pour chaque arc e ∈ E.• Trouver un s− t chemin P où tout arc

    vérifie f(e) < c(e).

    • Augmenter le flot le long le chemin P .• Répéter jusqu’à devenir coincé.

    s t

    0/6

    0/3

    0/9

    0/3

    0/6

    val(f) = 6

    14

  • Vers un algorithme de flot max

    Un algorithme glouton

    • Commencer par le flot nul, càd, f(e) = 0pour chaque arc e ∈ E.• Trouver un s− t chemin P où tout arc

    vérifie f(e) < c(e).

    • Augmenter le flot le long le chemin P .• Répéter jusqu’à devenir coincé.

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    val(f) = 6

    14

  • Le graphe résiduel

    Arc originel :

    • e = (u, v) ∈ E.• Flot f(e), capacité c(e).

    Arc résiduel :

    • “annuler” le flot envoyé.• e = (u, v) et eR = (v, u).• Capacité résiduelle :

    cf (e) =

    c(e)− f(e) si e ∈ Ef(e) si eR ∈ E.

    4/6

    arc de G

    2

    4

    arcs de Gf

    15

  • Le graphe résiduel

    Graphe résiduel :

    • Arcs résiduels avec capacité résiduellepositive.

    • Ef = {e | f(e) < c(e)} ∪ {eR | f(e) > 0}.Chemin augmentant :

    • Un chemin augmentant est un s–tchemin simple dans le graphe résiduelGf .

    • La capacité cap(Gf , P ) d’un cheminaugmentant P est le minimum descapacités résiduelles parmi tous les arcsde P .

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    s t

    6

    3

    3 6

    3

    6

    16

  • Propriété clé

    • Soit f un flot et P un cheminaugmentant dans Gf .

    • En envoyant un flot de valeur cap(Gf , P )on obtient un nouveau flot f ′ de valeurval(f ′) = val(f) + cap(Gf , P ).

    Augment(f,c,P):

    ε← min{cf (e) : e ∈ E(P )}for e ∈ E(P ):

    if e ∈ E:f(e)← f(e) + ε

    else:

    f(eR)← f(e)− εreturn f

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    G

    s t

    6

    3

    3 6

    3

    6

    Gf17

  • Propriété clé

    • Soit f un flot et P un cheminaugmentant dans Gf .

    • En envoyant un flot de valeur cap(Gf , P )on obtient un nouveau flot f ′ de valeurval(f ′) = val(f) + cap(Gf , P ).

    Augment(f,c,P):

    ε← min{cf (e) : e ∈ E(P )}for e ∈ E(P ):

    if e ∈ E:f(e)← f(e) + ε

    else:

    f(eR)← f(e)− εreturn f

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    G

    s t

    6

    3

    3 6

    3

    6

    Gf17

  • Propriété clé

    • Soit f un flot et P un cheminaugmentant dans Gf .

    • En envoyant un flot de valeur cap(Gf , P )on obtient un nouveau flot f ′ de valeurval(f ′) = val(f) + cap(Gf , P ).

    Augment(f,c,P):

    ε← min{cf (e) : e ∈ E(P )}for e ∈ E(P ):

    if e ∈ E:f(e)← f(e) + ε

    else:

    f(eR)← f(e)− εreturn f

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    G

    s t

    6

    3

    3 6

    3

    6

    Gf17

  • Propriété clé

    • Soit f un flot et P un cheminaugmentant dans Gf .

    • En envoyant un flot de valeur cap(Gf , P )on obtient un nouveau flot f ′ de valeurval(f ′) = val(f) + cap(Gf , P ).

    Augment(f,c,P):

    ε← min{cf (e) : e ∈ E(P )}for e ∈ E(P ):

    if e ∈ E:f(e)← f(e) + ε

    else:

    f(eR)← f(e)− εreturn f

    s t

    6/6

    3/3

    3/9

    3/3

    6/6

    G

    s t

    6

    3

    6 3

    3

    6

    Gf17

  • Algorithme de Ford–Fulkerson

    Ford-Fulkerson(G, s, t, c):

    for e ∈ E(G):f ← 0

    Gf ← graphe residuelwhile ∃ chemin augmentant P:

    f ← Augment(f, c, P )mettre a jour Gf

    return f

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    G

    s t

    6

    3

    3 6

    3

    6

    Gf18

  • Algorithme de Ford–Fulkerson

    Ford-Fulkerson(G, s, t, c):

    for e ∈ E(G):f ← 0

    Gf ← graphe residuelwhile ∃ chemin augmentant P:

    f ← Augment(f, c, P )mettre a jour Gf

    return f

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    G

    s t

    6

    3

    3 6

    3

    6

    Gf18

  • Algorithme de Ford–Fulkerson

    Ford-Fulkerson(G, s, t, c):

    for e ∈ E(G):f ← 0

    Gf ← graphe residuelwhile ∃ chemin augmentant P:

    f ← Augment(f, c, P )mettre a jour Gf

    return f

    s t

    6/6

    0/3

    6/9

    0/3

    6/6

    G

    s t

    6

    3

    3 6

    3

    6

    Gf18

  • Algorithme de Ford–Fulkerson

    Ford-Fulkerson(G, s, t, c):

    for e ∈ E(G):f ← 0

    Gf ← graphe residuelwhile ∃ chemin augmentant P:

    f ← Augment(f, c, P )mettre a jour Gf

    return f

    s t

    6/6

    3/3

    3/9

    3/3

    6/6

    G

    s t

    6

    3

    6 3

    3

    6

    Gf18

  • Le théorème flot-max/coupe-min

    Théorème des chemins augmentantsUn flot f est maximum ssi il n’y a pas de chemin augmentant.

    Théorème (Elias–Feinstein–Shannon 1956 ; Ford–Fulkerson 1956)La valeur maximum d’un flot est égale à la capacité minimum d’unecoupe.

    On va prouver les deux théorèmes en même temps en démontrant que lesénoncés suivants sont équivalents :

    (1) Il existe une coupe (A,B) telle que val(f) = cap(A,B).

    (2) Le flot f est maximum.

    (3) Il n’existe pas de chemin augmentant par rapport à f .

    19

  • Démonstration du théorème flot-max/coupe-min (1/2)

    (1) ⇒ (2) Corollaire à la dualité faible.

    (2) ⇒ (3) Soit f un flot. S’il existe un chemin augmentant P , on peutaugmenter f en envoyant un flot le long P .

    (3) ⇒ (1)

    • Soit f un flot sans chemin augmentant.• Soit A un ensemble de sommets atteignables depuis s dans le graphe

    résiduel.

    • Par la définition de A, s ∈ A.• Par la définition de f , t /∈ A.

    20

  • Démonstration du théorème flot-max/coupe-min (2/2)

    val(f) =∑

    e∈δ+(A)

    f(e)−∑

    e∈δ−(A)

    f(e)

    =∑

    e∈δ+(A)

    c(e)

    = cap(A,B)

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    A G

    s t

    2

    2

    35

    3

    2

    3

    22

    1

    2

    23

    2 34

    4

    2

    3

    A Gf

    21

  • Comment trouver une coupe minimum?

    • Il suffit de prendre A comme l’ensemble des sommets atteignables àpartir de s dans le graphe résiduel Gf .

    • C’est-à-dire, v ∈ A ssi il existe un chemin orienté dans Gf avec sommetde départ s et sommet d’arrivée v.

    • Si vous trouvez que t ∈ A, alors il existe un chemin augmentant et fn’est pas maximum — dans ce cas, il faut encore faire tournerFord–Fulkerson !

    22

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    0/2

    0/2

    0/8

    0/3

    0/2

    0/3

    0/4

    0/1

    0/2

    0/5

    0/2 0/7

    0/4

    0/2

    0/3

    val(f) = 0

    G

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 7

    4

    2

    3

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    0/2

    0/2

    0/8

    0/3

    0/2

    0/3

    0/4

    0/1

    0/2

    0/5

    0/2 0/7

    0/4

    0/2

    0/3

    val(f) = 0

    G

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 7

    4

    2

    3

    2

    2

    7

    Gf

    chemin augmentant decapacité résiduelle 2

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    0/2

    0/8

    0/3

    2/2

    0/3

    0/4

    0/1

    0/2

    0/5

    0/2 2/7

    0/4

    0/2

    0/3

    val(f) = 2

    G

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 7

    4

    2

    3

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    0/2

    0/8

    0/3

    2/2

    0/3

    0/4

    0/1

    0/2

    0/5

    0/2 2/7

    0/4

    0/2

    0/3

    val(f) = 2

    G

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 52

    4

    2

    3

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    0/2

    0/8

    0/3

    2/2

    0/3

    0/4

    0/1

    0/2

    0/5

    0/2 2/7

    0/4

    0/2

    0/3

    val(f) = 2

    G

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 52

    4

    2

    38

    5

    3

    Gf

    chemin augmentant decapacité résiduelle 3

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    0/2

    3/8

    0/3

    2/2

    0/3

    0/4

    0/1

    0/2

    3/5

    0/2 2/7

    0/4

    0/2

    3/3

    val(f) = 5

    G

    s t

    2

    2

    8

    3

    2

    3

    4

    1

    2

    5

    2 52

    4

    2

    3

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    0/2

    3/8

    0/3

    2/2

    0/3

    0/4

    0/1

    0/2

    3/5

    0/2 2/7

    0/4

    0/2

    3/3

    val(f) = 5

    G

    s t

    2

    2

    3

    2

    3

    4

    1

    2

    2 52

    4

    2

    35

    23

    3

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    0/2

    3/8

    0/3

    2/2

    0/3

    0/4

    0/1

    0/2

    3/5

    0/2 2/7

    0/4

    0/2

    3/3

    val(f) = 5

    G

    s t

    2

    2

    3

    2

    3

    4

    1

    2

    2 52

    4

    2

    35

    23

    3

    2 1 2

    Gf

    chemin augmentant decapacité résiduelle 1

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    1/2

    3/8

    0/3

    2/2

    0/3

    0/4

    1/1

    0/2

    3/5

    0/2 2/7

    0/4

    1/2

    3/3

    val(f) = 6

    G

    s t

    2

    2

    3

    2

    3

    4

    1

    2

    2 52

    4

    2

    35

    23

    3

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    1/2

    3/8

    0/3

    2/2

    0/3

    0/4

    1/1

    0/2

    3/5

    0/2 2/7

    0/4

    1/2

    3/3

    val(f) = 6

    G

    s t

    2 3

    2

    3

    4

    2

    2 52

    435

    23

    3

    11 1 1

    1

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    1/2

    3/8

    0/3

    2/2

    0/3

    0/4

    1/1

    0/2

    3/5

    0/2 2/7

    0/4

    1/2

    3/3

    val(f) = 6

    G

    s t

    2 3

    2

    3

    4

    2

    2 52

    435

    23

    3

    11 1 1

    11

    4 5

    Gf

    chemin augmentant decapacité résiduelle 1

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    3/8

    0/3

    2/2

    0/3

    1/4

    1/1

    0/2

    3/5

    0/2 3/7

    0/4

    1/2

    3/3

    val(f) = 7

    G

    s t

    2 3

    2

    3

    4

    2

    2 52

    435

    23

    3

    11 1 1

    1

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    3/8

    0/3

    2/2

    0/3

    1/4

    1/1

    0/2

    3/5

    0/2 3/7

    0/4

    1/2

    3/3

    val(f) = 7

    G

    s t

    2 3

    2

    3 2

    2

    435

    23

    3

    1 112

    31

    43

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    3/8

    0/3

    2/2

    0/3

    1/4

    1/1

    0/2

    3/5

    0/2 3/7

    0/4

    1/2

    3/3

    val(f) = 7

    G

    s t

    2 3

    2

    3 2

    2

    435

    23

    3

    1 112

    31

    43

    3 2

    1

    Gf

    chemin augmentant decapacité résiduelle 1

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    4/8

    0/3

    2/2

    0/3

    1/4

    1/1

    1/2

    3/5

    0/2 3/7

    0/4

    2/2

    3/3

    val(f) = 8

    G

    s t

    2 3

    2

    3 2

    2

    435

    23

    3

    1 112

    31

    43

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    4/8

    0/3

    2/2

    0/3

    1/4

    1/1

    1/2

    3/5

    0/2 3/7

    0/4

    2/2

    3/3

    val(f) = 8

    G

    s t

    2 3

    2

    3

    2

    4

    23

    3

    12

    31

    43

    44

    11

    2

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    4/8

    0/3

    2/2

    0/3

    1/4

    1/1

    1/2

    3/5

    0/2 3/7

    0/4

    2/2

    3/3

    val(f) = 8

    G

    s t

    2 3

    2

    3

    2

    4

    23

    3

    12

    31

    43

    44

    11

    2

    4 1

    1

    3 4

    Gf

    chemin augmentant decapacité résiduelle 1

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    val(f) = 9

    G

    s t

    2 3

    2

    3

    2

    4

    23

    3

    12

    31

    43

    44

    11

    2

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    val(f) = 9

    G

    s t

    2 3

    2

    3

    2

    4

    23

    3

    2 2

    35 2

    1

    22

    34

    Gf

    23

  • Exemple de l’utilisation de l’algorithme de Ford–Fulkerson

    s t

    2/2

    2/2

    5/8

    0/3

    2/2

    0/3

    2/4

    0/1

    2/2

    3/5

    0/2 4/7

    0/4

    2/2

    3/3

    val(f) = 9 = cap(A,B)

    A G

    s t

    2 3

    2

    3

    2

    4

    23

    3

    2 2

    35 2

    1

    22

    34

    GfA

    23