Gráfok, definíciók. Minden irányítatlan G = (V,E) gráf olyan irányított gráfnak tekinthető, amelyre teljesül, hogy

Hasonló dokumentumok
Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Gráfok, definíciók. Gráfok ábrázolása. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Ábrázolások. Példa:

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Melykeres(G) for(u in V) {szin(u):=feher Apa(u):=0} for(u in V) {if szin(u)=feher then MBejar(u)}

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

10. Gráf absztrakt adattípus, gráfok ábrázolása

Elmaradó óra. Az F = (V,T) gráf minimális feszitőfája G-nek, ha. F feszitőfája G-nek, és. C(T) minimális

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra:

Algoritmuselmélet. Mélységi keresés és alkalmazásai. Katona Gyula Y.

Gráfalgoritmusok ismétlés ősz

Algoritmuselmélet. Gráfok megadása, szélességi bejárás, összefüggőség, párosítás. Katona Gyula Y.

Gráfok 2. Legrövidebb utak, feszítőfák. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Neumann János Tehetséggondozó Program Gráfalgoritmusok II.

Algoritmuselmélet. Legrövidebb utak, Bellmann-Ford, Dijkstra. Katona Gyula Y.

30. ERŐSEN ÜSSZEFÜGGŐ KOMPONENSEK

5/1. tétel: Optimalis feszítőfák, Prim és Kruskal algorithmusa. Legrövidebb utak graphokban, negatív súlyú élek, Dijkstra és Bellman Ford algorithmus.

26. MINIMÁLIS KÖLTSÉGŰ UTAK MINDEN CSÚCSPÁRRA

Algoritmusok bonyolultsága

Algoritmuselmélet 7. előadás

Diszkrét matematika 2.C szakirány

Diszkrét matematika 2.C szakirány

Algoritmusok és adatszerkezetek 2.

A számítástudomány alapjai

Diszkrét matematika 2. estis képzés

Diszkrét matematika 2. estis képzés

Gráfelméleti feladatok. c f

Algoritmuselmélet 11. előadás

Gráfelmélet jegyzet 2. előadás

Diszkrét matematika 2.

Gráf-algoritmusok Legrövidebb utak

Diszkrét matematika 2.C szakirány

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

Általános algoritmustervezési módszerek

Gráfok 1. Tárolási módok, bejárások. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor

Adatszerkezetek II. 2. előadás

bármely másikra el lehessen jutni. A vállalat tudja, hogy tetszőlegesen adott

Diszkrét matematika 1. estis képzés

Gráfok bejárása. Szlávi Péter, Zsakó László: Gráfok II :17

Gráfelmélet. I. Előadás jegyzet (2010.szeptember 9.) 1.A gráf fogalma

Diszkrét matematika 2.

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

22. GRÁFOK ÁBRÁZOLÁSA

A félév során előkerülő témakörök

Gráfok. Programozás II. előadás. Szénási Sándor.

Diszkrét matematika 2. estis képzés

... fi. ... fk. 6. Fabejáró algoritmusok Rekurzív preorder bejárás (elsőfiú-testvér ábrázolásra)

Diszkrét matematika 2. estis képzés

Algoritmuselmélet. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem. 13.

Euler tétel következménye 1:ha G összefüggő síkgráf és legalább 3 pontja van, akkor: e 3

Diszkrét matematika 2.C szakirány

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Ugrólisták. RSL Insert Example. insert(22) with 3 flips. Runtime?

Egyesíthető prioritási sor

Az optimális megoldást adó algoritmusok

23. SZÉLESSÉGI BEJÁRÁS

Diszkrét matematika 1. estis képzés

GRÁFELMÉLET. 7. előadás. Javító utak, javító utak keresése, Edmonds-algoritmus

Gráfalgoritmusok: összefüggőség, párosítás páros gráfban

Adatszerkezetek II. 3. előadás

Adatszerkezetek II. 1. előadás

2: Minimális feszítőfák, legrövidebb utak. HálózatokII, 2007

Programozási módszertan. Mohó algoritmusok

Az R halmazt a valós számok halmazának nevezzük, ha teljesíti az alábbi 3 axiómacsoport axiómáit.

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

A gráffogalom fejlődése

1. ábra. Egy rekurzív preorder bejárás. Egy másik rekurzív preorder bejárás

A DFS algoritmus. Összeállította: Szeszlér Dávid, c BME Számítástudományi és Információelméleti Tanszék, 2015, 2016.

24. MINIMÁLIS KÖLTSÉGŰ UTAK I.

Amortizációs költségelemzés

1: Bevezetés: Internet, rétegmodell Alapok: aszimptótika, gráfok. HálózatokII, 2007

Sapientia - Erdélyi Magyar TudományEgyetem (EMTE) Csíkszereda IRT- 4. kurzus. 3. Előadás: A mohó algoritmus


Számláló rendezés. Példa

Más szavakkal formálisan:, ahol olyan egész szám, hogy. Más szavakkal formálisan:, ahol olyan egész szám, hogy.

Algoritmuselmélet 18. előadás

Diszkrét matematika 2.C szakirány

