Gráfalgoritmusok Csink László 2009.

Slides:



Advertisements
Hasonló előadás
A Floyd-Warshall algoritmus
Advertisements

Készítette: Kosztyán Zsolt Tibor
Nevezetes algoritmusok
Preferenciák, rendezések, reprezentálhatóság
KÉSZÍTETTE: Takács Sándor
Készítette: Mester Tamás METRABI.ELTE.  Adott egy G irányított vagy irányítás nélküli, véges gráf. Az eljárás célja a G gráf összes csúcsának bejárása.
Matematika II. 4. előadás Geodézia szakmérnöki szak 2010/2011. tanév Műszaki térinformatika ágazat tavaszi félév.
Illeszkedési mátrix Villamosságtani szempontból legfontosabb mátrixreprezentáció. Legyen G egy irányított gráf, n ponton e éllel. Az n x e –es B(G) mátrixot.
Illés Tibor – Hálózati folyamok
Euklidészi gyűrűk Definíció.
Csoport részcsoport invariáns faktorcsoport részcsoport
Gyűrűk Definíció. Az (R, +, ·) algebrai struktúra gyűrű, ha + és · R-en binér műveletek, valamint I. (R, +) Abel-csoport, II. (R, ·) félcsoport, és III.
Minimális költségű feszítőfák
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Dijkstra algoritmus Irányított gráfban.
Operációkutatás szeptember 18 –október 2.
MI 2003/ Alakfelismerés - még egy megközelítés: még kevesebbet tudunk. Csak a mintánk adott, de címkék nélkül. Csoportosítás (klaszterezés, clustering).
Halmazok, relációk, függvények
Papp Róbert, Blaskovics Viktor, Hantos Norbert
OPERÁCIÓKUTATÁS Kalmár János, 2012 Tartalom A nulla-egy LP megoldása Hátizsák feladat.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
A digitális számítás elmélete
Számoljuk meg rekurzív függvénnyel egy bináris fa leveleit!
DAG topologikus rendezés
Prím algoritmus.
„Országos” feladat. Feladat: Egy tetszőleges, színes országokat tartalmazó térképen akar eljutni egy kommandós csapat egy országból egy másikba. Viszont.
Dijkstra algoritmusa Egy csúcsból a többibe vezető legkisebb költségű út megkeresése Az algoritmus működésének leírása és bemutatása LL.
A számfogalom bővítése
Szélességi bejárás A szélességi bejárással egy irányított vagy irányítás nélküli véges gráfot járhatunk be a kezdőcsúcstól való távolságuk növekvő sorrendjében.
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Készítette: Kosztyán Zsolt Tibor
*** HALMAZOK *** A HALMAZ ÉS MEGADÁSA A HALMAZ FOGALMA
Gráfok Készítette: Dr. Ábrahám István.
Készítette: Lakos Péter.  Adott egy élsúlyozott, véges gráf  Negatív élsúlyokat nem tartalmaz  Lehet irányított vagy irányítatlan  Továbbá adott egy.
GRÁFELMÉLET Alapfogalmak 1..
1 AAO folytatás ++ Csink László. 2 Rekurzív bináris keresés (rendezett tömbben) public static int binker(int[] tomb, int value, int low, int high) public.
Fák.
A Dijkstra algoritmus.
1 Szélességi Bejárás Györgyi Tamás – GYTNAAI.ELTE 2007 Március 22 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus S b a d e f h g c.
1 Dijkstra Algoritmusa Györgyi Tamás – GYTNAAI.ELTE 2007 Április 02 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus S a b c d e
Az informatika logikai alapjai
Algoritmizálás, adatmodellezés tanítása 8. előadás.
Kruskal-algoritmus.
Háló- (gráf-) algoritmusok
Business Mathematics A legrövidebb út.
Bellmann-Ford Algoritmus
A MATEMATIKA FELÉPÍTÉSÉNEK ELEMEI
GRÁFOK Definíció: Gráfnak nevezzük véges vagy megszámlálhatóan végtelen sok pont és azokat összekötő szintén véges vagy megszámlálhatóan végtelen sok.
Útkeresések.
Bináris kereső fák Itterátorok.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Algoritmusok és adatszerkezetek
Prim algoritmus Algoritmusok és adatszerkezetek 2. Újvári Zsuzsanna.
INFOÉRA Gráfok, gráfalgoritmusok II. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
V 1.0 Szabó Zsolt, Óbudai Egyetem, Programozás II. Gráfok Dijkstra algoritmus Kruskal algoritmus.
Kvantitatív módszerek
HÁLÓZAT Maximális folyam, minimális vágás
GRÁFOK Marczis Ádám és Tábori Ármin. Kőnig Dénes ( ) Magyar matematikus Az első tudományos színvonalú gráfelmélet könyv írója.
A Dijkstra algoritmus.
HÁLÓZAT Maximális folyam, minimális vágás
INFOÉRA Gráfok, gráfalgoritmusok III. (Horváth Gyula és Szlávi Péter előadásai felhasználásával) Juhász István-Zsakó László: Informatikai.
Algoritmusok és Adatszerkezetek I.
Depth First Search Backtracking
Algoritmusok és Adatszerkezetek I.
Gráfalgoritmusok G=(V,E) gráf ábrázolása
Dijkstra algoritmusa: legrövidebb utak
Dijkstra algoritmusa: legrövidebb utak
Gráfok - 1 Definíció: Irányított gráf (digráf) G=(V,E) rendezett pár.
Dijkstra algoritmusa: legrövidebb utak
Gráfalgoritmusok G=(V,E) gráf ábrázolása
Előadás másolata:

