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. 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) Modosit(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 ) 1
b a 1 2 3 c 1 2 3 e 2 d 3 f 1 1. ábra. 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 ). Maximális párosítás páros gráfokra A G = (V,E) gráfot párosnak nevezzük, ha V csúcshalmaza felosztható két diszjunkt részre V 1 -re és V 2 -re úgy, hogy minden él ezen két halmaz között fut. Az E élhalmaz M E részhalmaza G egy párosítása, ha a G = (V,M) gráfban minden pont foka legfeljebb egy. Egy párosítás maximális ha a lehető legtöbb élet tartalmazza. A megoldandó probléma: Adott egy G = (V 1,V 2,E) páros gráf. Határozzuk meg egy maximális párosítását. Legyen G egy gráf, és M a G egy párosítása. Egy G-beli utat M-alternáló útnak hívunk, ha felváltva tartalmaz M-beli és nem M-beli éleket. Legyen M a G egy párosítása. Ekkor azokat az M-alternáló utakat, melynek egyik végpontja sincs benne a párosításban, M-re nézve javító útnak nevezzük. Tétel Legyen G = (V,E) egy tetszőleges gráf és M egy párosítása. Ha M-re nézve nincs javító út G-ben, akkor M a G gráfnak egy maximális párosítása. Javító út keresése páros gráfokban alternáló erdővel 2
gyökérelemek: V 1 azon pontjai, melyeket M nem fed le, vagyis a párosítatlan pontok. az erdők páratlan szintjei: V 2 azon még nem vizsgált pontjai, melyek egy M-en kívüli éllel elérhetőek az előző szintről az erdők páros szintjei: V 1 azon még nem vizsgált pontjai, melyek egy M-beli éllel elérhetőek az előző szintről Tétel A G = (V 1,V 2,E) páros gráfban akkor es csak akkor van az M párosításra nézve javító út, ha az M-hez tartozó alternáló erdőben páratlan szinten van párosításon kívüli pont. Bizonyítás: Ha van ilyen, akkor az erdőben van út. Tegyük fel, hogy v 0,v 1,...,v k egy alternáló út, és v 0 V 1 egy párosításon kívüli pont. i szerinti indukcióval megmutatható, hogy minden v i bekerül az erdőbe. Tehát az út utolsó pontja is bekerül, de az V 1 -beli, így csak páratlan szintre kerülhet. Stabil párosítások Adott n fiú és n lány és minden fiú és lány rangsort állít fel az általa elfogadhatónak talált partnerek között. Egy házasítás stabil, ha nincs olyan blokkoló pár, akik jobban kedvelik egymást, mint jelenlegi házastársaikat. A leánykérő algoritmus - Minden fiú, aki aktuálisan pár nélkül van minden lépésben ajánlatot tesz a számára legjobban tetsző lánynak - Ha egy lány több ajánlatot kap, a legjobbat tartsa meg feltételesen, a többit utasítsa vissza véglegesen Tétel Az algoritmus stabil párosítást ad. Maximális folyam probléma Legyen G = (V,E) gráf, s,t különböző csúcsok a forrás és a nyelő, c az éleken értelmezett nemnegatív kapacításfüggvény. Legyen (V,E,s,t,c) egy hálózat, az f : E Z folyam, ha rendelkezik a következő tulajdonságokkal: 0 f (u,v) c(u,v) teljesül minden élre (u,v) E f (u,v) = (v,w) E f (v,w) teljesül bármely v V {s,t}-re A cél a (s,v) E f (s,v) összeg maximalizálása. Maradékhálózat: Adott gráf és folyam mellett definiálhatjuk a maradékhálózatot (V,E,s,t,m), ahol Minden uv E élre, ha f (uv) < c(uv), betesszük uv-t az E -be, m(uv) = c(uv) f (uv), és az uv élet előre élnek jelöljük. Minden uv E élre, ha pozitív (azaz f (uv) > 0), betesszük a vu fordított élet az E -be, m(vu) = f (uv), és a vu élet vissza élnek jelöljük. Ford Fulkerson algoritmusa Megkonstruáljuk a maradékhálózatot. Keresünk benne egy s,t utat. Ha nincs ilyen út véget ér az algoritmus, az aktuális folyam maximális. 3
1:2 <= > 2:3 1:3 <= > <= > 1,2,3 1:3 <= > 1,3,2 3,1,2 2,1,3 2:3 <= > 2,3,1 3,2,1 2. ábra. Ha van s,t út, akkor az út előre élein növeljük a vissza éleken csökkentjük a folyam értékét, egy értékkel, amely a maximális érték, amivel ez megtehető. Alsó korlát rendezési algoritmusokra Minden olyan rendezési algoritmusnak a futását, amely elempárok egymással való összehasonlítása alapján működik leírja egy bináris döntési fa. Az algoritmus által a legrosszabb esetben szükséges összahasonlítások számát a neki megfelelő döntési fa magassága adja meg. Tétel Egy n darab elemet rendező döntési fa magassága Ω(nlogn). Bizonyítás A fa leveleinek száma a lehetséges sorrendek száma, azaz n!. Ha a fa magassága h, akkor 2 h 1 n! kell teljesüljön, következésképpen h 1 lg(n!) lg((n/e) n ) = nlgn nlge = Ω(nlgn). Következmény Minden olyan rendezési algoritmusra, amely csak az elempárok összehasonlítása alapján működik T lr (n) = Ω(nlgn). Számláló rendezés Amennyiben a rendezendő elemek által felvehető értékek halmazának számossága kicsi, akkor megadható lineáris időigényű algoritmus. A bemenet a rendezendő elemek egy n méretű A tömbben eltárolva, a kimenet ezen számok egy B tömbben rendezetten. Továbbá feltesszük, hogy a rendezendő elemek mindegyike az {1,...,k} halmazba esik. C[i] tartalmazza azt az információt, hogy a legfeljebb i nagyságú elemből hány darab van. Szamlalorend(A,B,k) for i=1 to k 4
C[i]:=0 for j=1 to n C[A[j]]:=C[A[j]]+1 for i=2 to k C[i]:=C[i]+C[i-1] for j=n downto 1 {B[C[A[j]]]:=A[j] C[A[j]]:=C[A[j]]-1} Megjegyzés: Az algoritmus ötlete nem csak akkor használható, ha az elemek az {1,...,k} halmazba esnek. Általánosabb esetben meg kell keresni a minimális elemet min-t, és C[i] a legfeljebb i min + 1 nagyságú elemeket tartalmazza. Definíció Egy rendezést stabilnak nevezünk, ha az azonos értékű elemek ugyanabban a sorrendben jelennek meg a kimeneti tömbben, mint ahogy a bemeneti tömbben szerepeltek. A leszámláló rendezés stabil. Futási idő: Θ(n + k) Példa A=[3,1,3,1,2,1,1,2,3] C=[4,2,3] C=[4,6,9] B=[0,0,0,0,0,0,0,0,3] C=[4,6,8] B=[0,0,0,0,0,2,0,0,3] C=[4,5,8] B=[0,0,0,1,0,2,0,0,3] C=[3,5,8] Példa Számjegyes vagy radix rendezés 329 720 720 329 457 436 329 436 657 457 436 457 839 657 839 657 436 329 457 720 720 839 657 839 Bemenet: H k dimenziós vektorok halmaza, ahol az i-edik komponens minden i-re egy olyan elemtípusból kerül ki, amelyen adott egy rendezési reláció. Kimenet: H elemei a lexikografikus rendezés alapján rendezve. Definíció Egy X = (x 1,...,x k ) vektor megelőzi az Y = (y i,...,y k ) vektort a lexikografikus rendezésben, ha i, amelyre teljesül, hogy j < i x j = y j és x i < y i. Elvi algoritmus for i:=d downto 1 H Stabil rendezése a kulcs i-edik jegye szerint 5
Helyesség: A ciklusmag végrehajtása után a H halmaz rendezett lesz arra a kulcsra nézve, amely az eredeti kulcs [i..d] jegyeit (karaktereit) tartalmazza. Bizonyítás i-szinti indukcióval. Futási idő Ha a jegyek szerinti rendezés lineáris idejű (pl számláló), akkor a futási idő O(dn). Kiskérdések jövő hétre Dijskstra algoritmus Ford Bellman algoritmus Floyd Warshall algoritmus Kruskal algoritmus 6