Dijkstra algoritmusa

III. Gráfok. 1. Irányítatlan gráfok:

Gráfelméleti alapfogalmak

Diszkrét matematika 2.C szakirány

A számítástudomány alapjai. Katona Gyula Y. Számítástudományi és Információelméleti Tanszék Budapesti Műszaki és Gazdaságtudományi Egyetem

Fibonacci számok. Dinamikus programozással

Dinamikus programozás - Szerelőszalag ütemezése

Mohó algoritmusok. Példa:

Algoritmuselmélet 2. előadás

Diszkrét matematika 2 (C) vizsgaanyag, 2012 tavasz

Számítógép hálózatok, osztott rendszerek 2009

Gyakorlatok. P (n) = P (n 1) + 2P (n 2) + P (n 3) ha n 4, (utolsó lépésként l, hl, u, hu-t léphetünk).

Algoritmuselmélet 1. előadás

Diszkrét matematika 2. estis képzés

Diszkrét matematika I.

Gráfalgoritmusok és hatékony adatszerkezetek szemléltetése

17. előadás: Vektorok a térben

KOVÁCS BÉLA, MATEMATIKA I.

Megoldás meghatározása Ez a szakasz kitölti a c és S táblázatokat, a kiíratás S alapján egy rekurzív algoritmussal megtehető.

út hosszát. Ha a két várost nem köti össze út, akkor legyen c ij = W, ahol W már az előzőekben is alkalmazott megfelelően nagy szám.

Algoritmuselmélet. Bonyolultságelmélet. Katona Gyula Y.

Totális Unimodularitás és LP dualitás. Tapolcai János

Átírás:

Gráfok, definíciók Irányítatlan gráf: G = (V,E), ahol E rendezetlen (a,b),a,b V párok halmaza. Irányított gráf: G = (V,E) E rendezett (a,b) párok halmaza; E V V. Címkézett (súlyozott) gráf: G = (V,E,C) C : E Címke Minden irányítatlan G = (V,E) gráf olyan irányított gráfnak tekinthető, amelyre teljesül, hogy ha (p,q) E akkor (q, p) E. Jelölések: Ki(G, p) = {q V : (p,q) E} Be(G, p) = {q V : (q, p) E} KiFok(G, p) = Ki(G, p) BeFok(G, p) = Be(G, p)

Gráf absztrakt adattípus Értékhalmaz: Gra f = {G = (V,E) : V PontTip,E V V } Műveletek: G : Graf, p, p1, p2 : PontTip, ir:boolean, I : Iterator, {Igaz} Letesit(G,ir) {G = (/0, /0)} {G = G} Megszuntet(G) {Igaz} {G = G} Uresit(G) {G = (/0, /0)} {G = G} Iranyitott(G) {NotIranyitott(G) ((p,q) E) (q, p) E)} {G = G} Pontokszama(G) {= V } {G = G} Elekszama(G) {= E } {G = G} KiFok(G, p) {= KI(G, p) } {G = G} BeFok(G, p) {= Be(G, p) } {G = (V,E)} PontBovit(G, p) {V = Pre(V ) {p} E = Pre(E)} {G = (V,E) p V } PontTorol(G, p) {V = Pre(V ) \ {p} E = Pre(E) \ {(p,q) : q Ki(G, p)} \ {(q, p) : q Be(G, p)}} {G = (V,E), p1, p2 V } ElBovit(G, p1, p2) {E = Pre(E) {(p1, p2)} V = Pre(V )} {G = (V,E), p1, p2 V } ElTorol(G, p1, p2) {E = Pre(E) \ {(p1, p2)} V = Pre(V )}

{G = (V,E), p1, p2 V } Vanel(G, p1, p2) {= (p1, p2) E E = Pre(E) V = Pre(V )} {G = G} PIterator(G, I) {} {G = G} KiEl(G, p) {= {q : VanEl(p,q)}} {G = G} KiIterator(G, p) {} {G = G} ElIterator(G, I) {} Az absztrakt adattípus meg van valósítva JAVA nyelven, megvalósítása a pub konyvtárban megtalálható.

Címkézett Gráf adattípus Értékhalmaz: Gra f = {G = (V,E,C) : V PontTip,E V V,C : E CimkeTip}. Műveletek: Graf-műveletek + G : Graf, P,P1,P2 : PontTip, S : CimkeTip, I : PIterator, {G = (V,E), p1, p2 V } ElBovit(G,p1,p2,s) {E = Pre(E) {(p1, p2)} C(p1, p2) = s} {G = (V,E),(p1, p2) E} ElCimke(G,p1,p2,s) {s = Pre(C)(p1, p2) E = Pre(E)} {G = (V,E),(p1, p2) E} ElCimkez(G,p1,p2,s) {s = C(p1, p2) E = Pre(E)} {G = G} KiCEl(G, p) {= {(q,s) : VanEl(p,q) C(p,q) = s}} {G = G} ElIterator(G, I) {} Ha a CimkeTip típuson alapértelmezett lineáris rendezési reláció, akkor a címkézett gráfot súlyozott gráfnak nevezzük.