Gráfalgoritmusok Csink László 2009

Ajánlott irodalom Aho A.V., Ullmann, J.D.: Foundations of Computer Science (C Edition), Computer Sci. Press, New York 1966. ISBN 0-7167-8284-7 Mayeda, W.: Alkalmazott gráfelmélet, Műszaki Könyvkiadó, 1976, ISBN 963-10-1205-0 Csink László/PPT

Irányított gráf 1. N a csúcsok halmaza A az élek halmaza A egy reláció NxN halmazon 1 2 3 N = {0, 1, 2, 3, 4} 4 A = {(0,0), (0,1), (0,2), (1,3), (2,0), (2,1), (2,4), (3,2), (3,4), (4,1)} Csink László/PPT

Irányított gráf 2. Példa útra: Jelölés: (0,1,3,4) Út hossza: 3 {(0,1), (1,3), (3,4)} Jelölés: (0,1,3,4) Út hossza: 3 Minden csúcsból önmagába 0 hosszú út vezet. 1 Ha (i,j) él, akkor i szülője j-nek, és j gyermeke i-nek Más jelöléssel i a j 2 3 Ciklus: olyan nem-triviális, azaz pozitív hosszú út, melynek kezdete és vége megegyezik. 4 Példa ciklusra: (0,0) vagy (0, 2, 0) Csink László/PPT

Irányított gráf 3. A ciklust bármelyik pontján kezdhetjük: (1,3,2,4,1) ekvivalens (2,4,1,3,2) -vel. A ciklus egyszerű, ha csak a kiinduló pontban van ismétlődés. Pl. a „piros” ciklus egyszerű, a (0,2,0,1,3,2) ciklus nem egyszerű. 1 2 3 4 Minden ciklus tartalmaz ugyanonnan induló egyszerű ciklust is. Bizonyítás következik! Csink László/PPT

Irányított gráf 4. Minden ciklus tartalmaz ugyanonnan induló egyszerű ciklust is. Bizonyítás. Legyen (v, v1, v2,…, vk, v) egy nem egyszerű ciklus. Ekkor vagy v előfordul legalább háromszor, vagy létezik egy olyan u, melyre a ciklus a következő alakú: (v,…,u,…,u,…,v). Az 1. esetben távolítsunk el mindent a ciklusból v utolsó előtti előfordulásáig, a fennmaradó rész egyszerű ciklust alkot. A 2. esetben a két u közötti részt távolítsuk el, és helyettesítsük egyetlen u-val. Ekkor egy az eredetinél rövidebb ciklust kapunk. Ha ez nem egyszerű, ismételjük az eljárást elölről. Véges sok lépés után az eljárás véget ér. Csink László/PPT

