• Nem Talált Eredményt

Algoritmuselmélet 11. el ˝oadás

N/A
N/A
Protected

Academic year: 2022

Ossza meg "Algoritmuselmélet 11. el ˝oadás"

Copied!
22
0
0

Teljes szövegt

(1)

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.

(2)

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.

(3)

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.

Kell: UNIÓ, HOLVAN

(4)

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))

(5)

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

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.

(6)

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)

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).

(7)

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)).

(8)

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.

JAVA animáció: Kruskal

(9)

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.

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.

(10)

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

0

v

0

w v X

t w

0

A M

A

v X u X

0

u

0

v

0

Hogyan keressünk javító utat?

(11)

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.

...

(12)

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 v2j1 csúcsa V2-ben van és (v2j1, v2j) ∈ E0. Így v2j1 után v2j is sorra kerül, ha korábban ez még nem történt meg.

(13)

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)

Karp (1973): O(e√ n)

(14)

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

(15)

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).

=⇒ a következ ˝o növel ˝o út sem lehet rövidebb l-nél.

(16)

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)

Goldberg, Tarjan: O(en log(n2/e))

(17)

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.

(18)

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)

• Új T → S él ∞ kapacitással

t s

s 1, 3 2, 3 0 1 2 1 t

2

1

2 0

S

T

(19)

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

(20)

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.

(21)

J

3

J

2

J

1

0, 1

0, 1

0, 1

0, 1 0, 1

0, 1

0, 1

0, 1 0, 1 0, 1

0, 1 0, 1

0, 1

0, 1

1, 1 1, 1

1, 1 1, 1

1, 1

S T

J

4

J

5

(22)

Hirdetmények

Április 1. =⇒ Húsvét hétf ˝o =⇒ elmarad az el ˝oadás

Á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

Hivatkozások

KAPCSOLÓDÓ DOKUMENTUMOK

Az egyes rovatok elnevezése gyakran változott, ezért a feldolgozásnál a könnyebb kereshetőség érdekében a hasonló témájú rovatokat egyesítettük: Film/színház/művészet

Ez a színezés takaros, ha van G-nek olyan minimális költség ˝u feszít ˝ofája, ami az összes kék élet tartalmazza, és egyetlen piros élet sem tartalmaz... Ezután egy

Munkanélküli ráták az ILO-OECD meghatározás szerint (kék), és akkor, ha minden dolgozni akaró, de állást nem kereső személyt munkanélkülinek tekintünk (kék+piros)

Ha egy ilyen nyelvr ˝ol kiderülne, hogy P-beli (coNP-beli), akkor ugyanez igaz lenne minden NP-beli nyelvre.. Van-e

Bizonyítás: ⇒ : Ha G nem DAG, akkor nem lehet topologikus rendezése, mert egy irányított kör csúcsainak nyilván nincs megfelel ˝o sorrendje.... Egy irányított gráfnak akkor

Elvégezhet ˝o pusztán az egybet ˝us szavak kódjainak, valamint a kódok képzési szabályának ismeretében, nem kell tárolni S -et.... EL ˝

A billenty ˝uk száma véges = ⇒ ezen számok halmaza is véges = ⇒ Van tehát egy legkisebb természetes szám, amit nem lehet definiálni a fenti módon... EL ˝

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,