Gráfok ábrázolása Szempontok az adatszerkezet megválasztásához. Az adott probléma megoldásához ténylegesen mely műveletek szükségesek. Melyek a releváns műveletek, amelyek alapvetően befolyásolják az algoritmus futási idejét. A tárigény az adott probléma esetén.

Ábrázolások Élhalmazlánc vagy élhalmaztömb: az élek felsorolása. Tárigény: Θ( E ), VANEL időigénye: Θ( E ), El-iteráció időigénye: Θ( E ), Ki-iteráció időigénye: Θ( E ). Kapcsolatmátrix (szomszédsági) mátrix: G[i, j] = 1 ha (i, j) E, címkézett gráf esetén G a címkéket tárolhatja. Tárigény: Θ(n 2 ), ahol V = n, VANEL időigénye: Θ(1), El-iteráció időigénye: Θ(n 2 ), Ki-iteráció időigénye: Θ(n). Statikus éllista: egy n elemű tömb, amelynek az i-dik eleme a Ki(G, i) halmazt tartalmazza láncként. Tárigény: Θ( E + n), VANEL időigénye: O(n), El-iteráció időigénye: Θ( E ), Ki-iteráció időigénye: Θ( Ki(G, i) ).

Példa: 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8 9 2 3 3 5 6 1 7 2 6 8 2 7 8 3 7 1. ábra. Számított gráf Az élek halmazát explicite nem tároljuk, mert van olyan számítási eljárás, amely bármely két p,q V -re kiszámítja VanEl(p,q)-t. Vagy, van olyan számítási eljárás, amely minden p V -re kigenerálja a Ki(G, p) halmaz elemeit.

Alapvető definíciók Legyen G = (V,E) irányított vagy irányítatlan gráf. Definíció p,q V-re egy p-ből q-ba vezető út G-ben, jele: π : p q, olyan π = {p 0, p 1,..., p k } pontsorozat, ahol p i p j, ha i j, p = p 0 és q = p k, továbbá p = q = p 0, vagy ( i {1,...,k})((p i 1, p i ) E) A π = p q út hossza, π = p q = k. Ha G = (V,E,C) élei a C : E R függvénnyel súlyozottak, akkor a p q út hossza p q = k i=1 = C(p i 1, p i ). Definíció p-ből q-ba vezető legrövidebb út hossza, p és q távolsága: δ(p,q) =, ha nincs p q út és Min{ π : π : p q} egyébként. Definíció A p = {p 0, p 1,..., p k } pontsorozatot a p 0 -ból p k -ba vezető sétának nevezzük, ha ( i {1,...,k})(p i 1, p i ) E.

Definíció A G=(V,E) irányított vagy irányítatlan gráfnak az F = ( V,Ē) gráf a r V gyökerű feszítőfája, ha F részgráfja G-nek ( V V,Ē E) és fa. ( p V ) akkor és csak akkor van r p G-ben, ha van r p F-ben. Definíció A G = (V,E) irányított vagy irányítatlan, esetleg súlyozott gráfnak az F = ( V,Ē) gráf a r V gyökerű legrövidebb utak feszítőfája (LUF), ha F r-gyökerű feszítőfája G-nek, és p V -re δ G (r, p) = δ F (r, p).

Szélességi keresés Egy adott súlyozatlan irányított vagy irányítatlan gráf egy pontjából keressük az elérhető pontokat, és az azokhoz vezető legrövidebb utakat. Bemenet: a G = (V,E) gráf és egy kiindulási pont r V. Kimenet: a legrövidebb utak fája, egy Apa függvény által megadva, és egy d függvény, amelyre d(p) = δ(p) minden p V -re. SZELTKERES for(p in V) {Apa(p):=-1 d(p):=inf} d(r):=0 Apa(r):=0 Letesit(S:Sor) Sorba(S,r) While(Elemszam(S)>0) {Sorbol(S,u) for(v in Kiel(G,u)) {if Apa(v)<0 Then {Apa(v):=u d(v):=d(u)+1 Sorba(S,v)}}} Tétel Az algoritmus egy r gyökerű legrövidebb utak feszítőfát ad vissza. Futási idő Az algoritmus futási ideje O(V + E) ha a ki iteráció lineáris idejű (pl éllistás esetben).

Példa Adott egy sziget ahol 42 kaméleon lakik. A kaméleonok három színt vehetnek fel piros, kék és zöld. Ha két különböző színű kaméleon találkozik, akkor megijednek és mindkettő átváltoztatja a színét a harmadik színre. A szigeten a kiindulási időpontban 13,14,15 darab piros zöld és kék kaméleon van. Előfordulhat -e, hogy a szigeten minden kaméleonnak ugyanaz legyen a színe?

1(0,0) 3(2,2) 2(1,1) 6(1,1) 4(1,1) 5(3,3) 2. ábra.