Irányított gráf 5. Ha egy gráf tartalmaz ciklust, a gráfot ciklikusnak nevezzük. A fentiek szerint egy gráf pontosan akkor ciklikus, ha tartalmaz egyszerű ciklust. Ha egy gráf nem tartalmaz ciklust, akkor aciklikusnak nevezzük. Egy út aciklikus, ha nem tartalmaz ciklust. (Labirintusnál ezt egyszerű útnak hívtuk.) Ha két csúcs között van út, akkor aciklikus út is van, hiszen egy ciklust helyettesíthetünk a kezdőpontjával. Csink László/PPT

Irányítatlan gráf 1: a Hawai szigetek úthálózata Laie Kahului MAUI 60 22 Maili 28 24 Kaneohe 16 15 Lahaina Hana Wahiawa 12 11 Keokea 20 114 Kona 31 Hilo Pearl City 13 Honolulu 45 Kamuela HAWAI OAHU Csink László/PPT

Irányítatlan gráf 2 az él nem (u,v) rendezett pár, hanem {u,v} halmaz. Ekkor u és v szomszédosak. Ciklus definiálása: (u,v,u) –t kihagyjuk, hiszen csak ua. élen megyünk oda-vissza Csak az egyszerű ciklust definiáljuk: olyan legalább 3 hosszú út, amelynek kezdő- és végcsúcsa megegyezik, és az utolsó csúcs kivételével nincs ismétlődés (Maili, Wahiawa, Pearl City, Maili) vagy másképp (Wahiawa, Pearl City, Maili, Wahiawa) vagy másképp (Pearl City, Maili, Wahiawa, Pearl City) és még fordított körüljárással is. Csink László/PPT

Irányított gráf ábrázolása szomszédsági listával 1 2 NIL pointer 1 3 2 1 4 3 2 4 1 4 1 Pointer-tömb tartalmazza a csúcsokat, a listákon a csatlakozó utódok vannak (a sorrend mindegy) 2 3 4 Csink László/PPT

Irányított gráf ábrázolása szomszédsági mátrixszal Jelölje E a szomszédsági mátrixot. 1 2 3 4 j i 1 E(i,j)=1 i a j 2 3 i-dik sor: hova megy i-ből él j-dik oszlop: honnan jön j-be él 4 Csink László/PPT

Listával vagy mátrixszal? Ha a gráf sűrű, azaz a lehetséges élek közül sok van behúzva (max n2 lehet), akkor a mátrixos tárolás takarékosabb. (n2 bit szükséges), Tegyük fel, hogy a gráf ritka, azaz viszonylag kevés él van benne. Egy listaelem tartalmaz egy integert és egy pointert (32+32=64 bit). x db él esetén ez 64x bit. További 32n bitet igényel a pointertömb, n csúcs esetén. Nagy n esetén, ha az összes lehetséges él 64-edénél kevesebb él van, akkor a lista megéri. Csink László/PPT

Súlyozott élű irányítatlan gráf szomszédsági mátrixa Laie A szomszédsági mátrixba a súlyt írjuk be. Kell egy érték (példánkban –1) amely a nincs kapcsolatot jelenti. Maili 28 24 Kaneohe 15 1 2 3 4 5 -1 24 28 11 13 20 12 15 5 1 4 Wahiawa 12 11 20 3 2 Pearl City 13 Honolulu OAHU Csink László/PPT

Súlyozott élű irányítatlan gráf szomszédsági listája C struktúrák Laie Null pointer 1 24 5 28 1 Kaneohe 24 2 11 2 Honolulu 1 11 3 13 3 PearlCity 2 13 4 20 5 12 4 Maili 3 20 5 15 Wahiawa Wahiawa 5 28 3 12 4 15 Csúcs azonosítók súlyok Csink László/PPT

Irányítatlan gráfok összefüggő komponensei Minden irányítatlan gráf összefüggő komponensekre bontható Összefüggő komponens: ha bármely két csúcsa között van út A fenti öf. komponensek maximálisak, azaz bármely csúcsot hozzávéve már nem összefüggőek Összefüggő a gráf, ha egyetlen öf. komponensből áll Csink László/PPT

