Minimális feszítőfák Definíció: Egy irányítatlan gráf feszítőfája a gráfnak az a részgráfja, amely fagráf és tartalmazza a gráf összes cúcspontját. Definíció: A fa súlya a w(T) = w(u,v) számérték (u,v) T Definíció: Minimális feszítőfáról beszélünk, ha w(T) értéke minimális az összes T feszítőfára nézve. A minimális feszítőfa nem feltétlenül egyértelmű. Legyen A egy minimális feszítőfa egy része. A-ra nézve biztonságos egy él, ha A-hoz hozzávéve A továbbra is valamely minimális feszítőfa része marad. MFF(G,w) A WHILE A nem feszítőfa DO keresünk egy biztonságos (u,v) élt az A-ra nézve A A {(u,v)} RETURN (A) 2018.12.27. 14:16:18 ADAT-10
Minimális feszítőfák Definíció: Egy irányítatlan G=(V,E) gráf vágása a V kettéosztása egy S és egy V\S halmazra Definíció: Az (u,v) él keresztezi az (S,V\S) vágást, ha annak egyik végpontja S-ben, másik végpontja V\S-ben található. Definíció: Egy vágás kikerüli az A halmazt, ha az A egyetlen éle sem keresztezi a vágást. Definíció: Egy él könnyű egy vágásban, ha a vágást keresztező élek közül neki van a legkisebb súlya. Tétel: Legyen G=(V,E) egy összefüggő, irányítatlan gráf w:E R súlyfüggvénnyel.. Legyen A egy olyan részhalmaza E-nek, amelyik G valamelyik minimális feszítőfájának is része. Legyen (S,V\S) tetszőleges A-t kikerülő vágása a G-nek. Legyen (u,v) könnyű él az (S,V\S) vágásban. Ekkor az (u,v) él biztonságos az A-ra nézve. Következmény: Legyen G=(V,E) egy összefüggő, irányítatlan gráf gráf w:E R súlyfüggvénnyel..Legyen A egy olyan részhalmaza E-nek, amelyik G valamelyik minimális feszítőfájának is része. Legyen C egy összefüggő komponens a GA=(V,A) erdőben. Ha (u,v) a C-t és a GA valamely másik komponenesét összekötő könnyű él, akkor az (u,v) él biztonságos az A-ra nézve. 2018.12.27. 14:16:18 ADAT-10
Kruskal algoritmus MFF_KRUSKAL(G,w) A FOR v V[G]-re DO HALMAZT_KÉSZÍT(v) Rendezzük E éleit a súly szerint növekvő sorrendben FOR (u,v) E élre az élek súly szerint növekvő sorrendjében DO IF HALMAZT_KERES(u) HALMAZT_KERES(v) THEN A A {(u,v)} EGYESÍT(u,v) RETURN(A) O(E log E) 2018.12.27. 14:16:18 ADAT-10
Prim algoritmus MFF_PRIM(G,w,r) Q V[G] FOR v Q-ra DO kulcs[v] Kulcs[r] 0 [r] NIL WHILE Q DO u KIVESZ_MIN(Q) FOR v Adj[u]-ra DO IF v Q és w(u,v) kulcs[v] THEN [v] u kulcs[v] w(u,v) RETURN() O(E log V) 2018.12.27. 14:16:18 ADAT-10
Adott csúcsból induló legrövidebb utak Adott egy élsúlyozott irányított G=(V,E) gráf w:E R súlyfüggvénnyel. (w lehet negatív is) Ne legyen a gráfban negatív összsúlyú kör. Legyen p=(v0,v1,…,vk) egy út. k Definíció: Egy p út súlya (hossza) a w(p)= w(vi-1,vi) összeg. i=1 Definíció: Az u-ból v-be vezető legrövidebb út súlya (hossza) (u,v)=min w(p) u pv, ha vezet út u-ból v-be és egyébként Kiindulunk az s csúcsból és keressük az összes csúcsba vezető legrövidebb utakat. Definíció: G=(V,E) szülő részgráf V ={v V:[v] NIL} {s} E={([v],v) E: v V \{s}} Ez lesz a legrövidebb utak fája 2018.12.27. 14:16:18 ADAT-10
A fokozatos közelítés EGY_FORRÁS_KEZDŐÉRTÉK(G,s) Minden v csúcsnál nyílvántartunk egy d[v] értéket, amely felső korlátja az s kezdőcsúcsból a v-be vezető legrövidebb út súlyának. EGY_FORRÁS_KEZDŐÉRTÉK(G,s) FOR v V[G]-re DO d[v] [v] NIL d[s] 0 KÖZELÍT(u,v,w) IF d[v]>d[u]+w(u,v) THEN d[v] d[u]+w(u,v) [v] u 2018.12.27. 14:16:18 ADAT-10
Dijkstra algoritmus Az élek súlya nem lehet negatív. DIJKSTRA(G,s) EGY_FORRÁS_KEZDŐÉRTÉK(G,s) S Q V[G] WHILE Q DO u KIVESZ_MIN(Q) S S {u} FOR v Adj[u]-ra DO KÖZELÍT(u,v,w) O(V2) 2018.12.27. 14:16:18 ADAT-10
Bellman-Ford algoritmus Az élek súlya lehet negatív, de ne legyen negatív súlyú kör. BELLMAN_FORD(G,w,s) EGY_FORRÁS_KEZDŐÉRTÉK(G,s) FOR i 1 TO V[G]-1 DO FOR (u,v) E[G]-re DO KÖZELÍT(u,v,w) IF d[v]>d[u]+w(u,v) THEN RETURN(HAMIS) RETURN (IGAZ) O(VE) 2018.12.27. 14:16:18 ADAT-10
Körmentes irányított gráfban legrövidebb utak KIG_LEGRÖVIDEBB_ÚT(G,w,s) A G csúcsainak topologikus rendezése EGY_FORRÁS_KEZDŐÉRTÉK(G,s) FOR u csúcsra azok topologikus sorrendjében DO FOR v Adj[u]-ra DO KÖZELIT(u,v,w) (V+E) 2018.12.27. 14:16:18 ADAT-10