Megoldás: Definiáljunk egy gráfot, a gráf pontjai az (x, y, z) számhármasok, ahol minden komponens nemnegatív egész és x + y + z = 42. Az élek a lehetséges átváltozásoknak felelnek meg. Tehát (x,y,z)-nek három szomszédja lesz (x 1,y 1,z + 2), (x 1,y + 2,z 1), (x + 2,y 1,z 1). A feladat, hogy meghatározzuk van -e a gráfban a (13,14,15) pontból a (42, 0, 0), (0, 42, 0), (0, 0, 42) pontok valamelyikébe út. Ezt megoldhatjuk szélességi kereséssel.

Mélységi keresés Az algoritmus elemzéséhez és egyes alkalmazásainak helyességének bizonyításához hasznos, ha minden pontra definiáljuk a d elérési és f elhagyási idejét. MelykeresBovit(G) for(u in G) {szin(u):=feher Apa(u):=0} ido:=0 for(u in G) {if szin(u)=feher then MBejarBovit(u)} MBejarBovit(u) szin(u):=szurke ido:=ido+1 d(u):=ido for(v in Kiel(G,u)) {if szin(v)=feher Then {Apa(v):=u MBejarBovit(v)}} szin(u):=fekete ido:=ido+1 f(u):=ido

MBejarBovit(1) szín(1):=szürke d(1)=1 Apa(2):=1 MBejarBovit(2) szín(2):=szürke d(2)=2 Apa(3):=2 MBejarBovit(3) szín(3):=szürke d(3)=3 Apa(5):=3 MBejarBovit(5) szín(5):=szürke d(5)=4

8 9 1 2 3 4 5 6 7 3. ábra.

Apa(6):=5 MBejarBovit(6) szín(6):=szürke d(6)=5 Apa(7):=6 MBejarBovit(7) szín(7):=szürke d(7)=6 MBejarBovit(7) vége, mert 5 már nem fehér szín(7):=fekete f(7)=7 MBejarBovit(6) vége szín(6):=fekete f(6)=8 MBejarBovit(5) vége

szín(5):=fekete f(5)=9 MBejarBovit(3) vége szín(3):=fekete f(3)=10 Apa(4):=2 MBejarBovit(4) szín(4):=szürke d(4)=11 MBejarBovit(4) vége szín(4):=fekete f(4)=12 MBejarBovit(2) vége szín(2):=fekete f(2)=13

MBejarBovit(1) vége szín(1):=fekete f(1)=14 MBejarBovit(8) szín(8):=szürke d(8)=15 Apa(9):=8 MBejarBovit(9) szín(9):=szürke d(9)=16 MBejarBovit(9) vége szín(9):=fekete f(9)=17 MBejarBovit(8) vége szín(8):=fekete

f(8)=18 1. táblázat. A keresés során kapott értékek pont 1 2 3 4 5 6 7 8 9 apa 0 1 2 2 3 5 6 0 8 d 1 2 3 11 4 5 6 15 16 f 14 13 10 12 9 8 7 18 17

Az algoritmus egy mélységi feszítő erdőt (MFE) ad eredményül, a csúcshalmaz V az élek pedig F = {(p,q) : Apa(q) = p}. Tétel (Zárójelezési tétel) Mélységi keresést alkalmazva a G = (V,E) gráfra, a következő három feltétel közül pontosan az egyik teljesül minden u és v pontra: A [d(u), f (u)] és [d(v), f (v)] intervallumok diszjunktak és az u és v pontok egyike sem leszármazottja a másiknak a MFE-ben. [d(v), f (v)] [d(u), f (u)] és v leszármazottja u-nak a MFE-ben. [d(u), f (u)] [d(v), f (v)] és u leszármazottja v-nek a MFE-ben. Bizonyítás. Legyen d(u) < d(v). Ha d(v) < f (u), akkor v elérésekor u színe szürke volt, tehát v leszármazottja MFE-ben u-nak. Továbbá, v-t előbb elhagyjuk, mielőtt visszatérnénk u-hoz, tehát f (v) < f (u). Ha d(v) > f (u), akkor d(u) < f (u) < d(v) < f (v), tehát a két intervallum diszjunkt. Ebből következik, hogy mind u, mind v elérésekor a másik nem lehetett szürke, tehát nem leszármazottjai egymásnak MFE-ben.

Következmény. A v pont akkor és csak akkor leszármazottja az u pontnak MFE-ben, ha d(u) < d(v) < f (v) < f (u) Tétel (Fehér út tétel) Minden v pont akkor és csak akkor leszármazottja az u pontnak MFEben, ha a d(u) időben (u elérésekor) van csupa fehér pontokon át haladó u v út G-ben. Bizonyítás Tegyük fel, hogy van u v az MFE-ben. Ekkor ennek tetszőleges w pontjára d(u) < d(w), tehát w fehér a d(u) időben. Tegyük fel, hogy van olyan u = v 1...v k = v út, hogy minden v i fehér a d(u) időben, de v nem lesz leszármazottja u-nak MFE-ben. Feltehetjük, hogy i < k-ra v i leszármazottja lesz u-nak az MFE-ben. Mivel v k 1 leszármazottja u-nak, ezért f (v k 1 ) < f (u). De d(u) < d(v) < f (v k 1 ), így d(u) < d(v) < f (v k 1 ) < f (u), tehát v leszármazottja u-nak MFE-ben.