Komponensek, ekvivalencia reláció, osztályozás Legyen P egy reláció a gráf pontjai között: uPv azt jelenti, hogy u-ból vezet út v-be Ekkor P reflexív (uPu), szimmetrikus (ha uPv, akkor vPu) és tranzitív (ha uPv, vPz akkor uPz) Egy reflexív, szimmetrikus és tranzitív reláció ekvivalencia reláció, amely osztályozást valósít meg A v csúcsot tartalmazó osztály a {u l vPu}, ez a v-t tartalmazó összefüggő komponens Ha r és q egy osztályba tartoznak, akkor rPq (Bizonyítás: legyen ez mondjuk a v-hez tartozó osztály, tehát vPr és vPq. Ekkor rPv a szimmetria miatt, rPv és vPq – tranzitivitás következtében – maga után vonja, hogy rPq.) Csink László/PPT

Összefüggő komponensek megkeresése Legyen G egy irányítatlan gráf, jelölje G0 azokat a csúcsokat, amelyekből nem vezet ki él. Ekkor G0 minden pontja egy-egy komponens. (G0 persze üreshalmaz is lehet.) Tegyük fel, hogy i db élt megvizsgáltunk, és az ezeket tartalmazó Gi gráf összefüggő komponenseit megtaláltuk. (indukciós feltevés) Vegyünk egy újabb {u,v} élt. Ha ezek Gi ugyanazon komponensébe tartoznak, Gi+1 komponensei megegyeznek Gi komponenseivel. Ha sem u, sem v nincs Gi –ben, {u,v} egy újabb komponens. Ha u Gi egyik komponensében van, és v nincs abban, akkor u komponenséhez csatlakoztatjuk v-t és a v-hez kapcsolódó Gi –beli összefüggő komponenst. Csink László/PPT

Kövessük nyomon az előbbi algoritmust a Hawai szigetek példáján! Az élek sorrendjét a súlyok nagyságrendje szerint vesszük. Laie Kahului MAUI 60 22 Maili 28 24 Kaneohe 16 15 Lahaina Hana Wahiawa 12 11 Keokea 20 114 Kona 31 Hilo Pearl City 13 Honolulu 45 Kamuela HAWAI OAHU Csink László/PPT

Minimális feszítőfa keresése Irányítatlan súlyozott gráfban nemcsak az öf. komponenseket akarjuk megkeresni, hanem a komponens legyen fa (itt: ciklusmentes részgráf, gyökérrel, levéllel, gyerekkel nem foglalkozunk) Feszítőfa: csúcsai azonosak a komponens csúcsaival, élei a komponens éleinek részhalmazát alkotják, ciklust nem tartalmaz Ráadásul a feszítőfa legyen minimális abban az értelemben, hogy a súlyösszege minimális legyen (a lehetséges feszítőfák közül) Csink László/PPT

Ugyanazon gráf két különböző feszítőfája Laie Laie Maili 28 24 Kaneohe Maili 28 24 Kaneohe 15 15 Wahiawa Wahiawa 12 11 12 11 20 20 Pearl City 13 Honolulu Pearl City 13 Honolulu Piros feszítőfa, összúlya 80 Zöld feszítőfa, összsúlya 75 Csink László/PPT

A fa gyökértelen, a gyerekek sorrendje tetszőleges Maili PearlCity PearlCity Wahiawa Honolulu Maili Honolulu Wahiawa Kaneohe Kaneohe Laie Laie Ha nem kitüntetett a gyökér, a két gráf ugyanaz, mindkettő a piros fa! Csink László/PPT

Kruskal algoritmus a minimális feszítőfa megkeresésére Az éleket sorbarendezzük a súlyok szerint ha egy él két csúcsa különböző komponensbe tartozik, kiválasztjuk a feszítőfába és egyesítjük a két részkomponenst, egyébként nem választjuk ki az élt és nem egyesítünk Eredmény OAHU szigetén a zöld feszítőfa Csink László/PPT

Miért működik a Kruskal algoritmus? Legyen G egy összefüggő, irányítatlan súlyozott gráf. Rendezzük az éleket súly szerint növekvő sorrendbe. Ha van két azonos súly, az egyikhez adjunk hozzá egy kis  értéket, hogy a két él különböző súlyú legyen, de a sorrend csak közöttük változzon. Esetleg többször is alkalmazzuk e trükköt úgy, hogy minden él különböző legyen, de  még mindig kisebb, mint bármely két „régi” él különbsége. Így a generált feszítőfa egyértelmű lesz. A Kruskal algoritmus mohó algoritmus (greedy algorithm) abban az értelemben, hogy minden pillanatban az akkor legjobb lépést tesszük meg. Ez nem mindig vezet globális optimumhoz, de a Kruskal algoritmus esetében igen. (Nem bizonyítjuk.) Csink László/PPT

