Katona Gyula Y.
Budapesti M ˝uszaki és Gazdaságtudományi Egyetem Számítástudományi Tsz.
I. B. 137/b
kiskat@cs.bme.hu
2002 Március 26.
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzük kékre, ami még nem alkot kört az eddigi kék élekkel.
=⇒ A kék élek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
lesz.
=⇒ Az új kék él az eddigi erd ˝o két komponensét fogja összekötni.
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzük kékre, ami még nem alkot kört az eddigi kék élekkel.
=⇒ A kék élek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
=⇒ Az új kék él az eddigi erd ˝o két komponensét fogja összekötni.
Kezdetben n komponens, egy él színezésével eggyel csökken a komponensek száma.
lesz.
=⇒ Az új kék él az eddigi erd ˝o két komponensét fogja összekötni.
Kezdetben n komponens, egy él színezésével eggyel csökken a komponensek száma.
procedure Kruskal (G: gráf; var F, H: élek halmaza);
begin
F := ∅; H := E;
while H 6= ∅ do begin
Töröljük a H minimális súlyú (v, w) élét.
Ha F ∪ {(v, w)}-ben nincs kör
(azaz a v, w pontok különböz ˝o kék fákban vannak), akkor F := F ∪ {(v, w)}
end end
Kruskal módszere
Mindig a legkisebb súlyú olyan élet színezzük kékre, ami még nem alkot kört az eddigi kék élekkel.
=⇒ A kék élek végig egy erd ˝ot határoznak meg, akkor van kész, ha feszít ˝ofa lesz.
=⇒ Az új kék él az eddigi erd ˝o két komponensét fogja összekötni.
Kezdetben n komponens, egy él színezésével eggyel csökken a komponensek száma.
procedure Kruskal (G: gráf; var F, H: élek halmaza);
begin
F := ∅; H := E;
while H 6= ∅ do begin
Töröljük a H minimális súlyú (v, w) élét.
Ha F ∪ {(v, w)}-ben nincs kör
(azaz a v, w pontok különböz ˝o kék fákban vannak), akkor F := F ∪ {(v, w)}
end
end=⇒ Ha a (v, w) él kört eredményez, akkor piros él, ha pedig nem, akkor kék éle.
Tétel. A Kruskal-algoritmus eredményeként végül F a G gráf egy minimális költség ˝u feszít ˝ofájának éleit tartalmazza.
Bizonyítás: ez is piros-kék algoritmus JAVA animáció: Kruskal
JAVA animáció: Kruskal Implementáció:
• élekb ˝ol kupacot építünk → O(e log e) lépés
Tétel. A Kruskal-algoritmus eredményeként végül F a G gráf egy minimális költség ˝u feszít ˝ofájának éleit tartalmazza.
Bizonyítás: ez is piros-kék algoritmus JAVA animáció: Kruskal
Implementáció:
• élekb ˝ol kupacot építünk → O(e log e) lépés
• éleket el ˝ore rendezzük → O(e log e) lépés
JAVA animáció: Kruskal Implementáció:
• élekb ˝ol kupacot építünk → O(e log e) lépés
• éleket el ˝ore rendezzük → O(e log e) lépés
Hogyan döntjük el, hogy a kiválasztott él kört alkot-e az eddigi kiválasztottakkal?
Tétel. A Kruskal-algoritmus eredményeként végül F a G gráf egy minimális költség ˝u feszít ˝ofájának éleit tartalmazza.
Bizonyítás: ez is piros-kék algoritmus JAVA animáció: Kruskal
Implementáció:
• élekb ˝ol kupacot építünk → O(e log e) lépés
• éleket el ˝ore rendezzük → O(e log e) lépés
Hogyan döntjük el, hogy a kiválasztott él kört alkot-e az eddigi kiválasztottakkal?
=⇒ Tartsuk nyilván az aktuálisan egy kék fába tartozó csúcsokat mint halmazokat.
JAVA animáció: Kruskal Implementáció:
• élekb ˝ol kupacot építünk → O(e log e) lépés
• éleket el ˝ore rendezzük → O(e log e) lépés
Hogyan döntjük el, hogy a kiválasztott él kört alkot-e az eddigi kiválasztottakkal?
=⇒ Tartsuk nyilván az aktuálisan egy kék fába tartozó csúcsokat mint halmazokat.
Kell: UNIÓ, HOLVAN
Az UNIÓ-HOLVAN adatszerkezet
Legyen adott egy véges S halmaz. Ennek egy partícióját szeretnénk tárolni
→ U1, . . . , Uk ⊆ S
→ U1, . . . , Uk ⊆ S
Adott egy n elem ˝u S halmaz, és ennek bizonyos U1, . . . , Um részhalmazai, melyekre Ui ∩ Uj = ∅ (i 6= j) és U1 ∪ . . . ∪ Um = S (vagyis az Uj részhalmazok S egy partícióját adják).
Az UNIÓ-HOLVAN adatszerkezet
Legyen adott egy véges S halmaz. Ennek egy partícióját szeretnénk tárolni
→ U1, . . . , Uk ⊆ S
Adott egy n elem ˝u S halmaz, és ennek bizonyos U1, . . . , Um részhalmazai, melyekre Ui ∩ Uj = ∅ (i 6= j) és U1 ∪ . . . ∪ Um = S (vagyis az Uj részhalmazok S egy partícióját adják).
M ˝uveletek:
→ U1, . . . , Uk ⊆ S
Adott egy n elem ˝u S halmaz, és ennek bizonyos U1, . . . , Um részhalmazai, melyekre Ui ∩ Uj = ∅ (i 6= j) és U1 ∪ . . . ∪ Um = S (vagyis az Uj részhalmazok S egy partícióját adják).
M ˝uveletek:
UNIÓ(Ui, Uj) = ({U1, . . . , Um} ∪ {Ui ∪ Uj}) \ {Ui, Uj} (az Ui, Uj halmazokat Ui ∪ Uj helyettesíti).
Az UNIÓ-HOLVAN adatszerkezet
Legyen adott egy véges S halmaz. Ennek egy partícióját szeretnénk tárolni
→ U1, . . . , Uk ⊆ S
Adott egy n elem ˝u S halmaz, és ennek bizonyos U1, . . . , Um részhalmazai, melyekre Ui ∩ Uj = ∅ (i 6= j) és U1 ∪ . . . ∪ Um = S (vagyis az Uj részhalmazok S egy partícióját adják).
M ˝uveletek:
UNIÓ(Ui, Uj) = ({U1, . . . , Um} ∪ {Ui ∪ Uj}) \ {Ui, Uj} (az Ui, Uj halmazokat Ui ∪ Uj helyettesíti).
HOLVAN(v) eredménye (itt v ∈ S) annak az Ui halmaznak a neve, amelynek v eleme.
→ U1, . . . , Uk ⊆ S
Adott egy n elem ˝u S halmaz, és ennek bizonyos U1, . . . , Um részhalmazai, melyekre Ui ∩ Uj = ∅ (i 6= j) és U1 ∪ . . . ∪ Um = S (vagyis az Uj részhalmazok S egy partícióját adják).
M ˝uveletek:
UNIÓ(Ui, Uj) = ({U1, . . . , Um} ∪ {Ui ∪ Uj}) \ {Ui, Uj} (az Ui, Uj halmazokat Ui ∪ Uj helyettesíti).
HOLVAN(v) eredménye (itt v ∈ S) annak az Ui halmaznak a neve, amelynek v eleme.
Kruskalban:
annak megvizsgálása, hogy milyen szín ˝u legyen az új (u, v) él
=⇒ Ha HOLVAN(u) 6= HOLVAN(v), akkor kék, különben piros.
Az UNIÓ-HOLVAN adatszerkezet
Legyen adott egy véges S halmaz. Ennek egy partícióját szeretnénk tárolni
→ U1, . . . , Uk ⊆ S
Adott egy n elem ˝u S halmaz, és ennek bizonyos U1, . . . , Um részhalmazai, melyekre Ui ∩ Uj = ∅ (i 6= j) és U1 ∪ . . . ∪ Um = S (vagyis az Uj részhalmazok S egy partícióját adják).
M ˝uveletek:
UNIÓ(Ui, Uj) = ({U1, . . . , Um} ∪ {Ui ∪ Uj}) \ {Ui, Uj} (az Ui, Uj halmazokat Ui ∪ Uj helyettesíti).
HOLVAN(v) eredménye (itt v ∈ S) annak az Ui halmaznak a neve, amelynek v eleme.
Kruskalban:
annak megvizsgálása, hogy milyen szín ˝u legyen az új (u, v) él
=⇒ Ha HOLVAN(u) 6= HOLVAN(v), akkor kék, különben piros.
Új él színezése =⇒ UNIÓ(HOLVAN(u),HOLVAN(v))
Implementáció fákkal
Uj → gyökeres, felfelé irányított fa
Uj elemeit a fa csúcsaiban tároljuk, egy szül ˝omutatóval.
nyilvántartjuk még a fa méretét is.
Implementáció fákkal
Uj → gyökeres, felfelé irányított fa
Uj elemeit a fa csúcsaiban tároljuk, egy szül ˝omutatóval.
Egy részhalmaz neve legyen az ˝ot ábrázoló fa gyökere. A gyökérben nyilvántartjuk még a fa méretét is.
• UNIÓ: Ui ∪ Uj fáját a következ ˝oképpen készítjük el:
Tegyük fel, hogy |Ui| ≤ |Uj|. Ekkor az Uj fa x gyökeréhez gyermekként hozzákapcsoljuk Ui gyökerét.
B
B B B B
L L L L L L L
xq
Ui Uj
B
B B B B
L L L L L L L
xq
Ui Uj
Ui ∪ Uj
nyilvántartjuk még a fa méretét is.
• UNIÓ: Ui ∪ Uj fáját a következ ˝oképpen készítjük el:
Tegyük fel, hogy |Ui| ≤ |Uj|. Ekkor az Uj fa x gyökeréhez gyermekként hozzákapcsoljuk Ui gyökerét.
B
B B B B
L L L L L L L
xq
Ui Uj
B
B B B B
L L L L L L L
xq
Ui Uj
Ui ∪ Uj
A
A A A A A A A A A A A A A A A AA t
1B B B BB M
3
@
@
@ I
vn
x
v
6
• HOLVAN: A v ∈ S elemet tartalmazó részhalmaz nevét, azaz a megfelel ˝o fa gyökerét a szül ˝okhöz men ˝o mutatók végigkövetésével találhatjuk meg.
Az UNIÓ hívásakor az Ui és Uj halmazok a gyökerükkel adottak
=⇒ költség: O(1)
Az UNIÓ hívásakor az Ui és Uj halmazok a gyökerükkel adottak
=⇒ költség: O(1)
HA egy v csúcs új gyökér alá kerül, akkor egy szinttel lesz távolabb a
gyökért ˝ol, míg az új fájának a mérete legalább az eredeti duplájára változik.
=⇒ Egy csúcs legfeljebb log2 n-szer kerülhet új gyökér alá
=⇒ Egy csúcs legfeljebb log2 n-szer kerülhet új gyökér alá
=⇒ szintszám ≤ log2 n
Az UNIÓ hívásakor az Ui és Uj halmazok a gyökerükkel adottak
=⇒ költség: O(1)
HA egy v csúcs új gyökér alá kerül, akkor egy szinttel lesz távolabb a
gyökért ˝ol, míg az új fájának a mérete legalább az eredeti duplájára változik.
=⇒ Egy csúcs legfeljebb log2 n-szer kerülhet új gyökér alá
=⇒ szintszám ≤ log2 n
=⇒ HOLVAN költsége O(log n)
=⇒ Egy csúcs legfeljebb log2 n-szer kerülhet új gyökér alá
=⇒ szintszám ≤ log2 n
=⇒ HOLVAN költsége O(log n)
Tétel. A Kruskal-algoritmus költsége O(e log e).
Bizonyítás: 2e HOLVAN, és n − 1 UNIÓ m ˝uveletet jelent. Ezek id ˝oigénye O(e log n + n) = O(e log n), vagy ami ugyanaz: O(e log e).
A HOLVAN gyorsítása: útösszenyomás
Egy pontról többször is megnézzük HOLVAN, mindig log n lépés
A
A A A A A A A A A A A A A A A A A A A A u
1B B B B BB M
3
@
@
@@ I
v
@
@
@@ I
x1 x2
x3 x4
6
*
@
@
@
@
@ I
H HH H HH HH HH Y
x4
@
@
@@
x3I
x2 x1
v gyökér
PP PP
PP PP
PP PP
PP PP
PP PPP
PP PP
PP PPP
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!
gyökér
-
q pr
r r
s
s s qr r
A HOLVAN gyorsítása: útösszenyomás
Egy pontról többször is megnézzük HOLVAN, mindig log n lépés
=⇒ Az els ˝o alkalommal, minden ˝osét kössük közvetlenül a gyökérbe
A
A A A A A A A A A A A A A A A A A A A A u
1B B B B BB M
3
@
@
@@ I
v
@
@
@@ I
x1 x2
x3 x4
6
*
@
@
@
@
@ I
H HH H HH HH HH Y
x4
@
@
@@
x3I
x2 x1
v gyökér
PP PP
PP PP
PP PP
PP PP
PP PPP
PP PP
PP PPP
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!!
!
gyökér
-
q pr
r r
s
s s qr r
Tétel. Legyen |S| = n, és tegyük fel, hogy kezdetben mindegyik Uj
egyelem ˝u. Ha egy olyan utasítássorozatot hajtunk végre (útösszenyomással), melyben n − 1 UNIÓ és m ≥ n − 1 HOLVAN szerepel, akkor ennek az
id ˝oigénye O(mα(m)).
A korlátban szerepl ˝o α : Z+ → Z+ függvény az inverz Ackermann-függvény.
α(m) a végtelenhez tart, ha m → ∞, de nagyon lassan, lassabban mint a logaritmus k-szori önmagába helyettesítésével adódó log log · · ·log m
függvény (k ∈ Z+ tetsz ˝oleges).
Pl. α(m) ≤ 4, ha m < 265536
A normális méret ˝u feladatoknál tehát α(m) állandónak (≤ 4) tekinthet ˝o.
Pl. α(m) ≤ 4, ha m < 265536
A normális méret ˝u feladatoknál tehát α(m) állandónak (≤ 4) tekinthet ˝o.
Tétel. Ha az élek rendezésével kapcsolatos teend ˝ok O(e) id ˝oben
megoldhatók, akkor a Kruskal-algoritmus O(eα(e)) id ˝oben megvalósítható.
A korlátban szerepl ˝o α : Z+ → Z+ függvény az inverz Ackermann-függvény.
α(m) a végtelenhez tart, ha m → ∞, de nagyon lassan, lassabban mint a logaritmus k-szori önmagába helyettesítésével adódó log log · · ·log m
függvény (k ∈ Z+ tetsz ˝oleges).
Pl. α(m) ≤ 4, ha m < 265536
A normális méret ˝u feladatoknál tehát α(m) állandónak (≤ 4) tekinthet ˝o.
Tétel. Ha az élek rendezésével kapcsolatos teend ˝ok O(e) id ˝oben
megoldhatók, akkor a Kruskal-algoritmus O(eα(e)) id ˝oben megvalósítható.
Manipuláció a súlyokkal =⇒ Yao (1975): O(e log log n)
Pl. α(m) ≤ 4, ha m < 265536
A normális méret ˝u feladatoknál tehát α(m) állandónak (≤ 4) tekinthet ˝o.
Tétel. Ha az élek rendezésével kapcsolatos teend ˝ok O(e) id ˝oben
megoldhatók, akkor a Kruskal-algoritmus O(eα(e)) id ˝oben megvalósítható.
Manipuláció a súlyokkal =⇒ Yao (1975): O(e log log n)
Véletlen módszerek =⇒ D. R. Karger, P. N. Klein, R. E. Tarjan, (1994):
várhatóan O(e)
A korlátban szerepl ˝o α : Z+ → Z+ függvény az inverz Ackermann-függvény.
α(m) a végtelenhez tart, ha m → ∞, de nagyon lassan, lassabban mint a logaritmus k-szori önmagába helyettesítésével adódó log log · · ·log m
függvény (k ∈ Z+ tetsz ˝oleges).
Pl. α(m) ≤ 4, ha m < 265536
A normális méret ˝u feladatoknál tehát α(m) állandónak (≤ 4) tekinthet ˝o.
Tétel. Ha az élek rendezésével kapcsolatos teend ˝ok O(e) id ˝oben
megoldhatók, akkor a Kruskal-algoritmus O(eα(e)) id ˝oben megvalósítható.
Manipuláció a súlyokkal =⇒ Yao (1975): O(e log log n)
Véletlen módszerek =⇒ D. R. Karger, P. N. Klein, R. E. Tarjan, (1994):
várhatóan O(e)
On-line változatban is m ˝uködik a piros-kék algoritmus: színezzük az új élet élet kékre; ha emiatt kialakul egy kék kör, akkor abból töröljünk egy maximális súlyú élet.
Pl. α(m) ≤ 4, ha m < 265536
A normális méret ˝u feladatoknál tehát α(m) állandónak (≤ 4) tekinthet ˝o.
Tétel. Ha az élek rendezésével kapcsolatos teend ˝ok O(e) id ˝oben
megoldhatók, akkor a Kruskal-algoritmus O(eα(e)) id ˝oben megvalósítható.
Manipuláció a súlyokkal =⇒ Yao (1975): O(e log log n)
Véletlen módszerek =⇒ D. R. Karger, P. N. Klein, R. E. Tarjan, (1994):
várhatóan O(e)
On-line változatban is m ˝uködik a piros-kék algoritmus: színezzük az új élet élet kékre; ha emiatt kialakul egy kék kör, akkor abból töröljünk egy maximális súlyú élet.
JAVA animáció: Kruskal
Maximális párosítás páros gráfokban
Definíció. A G = (V, E) gráfot párosnak nevezzük, ha V csúcshalmaza felosztható két diszjunkt részre – V1-re és V2-re – úgy, hogy minden él ezen két halmaz között fut, vagyis (x, y) ∈ E esetén x ∈ V1 és y ∈ V2 vagy
fordítva.
két halmaz között fut, vagyis (x, y) ∈ E esetén x ∈ V1 és y ∈ V2 vagy fordítva.
Definíció. Legyen G = (V, E) egy tetsz ˝oleges gráf. Az E élhalmaz E0 ⊆ E részhalmaza G egy párosítása, ha a G0 = (V, E0) gráfban minden pont foka legfeljebb egy.
Maximális párosítás páros gráfokban
Definíció. A G = (V, E) gráfot párosnak nevezzük, ha V csúcshalmaza felosztható két diszjunkt részre – V1-re és V2-re – úgy, hogy minden él ezen két halmaz között fut, vagyis (x, y) ∈ E esetén x ∈ V1 és y ∈ V2 vagy
fordítva.
Definíció. Legyen G = (V, E) egy tetsz ˝oleges gráf. Az E élhalmaz E0 ⊆ E részhalmaza G egy párosítása, ha a G0 = (V, E0) gráfban minden pont foka legfeljebb egy.
Definíció. A G gráf egy E0 párosítása maximális, ha G minden E00 párosítására |E00| ≤ |E0|.
két halmaz között fut, vagyis (x, y) ∈ E esetén x ∈ V1 és y ∈ V2 vagy fordítva.
Definíció. Legyen G = (V, E) egy tetsz ˝oleges gráf. Az E élhalmaz E0 ⊆ E részhalmaza G egy párosítása, ha a G0 = (V, E0) gráfban minden pont foka legfeljebb egy.
Definíció. A G gráf egy E0 párosítása maximális, ha G minden E00 párosítására |E00| ≤ |E0|.
A probléma: Adott egy G = (V1, V2; E) páros gráf. Határozzuk meg G egy maximális párosítását.
Maximális párosítás páros gráfokban
Definíció. A G = (V, E) gráfot párosnak nevezzük, ha V csúcshalmaza felosztható két diszjunkt részre – V1-re és V2-re – úgy, hogy minden él ezen két halmaz között fut, vagyis (x, y) ∈ E esetén x ∈ V1 és y ∈ V2 vagy
fordítva.
Definíció. Legyen G = (V, E) egy tetsz ˝oleges gráf. Az E élhalmaz E0 ⊆ E részhalmaza G egy párosítása, ha a G0 = (V, E0) gráfban minden pont foka legfeljebb egy.
Definíció. A G gráf egy E0 párosítása maximális, ha G minden E00 párosítására |E00| ≤ |E0|.
A probléma: Adott egy G = (V1, V2; E) páros gráf. Határozzuk meg G egy maximális párosítását.
Definíció. Legyen G egy tetsz ˝oleges gráf, és E0 a G egy párosítása. Egy
G-beli utat E0-alternáló útnak hívunk, ha felváltva tartalmaz párosított és nem párosított éleket.
két halmaz között fut, vagyis (x, y) ∈ E esetén x ∈ V1 és y ∈ V2 vagy fordítva.
Definíció. Legyen G = (V, E) egy tetsz ˝oleges gráf. Az E élhalmaz E0 ⊆ E részhalmaza G egy párosítása, ha a G0 = (V, E0) gráfban minden pont foka legfeljebb egy.
Definíció. A G gráf egy E0 párosítása maximális, ha G minden E00 párosítására |E00| ≤ |E0|.
A probléma: Adott egy G = (V1, V2; E) páros gráf. Határozzuk meg G egy maximális párosítását.
Definíció. Legyen G egy tetsz ˝oleges gráf, és E0 a G egy párosítása. Egy
G-beli utat E0-alternáló útnak hívunk, ha felváltva tartalmaz párosított és nem párosított éleket.
Definíció. Legyen E0 a G = (V, E) gráf egy párosítása. Ekkor egy olyan
E0-alternáló út, melynek mindkét végpontja párosítatlan, E0-re nézve javító út, vagy röviden E0-javító út.
Tétel. Legyen G = (V, E) egy tetsz ˝oleges gráf és E0 egy párosítása. Ha E0-re nézve nincs javító út G-ben, akkor E0 a G egy maximális párosítása.
u v
w v X
t w
A M
A
v X u
v u
Tétel. Legyen G = (V, E) egy tetsz ˝oleges gráf és E0 egy párosítása. Ha E0-re nézve nincs javító út G-ben, akkor E0 a G egy maximális párosítása.
B B
u X
0v
0w v X
t w
0A M
A
v X u X
0u
0v
0Hogyan keressünk javító utat?
...
Javító út keresése alternáló erd ˝ o építésével
0. szint: V1 azon pontjai, melyeket E0 nem fed le, vagyis a párosítatlan pontok.
...
2k − 1. szint: V2 azon még fel nem vett pontjai, melyek egy párosítatlan, azaz egy E \ E0-beli éllel elérhet ˝ok egy 2k − 2. szintbeli pontból; ezen éllel együtt.
...
2k − 1. szint: V2 azon még fel nem vett pontjai, melyek egy párosítatlan, azaz egy E \ E0-beli éllel elérhet ˝ok egy 2k − 2. szintbeli pontból; ezen éllel együtt.
2k. szint: V1 azon még fel nem vett pontjai, melyek egy párosított, azaz egy E0-beli éllel elérhet ˝ok egy 2k − 1. szintbeli pontból; ezen éllel együtt.
...
Javító út keresése alternáló erd ˝ o építésével
0. szint: V1 azon pontjai, melyeket E0 nem fed le, vagyis a párosítatlan pontok.
...
2k − 1. szint: V2 azon még fel nem vett pontjai, melyek egy párosítatlan, azaz egy E \ E0-beli éllel elérhet ˝ok egy 2k − 2. szintbeli pontból; ezen éllel együtt.
2k. szint: V1 azon még fel nem vett pontjai, melyek egy párosított, azaz egy E0-beli éllel elérhet ˝ok egy 2k − 1. szintbeli pontból; ezen éllel együtt.
...
Tétel. A G = (V1, V2; E) páros gráfban akkor és csak akkor van az E0
párosításra nézve javító út, ha az E0-hez tartozó alternáló erd ˝oben valamelyik páratlan szinten megjelenik egy párosítatlan pont.
Bizonyítás: Ha találtunk páratlan szinten párosítatlan utat, akkor a gyökér felé vezet ˝o út javító út
√
vezet ˝o út javító út
√
Fordítva:
Megmutatjuk, hogy a V1 párosítatlan csúcsaiból (ezek vannak az erd ˝oben a nulladik szinten) alternáló úton elérhet ˝o pontok mindegyikét beválasztjuk valamikor az alternáló erd ˝obe.
Tétel. A G = (V1, V2; E) páros gráfban akkor és csak akkor van az E0
párosításra nézve javító út, ha az E0-hez tartozó alternáló erd ˝oben valamelyik páratlan szinten megjelenik egy párosítatlan pont.
Bizonyítás: Ha találtunk páratlan szinten párosítatlan utat, akkor a gyökér felé vezet ˝o út javító út
√
Fordítva:
Megmutatjuk, hogy a V1 párosítatlan csúcsaiból (ezek vannak az erd ˝oben a nulladik szinten) alternáló úton elérhet ˝o pontok mindegyikét beválasztjuk valamikor az alternáló erd ˝obe.
Tegyük fel, hogy v0, v1, . . . , vk egy alternáló út, és v0 ∈ V1 egy párosítatlan csúcs; i szerinti indukcióval megmutatjuk, hogy vi bekerül az erd ˝obe.
Ha i = 0
√
vezet ˝o út javító út
√
Fordítva:
Megmutatjuk, hogy a V1 párosítatlan csúcsaiból (ezek vannak az erd ˝oben a nulladik szinten) alternáló úton elérhet ˝o pontok mindegyikét beválasztjuk valamikor az alternáló erd ˝obe.
Tegyük fel, hogy v0, v1, . . . , vk egy alternáló út, és v0 ∈ V1 egy párosítatlan csúcs; i szerinti indukcióval megmutatjuk, hogy vi bekerül az erd ˝obe.
Ha i = 0
√
Az út v2j csúcsa V1-ben van és a (v2j, v2j+1) él párosítatlan. =⇒ ha v2j-t beválasztottuk, akkor v2j+1 is bekerül
Tétel. A G = (V1, V2; E) páros gráfban akkor és csak akkor van az E0
párosításra nézve javító út, ha az E0-hez tartozó alternáló erd ˝oben valamelyik páratlan szinten megjelenik egy párosítatlan pont.
Bizonyítás: Ha találtunk páratlan szinten párosítatlan utat, akkor a gyökér felé vezet ˝o út javító út
√
Fordítva:
Megmutatjuk, hogy a V1 párosítatlan csúcsaiból (ezek vannak az erd ˝oben a nulladik szinten) alternáló úton elérhet ˝o pontok mindegyikét beválasztjuk valamikor az alternáló erd ˝obe.
Tegyük fel, hogy v0, v1, . . . , vk egy alternáló út, és v0 ∈ V1 egy párosítatlan csúcs; i szerinti indukcióval megmutatjuk, hogy vi bekerül az erd ˝obe.
Ha i = 0
√
Az út v2j csúcsa V1-ben van és a (v2j, v2j+1) él párosítatlan. =⇒ ha v2j-t beválasztottuk, akkor v2j+1 is bekerül
Az út v2j−1 csúcsa V2-ben van és (v2j−1, v2j) ∈ E0. Így v2j−1 után v2j is sorra kerül, ha korábban ez még nem történt meg.
Tegyük fel, hogy G-ben a v és w csúcsok egy javító út végpontjai.
v ∈ V1 párosítatlan =⇒ w ∈ V2
Tegyük fel, hogy G-ben a v és w csúcsok egy javító út végpontjai.
v ∈ V1 párosítatlan =⇒ w ∈ V2
w elérhet ˝o alternáló úton v-b ˝ol =⇒ valamikor beválasztjuk
De V2-beli csúcsokat csak páratlan szintekre veszünk fel =⇒ w is itt lesz Lépésszám: Alternáló erd ˝o építése: O(e), össze lépésszám: O(ne)
Lépésszám: Alternáló erd ˝o építése: O(e), össze lépésszám: O(ne) Karp (1973): O(e√
n)
Maximális folyamok hálózatokban
JAVA animáció: Ford-Fulkerson algoritmus
Ha minden kapacitás egész és a maximális folyam értéke f, akkor legfeljebb f javítással megkapjuk a maximális folyamot.
s (1) t
a a
b
(10
10) (10
10)
(10
10) (10
10)
Maximális folyamok hálózatokban
JAVA animáció: Ford-Fulkerson algoritmus
Ha minden kapacitás egész és a maximális folyam értéke f, akkor legfeljebb f javítással megkapjuk a maximális folyamot.
s (1) t
a a
b
(10
10) (10
10)
(10
10) (10
10)
s 1(1) t a
a
b 1(10
10)
1(10
10) 0(10
10)
0(10
10)
Ha minden kapacitás egész és a maximális folyam értéke f, akkor legfeljebb f javítással megkapjuk a maximális folyamot.
s (1) t
a a
b
(10
10) (10
10)
(10
10) (10
10)
s 1(1) t a
a
b 1(10
10)
1(10
10) 0(10
10)
0(10
10)
s t
a a
b 1(10
10)
1(10
10) 1(10
10)
1(10
10) 0(1)
Ha az élkapacitások racionális számok =⇒ véges lépés
Maximális folyamok hálózatokban
JAVA animáció: Ford-Fulkerson algoritmus
Ha minden kapacitás egész és a maximális folyam értéke f, akkor legfeljebb f javítással megkapjuk a maximális folyamot.
s (1) t
a a
b
(10
10) (10
10)
(10
10) (10
10)
s 1(1) t a
a
b 1(10
10)
1(10
10) 0(10
10)
0(10
10)
s t
a a
b 1(10
10)
1(10
10) 1(10
10)
1(10
10) 0(1)
Ha az élkapacitások racionális számok =⇒ véges lépés
Ha irracionális kapacitásokat is megengedünk =⇒ lehet, hogy nem ér véget véges sok lépésben, s ˝ot lehet, hogy nem is jó értékhez konvergál
Edmonds–Karp algoritmus
A folyam növelésére mindig a legrövidebb – vagyis a legkevesebb élb ˝ol álló – növel ˝o utak egyikét válasszuk.
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
Edmonds–Karp algoritmus
A folyam növelésére mindig a legrövidebb – vagyis a legkevesebb élb ˝ol álló – növel ˝o utak egyikét válasszuk.
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
(1) Egy él legfeljebb egy réteggel mehet el ˝ore.
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
(1) Egy él legfeljebb egy réteggel mehet el ˝ore.
A Gf egy x → y élét nevezzük vastagnak, ha D[y] = D[x] + 1.
(2) Az l hosszúságú s t utak csupa vastag élb ˝ol állnak, és nincs l-nél rövidebb s t út.
Edmonds–Karp algoritmus
A folyam növelésére mindig a legrövidebb – vagyis a legkevesebb élb ˝ol álló – növel ˝o utak egyikét válasszuk.
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
(1) Egy él legfeljebb egy réteggel mehet el ˝ore.
A Gf egy x → y élét nevezzük vastagnak, ha D[y] = D[x] + 1.
(2) Az l hosszúságú s t utak csupa vastag élb ˝ol állnak, és nincs l-nél rövidebb s t út.
⇐= Legrövidebb útnak muszáj mindig feljebb menni Mi történik, ha javítunk π mentén?
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
(1) Egy él legfeljebb egy réteggel mehet el ˝ore.
A Gf egy x → y élét nevezzük vastagnak, ha D[y] = D[x] + 1.
(2) Az l hosszúságú s t utak csupa vastag élb ˝ol állnak, és nincs l-nél rövidebb s t út.
⇐= Legrövidebb útnak muszáj mindig feljebb menni Mi történik, ha javítunk π mentén?
Legalább egy él telít ˝odik és elt ˝unik a javító gráfból.
Edmonds–Karp algoritmus
A folyam növelésére mindig a legrövidebb – vagyis a legkevesebb élb ˝ol álló – növel ˝o utak egyikét válasszuk.
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
(1) Egy él legfeljebb egy réteggel mehet el ˝ore.
A Gf egy x → y élét nevezzük vastagnak, ha D[y] = D[x] + 1.
(2) Az l hosszúságú s t utak csupa vastag élb ˝ol állnak, és nincs l-nél rövidebb s t út.
⇐= Legrövidebb útnak muszáj mindig feljebb menni Mi történik, ha javítunk π mentén?
Legalább egy él telít ˝odik és elt ˝unik a javító gráfból.
Legfeljebb l darab új él jelenik meg a Gf0-ben (π élei ellenkez ˝o irányítással, ha eddig még 0 folyt át rajtuk).
Tekintsük a Gf javító gráfot; legyen benne π egy legrövidebb növel ˝o út.
Ennek hosszát (élszámát) jelölje l.
Szélességi kereséssel osszuk szintekre =⇒ D[v]
(1) Egy él legfeljebb egy réteggel mehet el ˝ore.
A Gf egy x → y élét nevezzük vastagnak, ha D[y] = D[x] + 1.
(2) Az l hosszúságú s t utak csupa vastag élb ˝ol állnak, és nincs l-nél rövidebb s t út.
⇐= Legrövidebb útnak muszáj mindig feljebb menni Mi történik, ha javítunk π mentén?
Legalább egy él telít ˝odik és elt ˝unik a javító gráfból.
Legfeljebb l darab új él jelenik meg a Gf0-ben (π élei ellenkez ˝o irányítással, ha eddig még 0 folyt át rajtuk).
=⇒ a következ ˝o növel ˝o út sem lehet rövidebb l-nél.
Hányszor adódhat egymás után l hosszú növel ˝o út?
Hányszor adódhat egymás után l hosszú növel ˝o út?
Minden javítás után eggyel kevesebb vastag él lesz (legalább egy kritikus él törl ˝odik).
Addig lesz l élb ˝ol álló növel ˝o út, amíg marad vastag élekb ˝ol álló s t út.
Tétel. Az Edmonds–Karp-heurisztika szerinti növelésnél a növel ˝o utak hosszai nem csökken ˝o sorozatot alkotnak. Ebben a sorozatban egy adott úthosszúság legfeljebb e-szer fordulhat el ˝o. Következésképpen legfeljebb e(n − 1) növelés lehetséges. A heurisztika alkalmazásával O(e2n) elemi lépésben kapunk maximális folyamot.
Hányszor adódhat egymás után l hosszú növel ˝o út?
Minden javítás után eggyel kevesebb vastag él lesz (legalább egy kritikus él törl ˝odik).
Addig lesz l élb ˝ol álló növel ˝o út, amíg marad vastag élekb ˝ol álló s t út.
Tétel. Az Edmonds–Karp-heurisztika szerinti növelésnél a növel ˝o utak hosszai nem csökken ˝o sorozatot alkotnak. Ebben a sorozatban egy adott úthosszúság legfeljebb e-szer fordulhat el ˝o. Következésképpen legfeljebb e(n − 1) növelés lehetséges. A heurisztika alkalmazásával O(e2n) elemi lépésben kapunk maximális folyamot.
Bonyolultabb algoritmusok Dinic: O(en2)
Tétel. Az Edmonds–Karp-heurisztika szerinti növelésnél a növel ˝o utak hosszai nem csökken ˝o sorozatot alkotnak. Ebben a sorozatban egy adott úthosszúság legfeljebb e-szer fordulhat el ˝o. Következésképpen legfeljebb e(n − 1) növelés lehetséges. A heurisztika alkalmazásával O(e2n) elemi lépésben kapunk maximális folyamot.
Bonyolultabb algoritmusok Dinic: O(en2)
Goldberg, Tarjan: O(en log(n2/e))
Hálózatok alsó korlátokkal
Tegyük fel, hogy a c(u, v) kapacitások mellett (fels ˝o korlát) alsó korlátok is vannak az f(u, v) mennyiségekre. =⇒ k(u, v) ≤ f(u, v) is teljesüljön a G minden u → v élére.
minden u → v élére.
=⇒ (G, s, t, c, k)
Hálózatok alsó korlátokkal
Tegyük fel, hogy a c(u, v) kapacitások mellett (fels ˝o korlát) alsó korlátok is vannak az f(u, v) mennyiségekre. =⇒ k(u, v) ≤ f(u, v) is teljesüljön a G minden u → v élére.
=⇒ (G, s, t, c, k)
Van-e egyátalán ilyen folyam?
minden u → v élére.
=⇒ (G, s, t, c, k)
Van-e egyátalán ilyen folyam?
s 0, 1 2, 3 t
Hálózatok alsó korlátokkal
Tegyük fel, hogy a c(u, v) kapacitások mellett (fels ˝o korlát) alsó korlátok is vannak az f(u, v) mennyiségekre. =⇒ k(u, v) ≤ f(u, v) is teljesüljön a G minden u → v élére.
=⇒ (G, s, t, c, k)
Van-e egyátalán ilyen folyam?
s 0, 1 2, 3 t
Belátjuk, hogy ez a hagyományos folyamproblémára visszavezethet ˝o.
H = (G, s, t, c, k) → H0
• Új forrás: S, új nyel ˝o: T
• Régi éleken új kapacitás: c (u, v) := c(u, v) − k(u, v)
H = (G, s, t, c, k) → H0
• Új forrás: S, új nyel ˝o: T
• Régi éleken új kapacitás: c0(u, v) := c(u, v) − k(u, v)
• 2 új él minden pontra: S → v és v → T c0(S, v) := P
(u,v)∈E k(u, v) és c0(v, T ) := P
(v,w)∈E k(v, w)
• Régi éleken új kapacitás: c (u, v) := c(u, v) − k(u, v)
• 2 új él minden pontra: S → v és v → T c0(S, v) := P
(u,v)∈E k(u, v) és c0(v, T ) := P
(v,w)∈E k(v, w)
• Új T → S él ∞ kapacitással
t s
s 1, 3 2, 3 0 1 2 1 t
2
1
2 0
S
T
∞
Tétel. A H = (G, s, t, c, k) hálózatban akkor és csak akkor létezik folyam, ha a H0 hálózat (S-b ˝ol T-be men ˝o) maximális folyamának az értéke
P
(u,v)∈E k(u, v).
hogy van-e legfeljebb d érték ˝u folyam
Tétel. A H = (G, s, t, c, k) hálózatban akkor és csak akkor létezik folyam, ha a H0 hálózat (S-b ˝ol T-be men ˝o) maximális folyamának az értéke
P
(u,v)∈E k(u, v).
Ha a T → S él kapacitást d-nek választjuk =⇒ ugyanígy megkaphatjuk, hogy van-e legfeljebb d érték ˝u folyam
=⇒ algoritmus alsó korlátos folyamokra
üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Egy ütemezési feladat
Tegyük fel, hogy egy légitársaság a J1, J2, . . . , Jm járatokat szeretné üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
Ha Ji, Jj-re a válasz igenl ˝o, akkor azt mondjuk, hogy Jj követheti Ji-t.
Egy ütemezési feladat
Tegyük fel, hogy egy légitársaság a J1, J2, . . . , Jm járatokat szeretné üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
Ha Ji, Jj-re a válasz igenl ˝o, akkor azt mondjuk, hogy Jj követheti Ji-t.
Gráf:
Egy Ji légijáratnak =⇒ két csúcs, i és i0 és egy i → i0 él
üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
Ha Ji, Jj-re a válasz igenl ˝o, akkor azt mondjuk, hogy Jj követheti Ji-t.
Gráf:
Egy Ji légijáratnak =⇒ két csúcs, i és i0 és egy i → i0 él
Ha Jj követheti Ji-t, akkor vezessünk irányított élet i0-b ˝ol j-be.
Egy ütemezési feladat
Tegyük fel, hogy egy légitársaság a J1, J2, . . . , Jm járatokat szeretné üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
Ha Ji, Jj-re a válasz igenl ˝o, akkor azt mondjuk, hogy Jj követheti Ji-t.
Gráf:
Egy Ji légijáratnak =⇒ két csúcs, i és i0 és egy i → i0 él
Ha Jj követheti Ji-t, akkor vezessünk irányított élet i0-b ˝ol j-be.
Vegyünk még fel egy s forrást és egy t nyel ˝ot, és adjuk a hálózathoz az s → i és i0 → t éleket (1 ≤ i ≤ m).
üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
Ha Ji, Jj-re a válasz igenl ˝o, akkor azt mondjuk, hogy Jj követheti Ji-t.
Gráf:
Egy Ji légijáratnak =⇒ két csúcs, i és i0 és egy i → i0 él
Ha Jj követheti Ji-t, akkor vezessünk irányított élet i0-b ˝ol j-be.
Vegyünk még fel egy s forrást és egy t nyel ˝ot, és adjuk a hálózathoz az s → i és i0 → t éleket (1 ≤ i ≤ m).
Az összes él kapacitása legyen 1. Az i → i0 alakú élek alsó korlátja legyen 1, a többi élé pedig 0.
Egy ütemezési feladat
Tegyük fel, hogy egy légitársaság a J1, J2, . . . , Jm járatokat szeretné üzemeltetni, és d darab azonos típusú repül ˝ogépe van erre a célra.
Minden Ji, Jj járatpárra ismert, hogy van-e elég id ˝o arra, hogy a Ji teljesítése után egy gép felkészüljön a Jj repülésére.
Ha Ji, Jj-re a válasz igenl ˝o, akkor azt mondjuk, hogy Jj követheti Ji-t.
Gráf:
Egy Ji légijáratnak =⇒ két csúcs, i és i0 és egy i → i0 él
Ha Jj követheti Ji-t, akkor vezessünk irányított élet i0-b ˝ol j-be.
Vegyünk még fel egy s forrást és egy t nyel ˝ot, és adjuk a hálózathoz az s → i és i0 → t éleket (1 ≤ i ≤ m).
Az összes él kapacitása legyen 1. Az i → i0 alakú élek alsó korlátja legyen 1, a többi élé pedig 0.
Tétel. A J1, J2, . . . , Jm járatok akkor és csak akkor teljesíthet ˝ok legfeljebb d géppel, ha a hálózathoz van olyan g folyam, amelyre |g| ≤ d.
J
2J
10, 1 0, 1
0, 1
0, 1 0, 1
0, 1
1, 1
1, 1 1, 1
S T
J
5Hirdetmények
Hirdetmények
Április 1. =⇒ Húsvét hétf ˝o =⇒ elmarad az el ˝oadás
Április 8. =⇒ El ˝oadás helyett konzultáció
Április 8. =⇒ El ˝oadás helyett konzultáció
ZH Április 8. 16:15 A–He CH. max.
Hi–Ka I.B. 27 Ke–M I.B. 28 N-Se E.I.B.
Si-Z St. nagy