Élek osztályozása Faél: (u,v) E faél, ha bekerül a MFE élei közé, azaz Apa(v) = u. Visszaél: (u,v) E visszaél, ha u leszármazottja v-nek a MFE-ben. Előreél: (u,v) E előreél, ha v leszármazottja u-nek a MFE-ben és nem faél. Keresztél: Minden más esetben (u,v) E keresztél. Példa az élek osztályozására Faélek: (1, 2), (2, 3), (3, 5), (5, 6), (6, 7), (2, 4), (8, 9) Visszaélek: (5, 2), (7, 5), (9, 8) Előreélek: (1, 3) Keresztélek: (8, 1).

Tulajdonságok (u,v) E akkor és csak akkor faél, ha az (u,v) él vizsgálatakor v színe fehér. (u,v) E akkor és csak akkor visszaél ha az (u,v) él vizsgálatakor v színe szürke. (u,v) E akkor és csak akkor előre-él ha az (u,v) él vizsgálatakor v színe fekete és d(u) < d(v). (u,v) E akkor és csak akkor keresztél ha az (u,v) él vizsgálatakor v színe fekete és d(u) > d(v).

Topologikus rendezés Definíció Egy G =(V,E) irányított gráf topologikus rendezésén a V pontjainak egy olyan v 1,v 2,...,v n (n = V ) felsorolását értjük, amelyre teljesül, hogy minden (u,v) E élre, u előbb van a felsorolásban, mint v. Lemma A G = (V,E) irányított gráfnak akkor és csak akkor van topologikus rendezése, ha G körmentes. Lemma A G = (V,E) irányított gráfban akkor és csak akkor van kör, ha van vissza-éle. Bizonyítás. Tegyük fel, hogy van egy (u, v) visszaél. Ekkor hozzávéve az (u,v) visszaélt az MFE-ben levő v u úthoz, egy kört kapunk G-ben. Tegyük fel, hogy v 1,v 2,...,v k 1,v k = v 1 egy kör, továbbá a kör pontjai közül v 1 -et érjük el először a mélységi bejárás során. Ekkor a d(v 1 ) időben van csupa fehér pontokon át haladó v 1 v k út. A fehér út tétel miatt v k leszármazottja lesz a v 1 -nek a MFE-ben, tehát (v k,v 1 ) visszaél lesz.

Tétel Ha a G irányított gráf körmentes, akkor pontjainak minden olyan v 1,...,v n felsorolása, amelyre f (v i ) > f (v i+1 ), i = 1,...,n 1 G egy topologikus rendezése lesz bármely mélységi bejárással kiszámított f elhagyási függvényre. Bizonyítás Legyen (u, v) E tetszőleges él. Ha d(u) < d(v), azaz u-t előbb érjük el, mint v-t, akkor a fehér út tétel miatt v leszármazottja lesz u-nak a MFE-ben, tehát d(u) < d(v) < f (v) < f (u). Tegyük fel, hogy d(u) > d(v), azaz v-t előbb érjük el, mint u-t. Mivel nincs v u út G-ben, ezért v-t befejezzük, mielőtt u-t elérnénk, tehát f (v) < d(u) < f (u).

Elvi algoritmus A mélységi keresés algoritmusát hajtsuk végre a gráfra. Az egyes csúcsok elhagyásakor beszúrjuk őket egy láncolt lista elejére. A csúcsok láncolt listája adja meg a rendezési sorrendet. Az algoritmus futási ideje megegyezik a mélységi keresésével, azaz θ(v + E). (Feltéve, hogy a ki iteráció lineáris időben megvalósítható.)

Erősen összefüggő komponensek Definíció u v ha van u v út és v u út is a gráfban. Lemma A reláció egy ekvivalencia reláció, így egy osztályozást definiál. Definíció A reláció által definiált osztályozás osztályai a gráf erősen összefüggő komponensei. Azaz egy u pontot tartalmazó erősen összefüggő komponens: C(u) = {v V : u v}. Definíció A G = (V,E) gráf transzponáltja: G T = (V,E T ), ahol E T = {(p,q) : (q, p) E}. Definíció Egy G = (V,E) gráf komponensgráfjának hívjuk azt a gráfot, amelynek csúcsai az erősen összefüggő komponensek, és C komponensből akkor vezet él egy D komponensbe, ha C valamely pontjábol G-ben vezet él D valamely pontjába. Lemma A komponensgráf körmentes.

Elvi algoritmus 1. Számítsuk ki a MELYKERES algoritmussal az f(u) elhagyási értékeket. 2. A G T transzponált gráfra alkalmazzuk a MELYKERES eljárást úgy, hogy a pontokra a MBEJÁR eljárást f szerint csökkenő sorrendben hívjuk. 3. A 2. pontban az egy mélységi feszítőfába kerülő pontok alkotnak egy erősen összefüggő komponenst. Megvalósítás: A 2-es pontban nem rendezést hajtunk végre az f értékek szerint, hanem a pontokat a befejezésük időpontjában berakjuk egy verembe, és abból vesszük a pontokat a második bejárásnál.