Depth-First Search: irányított gráf bejárása Nem Ariadné fonala, mert ott irányítatlan gráf volt, de az ötlet hasonló enum MARKTYPE{VISITED,UNVISITED} typedef struct{ enum MARKTYPE mark; LIST successors; } GRAPH[MAX]; a b d typedef struct CELL *LIST; struct CELL { NODE nodeName; LIST next; }; e c f Csink László/PPT

A program (rekurzív dfs) void dfs(NODE u, GRAPH G){ LIST p; // u szomszédsági listáján fut NODE v; // p által mutatott csúcs G[u].mark=VISITED; p=G[u].successors; while (p != NULL) { v = p->nodeName; if (G[v].mark==UNVISITED) dfs(v, G); p = p->next; } } a b d e c f Csink László/PPT

dfs fa keresése 1. a piros nyilak a szülő-gyerek kapcsolatot jelentik a dfs fában a előre mutató él: ad (de d nem gyereke a-nak) visszamutató él: cb (c leszármazottja b-nek) keresztélek: a többi mindegyik keresztél jobbról balra megy, vagyis később látogatott éltől korábban látogatott élig b d e c f Csink László/PPT

dfs fa keresése 2. Pl. induljunk az e csúcsból Mi lett volna, ha nem az a csúcsból indulunk? Az a csúcsot sosem találtuk volna meg. Ekkor több fát találunk, amelyek erdőt alkotnak. Pl. induljunk az e csúcsból az eredmény a piros fa, ill. az a csúcs önmagában (elfajult fa) a Előremutató él nincs visszamutató él b b c Keresztélek: itt is jobbról balra később látogatott éltől korábban látogatott élig mennek b d e c f Csink László/PPT

Az általános dfsForest algoritmus void dfsForest( GRAPH G){ NODE u; for (u=0; u<MAX; u++) G[u].mark=UNVISITED; if (G[u].mark==UNVISITED) dfs(u, G); } Forest = erdő Csink László/PPT

Irányított gráf postorder bejárása int k; // csúcsok számolása void dfs(NODE u, GRAPH G){ LIST p; // u szomszédsági listáján fut NODE v; // p által mutatott csúcs G[u].mark=VISITED; p=G[u].successors; while (p != NULL) { v = p->nodeName; if (G[v].mark==UNVISITED) dfs(v, G); p = p->next; } ++k; G[u].postorder=k; } Új: ami piros k globális változó „visszafelé” számozza be a csúcsokat void dfsForest( GRAPH G){ NODE u; k = 0; for (u=0; u<MAX; u++) G[u].mark=UNVISITED; if (G[u].mark==UNVISITED) dfs(u, G); } Csink László/PPT

A visszamutató ív ciklust jelent Tegyük fel, hogy n a csúcsok m pedig az élek száma, és n  m Ekkor O(m) lépésben megvalósíthatjuk a gráf postorder bejárását. Ha v  w előre mutató él, w p.o. száma < v p.o. száma. Ha u v visszamutató él (u p.o. száma  v p.o.) száma, akkor ez ciklust jelez. Fordítva, egy ciklus élei között kell, hogy legyen visszamutató él. Tf. ui. hogy v1  v2 ...  vk  v1 v1 postorder száma pi, i=1,2,… Ha k=1, v1  v1 visszamutató él. Tf. k>1 és a fenti láncban v1 és vk között nincs visszamutató él. Ekkor p1>p2>…>pk azaz p1>pk tehát vk  v1 visszamutató él. v w u Csink László/PPT

Irányított gráf aciklikus voltának tesztelése BBOLEAN testAcyclic(GRAPH G){ NODE u, v; LIST p; dfs Forest (G); for (u=0; u < MAX; u++){ p = G[u].successors; while (p != NULL) { v = p->nodeName; if (G[u].postorder <= G[v].postorder) return FALSE; p=p->next; } RETURN true; Csink László/PPT

Algebra és gráfelmélet 1. Legyen adott egy alaphalmaz és rajta egy R bináris reláció ha R tranzitív (ha aRb és bRc akkor aRc) és antiszimmetrikus (ha aRb és bRa, akkor a=b, vagy másképpen ab esetén aRb és bRa közül legfeljebb csak az egyik teljesülhet), akkor R részben rendezés. Példa: az egész számokon  szimmetrikus,  antiszimmetrikus, és egyben részben rendezés ( is az, sőt < is részben rendezés, amely nem reflexív) Csink László/PPT

Algebra és gráfelmélet 2. egy részben rendezés teljes rendezés, ha bármely két elem összehasonlítható, azaz aRb vagy bRa közül az egyik teljesül. (Ha mindkettő, akkor szükségképpen a=b.) Egy teljes rendezés szükségképpen reflexív, hiszen a bármely két elem egybe is eshet. Legyen U egy tetszőleges halmaz, 2U a hatványhalmaza (U összes részhalmazainak halmaza). U részben rendezés a 2U halmazon. Nem teljes rendezés, mert választható két olyan halmaz, amelyik nem összehasonlítható, azaz egyik sem részhalmaza a másiknak. Csink László/PPT

Algebra és gráfelmélet 3. A gráf csúcsai az U= {1,2,3} részhalmazai, élei a U relációt jelentik. Kihagytuk ama éleket, amelyek a tranzitivitás következtében keletkeznek. (Pl. az üreshalmazból mindenhova {1} {1,2} vezetne él.)  {2} {1,3} {1,2,3} {3} {2,3} A  {1,2,3} redukált gráfja Csink László/PPT

Reláció lezártja Tegyük fel, hogy adott egy R reláció egy S halmazon és egy T tulajdonság. Ha R nem rendelkezik a T tulajdon-sággal, de SxS bizonyos elemeit R-hez hozzávéve a tulajdonság teljesül, akkor a kapott bővebb relációt R T-re vonatkozó lezárásának nevezzük - feltéve, hogy a minimális számú szükséges párral bővítettünk. {1} {1,2} Az {1} csúcsra nézve piros-sal behúztuk a reflexív élt és a tranzitív élt. ha ezt minden csúcsra elvégezzük, megkap-juk a tranzitív lezárást.  {2} {1,3} {1,2,3} {3} {2,3} Csink László/PPT

Ekvivalencia lezárás és összefüggő komponensek Legyen adott egy R reláció városok között, relációban azok a városok vannak, melyek között közvetlen út (él) vezet. Milyen városok között vezetnek utak? Tekintsük a reláció reflexivitás, szimmetria és tranzi-tivitás szerinti lezárását, azaz a legszűkebb ekvivalencia relációt, amely R-t tartalmazza. Ez R gráfjának összefüggő komponenseinek megkeresését jelenti. Csink László/PPT

Topológiai rendezés: egy részben rendezést teljes rendezéssé egészít ki Tegyük fel, hogy valamilyen folyamatban a feladatok időrendi precedenciájára vonatkozó szabályaink vannak, melyet az R részben rendezési reláció fejez ki. Ennek lezárása teljes rendezéssé - ezt nevezik topológiai rendezésnek - megadja a feladatok elvégzésének olyan lehetséges ütemezéseit, amelyek a kezdeti feltételeket kielégítik. A topológiai rendezés tehát nem egyértelmű, szemben a tranzitív lezárással, amely egyértelmű eredményt ad. Csink László/PPT

Topológiai rendezés: egy egyszerű példa Az orvos a műtőben egyes műtétekkor a sebészkesztyű alá fémszálakkal megerősített „vaskesztyűt” is húz, amely védi a szikével történő megvágás ellen. Adott precedencia: (bal vaskesztyű, bal sebészkesztyű), (jobb vaskesztyű, jobb sebészkesztyű). Ez egy részben rendezés. Lehetséges teljes rendezések: Muszáj vaskesztyűvel kezdeni,  jelenti a sorrendet. Jobb vaskesztyűvel indít: Bal vaskesztyűvel indít: JVK  JSK  BVK  BSK BVK  JVK  JSK  BSK JVK  BVK  JSK  BSK BVK  JVK  BSK  JSK JVK  BVK  BSK  JSK BVK  BSK  JVK  JSK Csink László/PPT

Topológiai rendezési algoritmus Legyen G egy aciklikus irányított gráf. (Csak aciklikus gráfot lehet topológiailag rendezni.) A dfsForest algoritmussal segítségével (ld. Irányított gráf postorder bejárása) fordított postorder sorrendet is kaphatunk: (v1,v2,…,vn) ahol v1 a postorder bejárás szerinti n-dik csúcs, v2 az (n-1)-dik csúcs stb. Ebben a listában minden él előre mutat, tehát ez a lista egy topológiai rendezést valósít meg. A fordított postorder sorrendet FILO veremmel valósítjuk meg. Csink László/PPT

Topológiai rendezés alkalmazása Tegyük fel, hogy egy programban a nem-rekurzív függvényhívásokat egy G gráf írja le. Célunk, hogy a függvényeket olyan sorrendben elemezzük, hogy egy függvény elemzésekor az általa hívott függ-vényeket már áttekintettük. Megoldás: a postorder (fordított topológiai) rendezés Mindig szükséges viszont az aciklus teszt a rekurzivitás felderítésére. Csink László/PPT

Példa topológiai rendezésre 2 4 6 1 a b c d d 5 3 f e c e dfs erdő (a csúcsok sorrendjében történő kereséssel) b f Egyik topológiai rendezés: d,e,c,f,b,a a irányított aciklikus gráf Csink László/PPT

Az elérhetőség problémája irányított gráfnál Adott u csúcsból melyeket lehet éleket követve, azaz úttal, elérni? Az elérhető csúcsokat az u csúcs elérhető halmazának nevezzük. Algoritmus: jelöljünk minden csúcsot UNVISITED-nek. Indítsuk el a dfs(u) programot. A VISITED-nek jelölt csúcsok az elérhetőek u-ból. Legyen R egy bináris reláció egy S halmazon. Az elérhetőségi probléma megoldása R reflexív-tranzitív lezárása: Csink László/PPT

Legrövidebb út keresése 1. (Dijkstra) Legyen a G gráf irányított vagy irányítatlan,és az élek legyenek súllyal ellátva (hossz, idő, költség stb.) (pl. Hawai szigetek) Két csúcs között - ha van út a két csúcs között - az út-menti távolság az élek súlyainak összege az út mentén haladva. Két csúcs közötti (minimális) távolság az összes lehetséges út-menti távolság minimuma. Feltesszük, hogy a súlyok nem-negatívak. Ekkor minden útból kihagyhatóak a ciklusok, hiszen ezzel a távolságot csak csökkenthetjük. Feladat: egy adott u csúcsból indulva keressük a minimális távolságot az összes többi csúcshoz. Csink László/PPT

Legrövidebb út keresése 2. (Dijkstra) Kezdetben u elintézett, a többi csúcs elintézetlen. Legyen S az eddig elintézett csúcsok halmaza (kezdetben S={u}). Egy vS csúcsra definiáljuk a speciális út fogalmát: ez egy olyan út u-ból v-be, amely az utolsó él kivételével végig S-beli csúcsok közti éleket használ. Bevezetjük minden v csúcsra a dv távolságot u-tól. Ha vS akkor dv a legrövidebb távolság u-tól. Ha vS akkor dv a legrövidebb speciális út hossza. Jelölje INFTY a “végtelent” (akkora konstans, amelyet semmilyen úthossz nem haladhat meg), dv = INFTY ha v (egyelőre) nem érhető el. Egy lépés: vS csúcsra kiszámítjuk dv -t. Ezután minden w  G-S-{v} csúcsra beállítjuk a távolságot: ha nincs v w él, nem csinálunk semmit, ha van, dw = dv + (v w él hossza). Ennél hosszabb utakat a jövőben nem keresünk. Csink László/PPT

Legrövidebb út keresése 3. (Dijkstra) elintézett csúcsok u speciális út Csink László/PPT

Összefüggő komponensek keresése irányítatlan gráfban Eddigi módszer: (valamilyen súlyozással) alkalmazzuk a Kruskal algoritmust minimális feszítőfa keresésére, ez megadja az összefüggő komponenseket. Új megoldás: minden élt tekintsünk oda-vissza irányúnak, így irányított gráfot kaptunk. Keressük meg a dfs erdőt, ennek minden fája az eredeti gráf egy-egy öf. komponensét adja. Csink László/PPT