Helyesség Terjesszük ki a d és f függvényeket V részhalmazaira, U V : d(u) = min u U {d(u)} f (U) = max u U { f (u)} Lemma Legyen C és C a G = (V,E) irányított gráf két különböző erősen összefüggő komponense. Továbbá, u,v C és u,v C. Ha létezik u u út, akkor nem létezhet v v út. Lemma Legyen C és C a G = (V,E) irányított gráf két különböző erősen összefüggő komponense. Ha létezik olyan (u,v) él, hogy u C és v C, akkor f (C) > f (C ). Bizonyítás. Ha d(c) < d(c ), akkor legyen x C, amelyre d(x) minimális, azaz az elsőnek elért pont C-ben. Ekkor bármely w C pontra a d(x) időben létezik csupa fehér pontokon át haladó x w út. Tehát a fehér út tétel miatt C és C minden pontja leszármazottja lesz x-nek a MFE-ben, amiből adódik az állítás. Ha d(c) > d(c ), akkor legyen y C, amelyre d(y) minimális, azaz az elsőnek elért pont C -ben. Ekkor belőle mindenki elérhető fehér pontokon C -ben, így f (y) = f (C ). Mivel van (u,v) él, ezért nem lehet C egyetlen pontjából sem eljutni C-beli pontba, így y-ból sem. Tehát f (y) időben C minden pontja fehér, tehát f (w) > f (y) minden w C. Következmény Legyen C és C a G=(V,E) irányított gráf két különböző erősen összefüggő komponense. Ha létezik olyan (u,v) G T él, hogy u C és v C, akkor f (C) < f (C ).

Helyesség Tétel Az algoritmus az erősen összefüggő komponenseket adja meg. Bizonyítás Legyenek G erősen összefüggő komponensei C(r 1 ),...,C(r k ), ahol f (r 1 ) > f (r 2 ) > > f (r k ) és f (r i ) = f (C(r i )), i = 1,...,k. Legyen továbbá F(r i ), (i = 1,...,k) a második bejárás során kapott r i -gyökerű mélységi feszítőfa pontjainak halmaza. Ekkor C(r i ) = F(r i ). A bizonyítást i-szerinti indukcióval adható meg. Tegyük fel, hogy az első i-1 komponensre az állítás igaz. Ekkor C(r i 1) bejárása után egy MBe jar(r i ) hívás következik a transzponált gráfban. Mivel f (r i ) = f (C(r i )), ezért a fehér út tétel miatt (G T -ben alkalmazva a második bejárásra) C(r i ) minden pontja bekerül F(r i )- be. Másrészt a fenti következmény miatt minden él, amely C(r i )-ből kivezet, csak olyan C komponensbeli pontba vezethet, amelyre f (C) > f (C(r i )), és ezeket már korábban bejárta az algoritmus.

Legrövidebb utak súlyozott gráfokban A feladat egy súlyozott gráfban egy adott pontból kiinduló legrövidebb utak megkeresése. Az input a súlyozott gráf és a kiindulási s pont. Outputként egy legrövidebb utak fáját adunk vissza, egy Apa függvény által, továbbá a legrövidebb utak hosszait egy d függvény által. A feladatot nemnegatív élsúlyok esetén a következő Dijsktra algoritmussal oldhatjuk meg. A pontokat egy d érték szerinti Q módosítható prioritási sorban tároljuk. Dijskstra algoritmusa Kezd(G,s) for(v in V) {d(v):=inf Apa(v):=0 Kesz(v):=0} d(s):=0

Kozelit(G,u,v,Q) if d(v)>d(u)+c(u,v) then {d(v):=d(u)+c(u,v) Modosit(Q,v) Apa(v):=u} Dijkstra(G,s) Kezd(G,s) Letesit(Q: ModPrisor) for(v in V) SorBa(Q,v) while(elemszam(q)>0) {SorBol(Q,u) Kesz(u):=1 for(v in KiEl(G,u)) {if Kesz(v)=0 then Kozelit(u,v)}}

Példa Hajtsuk végre az 1 pontból a Dijkstra algoritmust az alábbi gráfra. (A mátrixban a c i j érték az (i, j) él hossza, ha nincs él.) 2 1 8 2 1 4 1 5 2 2 1 1 7 1 4 2 7 1 1 4 1 1 4 2 1 Kesz = {1},d(2) = 2,Apa(2) = 1,d(4) = 1,Apa(4) = 1,d(5) = 8,Apa(5) = 1, Kesz = {1,4},d(3) = 5,Apa(3) = 4,d(5) = 3,Apa(5) = 4,d(6) = 8,Apa(6) = 4, Kesz = {1,4,2},d(3) = 3,Apa(3) = 2,d(6) = 6,Apa(6) = 2, Kesz = {1,4,2,3}, Kesz = {1,4,2,3,5}d(6) = 4,Apa(6) = 5,

Tulajdonságok Tegyük fel, hogy a G = (V,E,c) irányított, súlyozott gráfra és s kezdőpontra végrehajtottuk a Kezd eljárást, majd valahány Kozelit műveletet. Ekkor az alábbi összefüggések teljesülnek. Háromszög egyenlőtlenség: ( (u,v) E)(δ(s,v) δ(s,u) + c(u,v)) Bizonyítás A legrövidebb s u utat folytatva az (u, v) éllel egy s v utat kapunk. Felső korlát tulajdonság: d(v) δ(s,v) és ha egyszer d(v) = δ(s,v), akkor ezután mindig teljesül az egyenlőség. Bizonyítás Az egyenlőtlenség a Kozelit lépések száma szerinti indukcióval igazolható, felhasználva a háromszög egyenlőtlenséget. Ha egyszer létrejön az egyenlőség az utána nem változhat, mivel d értéke az eljárás során nem növekedhet, és az egyenlőtlenség miatt nem is csökken tovább. Nincs-út tulajdonság: Ha nincs s v út, akkor mindvégig d(v) = In f teljesül. Bizonyítás A felső korlát tulajdonságból azonnal következik.

Konvergencia tulajdonság: Ha s u v egy legrövidebb út és d(u) = δ(s,u) Kozelit(G,u,v,Q) végrehajtása előtt, akkor Kozelit(G,u,v,Q) után d[v] = δ(s, v). Bizonyítás Kozelit(G,u,v,Q) után d(v) d(u)+c(u,v) = δ(s,u)+c(u,v) = δ(s,v), így a felső korlát tulajdonság alapján egyenlőség kell fennálljon. Út-közelítés tulajdonság: Ha p = {v 0,v 1,...,v k } egy s = v 0 v k legrövidebb út, akkor a (v 0,v 1 ),(v 1,v 2 ),...,(v k 1,v k ) élekre ebben a sorrendben végrehajtott Kozelit eljárások után d(v k ) = δ(s,v k ). Bizonyítás A konvergencia tulajdonságból következik. LUF tulajdonság: Tegyük fel, hogy G nem tartalmaz negatív súlyú éleket és minden v V pontra d[v] = δ(s,v). Ekkor az F = {(Apa(v),v) : v V,Apa(v) 0} élhalmaz G-nek s gyökerű LUF-ja lesz. Bizonyítás: A nincs út tulajdonság alapján a fába pontosan azon pontok kerülnek, amelyek elérhetőek s-ből. Továbbá könnyen látható, hogy minden v pontra az F fában az adott pontba s- ből vezető út hossza d(v), mivel d(v)-t minden esetben a d(apa(v))+c(apa(v),v) érték alapján kapjuk.

Helyesség Tétel A DIJKSTRA algoritmust nemnegatív él-súlyozott irányított G = (V,E,c) gráfra és s kezdőpontra végrehajtva, minden v V pontra teljesül d(v) = δ(s, v). Bizonyítás: Bizonyítás a Kesz halmazba kerülés szerinti indukcióval. Az első pont, amely kikerül a Q prioritási sorból és bekerül Kesz-be az s pont, amire az állítás nyilvánvaló. Legyen u az első pont, amire nem teljesül az állítás, akkor a bekerülésekor a felső korlát tulajdonság miatt d(u) > δ(s,u). Így δ(s,u), tehát van egy legrövidebb út s-ből u-ba. Ezen az úton u bekerülésekor a kezdőpont a Kesz halmazban van, a végpont nincs, így van két olyan egymást követő pont (x,y) hogy x Kesz és y / Kesz. Ekkor x még u előtt került be a Kesz halmazba, így d(x) = δ(s,x). Továbbá x bekerülésekor végrehajtottuk a Kozelit(G, x, y, Q) műveletet, így a konvergencia tulajdonság miatt d(y) = δ(s,y). Minden él súlya nemnegatív, y rajta van az u-ba vezető legrövidebb úton, így δ(s,y) δ(s,u). Továbbá a prioritási sorból u-t hamarabb választjuk ki, mint y-t, így d(u) d(y). Következésképpen azt kaptuk, hogy d(y) = δ(s,y) δ(s,u) < d(u) d(y), ami ellentmondás, így a tételt igazoltuk. Következmény: A tételből a LUF tulajdonság alapján következik az algoritmus helyessége.

Floyd Warshall algoritmus A feladat egy súlyozott gráfban minden pontpárra a legrövidebb utak megkeresése. Az input a súlyozott gráf. Outputként egy mátrixot adunk meg, amely a legrövidebb utakat tartalmazza, továbbá egy segédmátrixot, amely minden pontpárra tartalmazza a legrövidebb út első pontját, így a mátrix alapján a legrövidebb út egyszerűen megkapható. A feladatot dinamikus programozással oldjuk meg. Legyen V = 1...n és c(i, j) =, ha (i, j) / E, legyen G(i, j) = c(i, j) ha i j és G(i,i) = 0, i = 1,...,n. Részproblémákra bontás: i, j {1,...,n}-ra és k {0,1,...,n}-re legyen D k (i, j)=az i-ből j-be vezető olyan utak hosszának minimuma, amelyek legfeljebb az {1,..., k} belső pontokon mennek keresztül. Ekkor D n (i, j) = δ(i, j) és D 0 (i, j) = G(i, j)., Rekurzív összefüggés (k 1): D k (i, j) = min{d k 1 (i, j),d k 1 (i,k) + D k 1 (k, j)} Megjegyzés: A rekurzíó kiszámítása egyetlen tömbben megoldható, mert D k 1 (i,k) = D k (i,k) és D k 1 (k, j) = D k (k, j)

Floyd Warshall algoritmus FloydWarshall(G) for i=1 to n {for j=1 to n {D[i,j]:=G[i,j] if D[i,j]<INF then Elso[i,j]:=j}} for k=1 to n {for i=1 to n {for j=1 to n If D[i,k]+D[k,j]<D[i,j] then {D[i,j]:=D[i,k]+D[k,j] Elso[i,j]:=Elso[i,k]}}} Futási idő: Θ(n 3 ) A G = (V,E) gráf tranzitív lezártja az a G = (V,E ) gráf, ahol E = {(u,v) : u v}. Egy lehetséges algoritmus G kiszámítására: vegyük azt a gráfot, amelyben minden létező él súlya 1, és alkalmazzuk a Floyd-Warshall algoritmust. Az i és j pontok között akkor és csak akkor van út G-ben, ha távolságuk nem. Megjegyzés: Azonban a Floyd-Warshall algoritmus egyszerű módosításával (Boolean értékeket használva a távolságok helyett) hatékonyabb megoldást kapunk.

Minimális feszítőfák Legyen G = (V,E,c), c : E R + egy súlyozott irányítatlan gráf. Terjesszük ki a súlyfüggvényt a T E élhalmazokra: C(T ) = (u,v) T c(u,v) Az F = (V,T) gráf minimális feszitőfája G-nek, ha F feszitőfája G-nek, és C(T) minimális Legyen A F valamely (V,F) minimális feszítőfára, és (u,v) E. Definíció (u,v) biztonságos él A-ra nézve, ha A {(u, v)} is része valamely minimális feszítőfának. Elvi algoritmus A := /0 While A nem feszítőfa (u,v) biztonságos él keresése; A := A {(u,v)}

Definíció: A G = (V,E) gráf vágása: (S,V \ S), ahol S V ; Definíció: (u,v) E keresztél az (S,V \ S) vágásra, ha u S és v V \ S, vagy u V \ S és v S. Az (S,V \ S) vágás elkerüli az A E élhalmazt, ha A-ban nincs keresztél. Definíció: (u,v) könnyű él az (S,V \ S) vágásra, ha a legkisebb c-értékű (súlyú) keresztél. Tétel: Ha A része a G = (V,E,c) valamely minimális feszítőfájának és elkerüli az (S,V \ S) vágást, továbbá (u, v) könnyű él az (S,V \ S) vágásra, akkor (u, v) biztonságos él A-ra nézve. Bizonyítás: Legyen T = (V,F) egy olyan minimális feszítőfa, amelyre A F. Ha (u, v) F, akkor az állítás nyilvánvaló. Ha (u,v) / F, akkor (u,v)-t hozzá véve az F éleihez kört kapunk. Mivel u és v az S vágás különböző oldalán vannak, ezért van a körben egy másik (x,y) keresztél. Ekkor az F := F \ {(x,y)} {(u,v)} élhalmaz is feszítőfája lesz G-nek. Továbbá c(u,v) c(x,y) miatt C(F ) C(F), így szintén minimális.

Kruskal algoritmusa Kruskal(G,w) Letesit(A: halmaz) for (v V ) Halmazt Keszit(v) rendezzük E éleit w szerint növekvő sorrendbe for (u,v) E esetén a súly szerinti sorrendben If Halmazt Keres(u) Halmazt Keres(v) A := A {(u,v)} Egyesít(u,v) Megvalósítás: Unio Holvan adattípussal. Helyesség: Az általános tétel alapján, vágásnak olyan vágást használva, ahol az egyik halmaz az u-tartalmazó részfa az aktuális feszítő erdőből. Futási idő: O( E log V )

Prím algoritmusa Prim(G,c,r) for(v in V) {d(v):=inf apa(v):=0 Bent(v):=0} d(r):=0 Letesit(Q: ModPrisor) for(v in V) Sorba(Q,v) while(elemszam(q)>0) {Sorbol(Q,u) Bent(u):=1 for(v in Kiel(G,u)) {If (Bent(v)=0) and (c(u,v)<d(v)) then {apa(v):=u d(v):=c(u,v)}}} Helyesség: Az általános tétel alapján, vágásnak olyan vágást használva, ahol az egyik halmaz azon v pontokat tartalmazza, akikre Bent(v)=1. Futási idő: O( E + V log V )

Példa A Kruskal algoritmus a következő sorrendben választja be az éleket: (a,b),(c,e),(d, f ),(a,c),(d,e), A Prim algoritmus sorrendje (a,b),(a,c), (c,e), (d,e),(d, f ).

b a 1 2 3 c 2 1 3 e 2 d 3 f 1 4. ábra.