Top Banner

of 91

Gráf algoritmusok

Nov 05, 2015

Download

Documents

ahimpli

Gráf algoritmusok
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
  • 1

    Grfalgoritmusok ___________________________________________________________ 2 1. Nhny problma modellezse grfokkal_______________________________________ 2

    1.1 tkeress ______________________________________________________________________ 2 1.2 Minimlis kltsg t keresse _____________________________________________________ 3 1.3 Minimlis kltsg fesztfa keresse ________________________________________________ 3 1.4 Irnytott krmentes grf (DAG) topologikus rendezse __________________________________ 4 1.5 Ersen sszefgg komponensek meghatrozsa _______________________________________ 5 1.6 Maximlis prosts ______________________________________________________________ 5 1.7 Optimlis teljes prosts __________________________________________________________ 6

    2. Alapfogalmak, jellsek_____________________________________________________ 7 3. Grfok brzolsa ________________________________________________________ 10 4. Bejrsi stratgik, szlessgi bejrs ________________________________________ 13

    4.1 Bejrsi/keressi stratgik _______________________________________________________ 13 4.2 Szlessgi bejrs/keress algoritmusa ______________________________________________ 17

    5. Legrvidebb utak egy forrsbl _____________________________________________ 24 5.1 Dijkstra algoritmus______________________________________________________________ 25 5.2 Bellman-Ford algoritmus _________________________________________________________ 31

    6. Legrvidebb utak minden cscsprra ________________________________________ 36 6.1 Floyd algoritmus _______________________________________________________________ 36 6.2 Tranzitv lezrt_________________________________________________________________ 40 6.3 Warshall algoritmus _____________________________________________________________ 41

    7. Minimlis kltsg fesztfk _______________________________________________ 42 7.1 A piros-kk eljrs ______________________________________________________________ 44 7.2 Prim algoritmus ________________________________________________________________ 49 7.3 Kruskal algoritmus______________________________________________________________ 55

    8. Mlysgi bejrs s alkalmazsai ____________________________________________ 61 8.1 Mlysgi bejrs _______________________________________________________________ 61 8.2 DAG tulajdonsg _______________________________________________________________ 75 8.3 DAG topologikus rendezse ______________________________________________________ 77 8.4 Ersen sszefgg komponensek meghatrozsa ______________________________________ 83

    Felhasznlt irodalom __________________________________________________________ 91

  • 2

    Grfalgoritmusok

    A megoldand feladatok, problmk modellezse sorn sokszor tallkozunk bizonyos "dolgok" (az absztrakt objektumok) kztti kapcsolatokat ler binris relcikkal. Ezen relcik (kapcsolatok) szemlletes lersnak egyik eszkze a grf. A grfokkal az ember szmra knnyen "emszthet" formban lehet brzolni a relcik tulajdonsgait (pl.: szimmetria = irnytatlansg vagy kett hossz kr, reflexivits = hurokl stb.). A modell objektumainak megfeleltetjk a grf cscsait az objektumok kztti kapcsolatok lersra, pedig a grf leit hasznljuk. Ezen szemlletes s knnyen kezelhet tulajdonsga miatt lett a grf elterjedt modellez eszkz. Mivel egy ilyen ltalnos fogalom, mint a binris relci modellezsre hasznljuk, nagyon sok problma megfogalmazhat, mint grfelmleti feladat. A grfalgoritmusok cmsz alatt nhny fontos, a gyakorlati letben is gyakran elfordul feladatot, s a feladat megoldsra hasznlhat algoritmust ismertetnk.

    1. Nhny problma modellezse grfokkal

    A grfok szertegaz felhasznlsnak illusztrlsra nzznk nhny olyan problmt, amelyekre termszetes mdon addik a grf, mint modell felhasznlsa.

    1.1 tkeress Problma: Szeretnnk eljutni autval Budapest egyik pontjrl egy msik pontjra. Rendelkeznk egy Budapest trkppel.

    Modell: Az tkeresztezdseknek, csompontoknak megfeleltetjk a grf cscsait, az utcknak, pedig a grf leit. Mivel nem minden utcn lehet mindkt irnyba haladni az autval (lehet csak egyirny az utca), gy irnytott leket hasznlunk. Ezen kvl az eljuts egyb jellemzje most kzmbs szmunkra, teht eltekintnk az utck (lek) jellemzstl (tulajdonsgaitl), ezrt az leink legyenek slyozatlanok.

    Teht a grf tpusa: irnytott slyozatlan

    Feladat: Keressnk utat az egyik pontbl a msikba, azaz keressk az leknek egy olyan sorozatt, amelyek mentn haladva (szablyosan) eljuthatunk a kezdcscsbl a clcscsba.

  • 3

    1.2 Minimlis kltsg t keresse

    Problma: Szeretnnk autval eljutni az egyik vrosbl egy msik vrosba. Vegyk figyelembe, az egyes utak kltsgeit (pl.: benzinkltsg, thasznlati dj) s elnyeit (pl.: szp panorma, nincs dug stb.).

    Modell: A vrosoknak megfeleltetjk a grf cscsait, a vrosokat sszekt thlzatnak, pedig a grf leit. ltalban feltehetjk, hogy kt vros kztt, ha van kzvetlen orszgt, akkor azon oda-vissza egyarnt eljuthatunk (szimmetrikus relci ), gy a grf lei legyenek irnytatlanok. Az orszgutak jellemzit megprbljuk kvalitatv lerni. Ezen jellemzk lesznek az egyes lek tulajdonsgai, amelyet leggyakrabban kltsgeknek (slyoknak) tekintnk, ezrt a problma grfjt lslyozottnak vlasztjuk.

    Teht a grf tpusa: irnytatlan lslyozott

    Feladat: Keressnk utat az egyik pontbl a msikba, de ezen t legyen szmunkra a legkevsb rossz, azaz legyen az egyik pontbl a msik pontba vezet utak kzl a legkisebb kltsg.

    1.3 Minimlis kltsg fesztfa keresse

    Problma: Nhny vros elektromos elltst szeretnnk megoldani, azaz elektromos hlzatot szeretnnk telepteni a vrosok kztt. Adottak a vrosok kztti elektromos vezetkek kiptsnek kltsgei. Vannak vrosok, amelyek kztt (a fldrajzi krlmnyek miatt) vezetk nem vagy csak "risi" kltsggel telepthet.

    Modell: A vrosoknak megfeleltetjk a grf cscsait, az elektromos vezetkeknek a grf leit. Mivel a vezetken az ram "mindkt irnyba folyik" (szimmetrikus relci ), ezrt a grfunk legyen irnytatlan. A vezetk kiptsnek kltsge (a kapcsolat egy tulajdonsga) pedig legyen az l egy tulajdonsga, s nevezzk az l slynak vagy kltsgnek

  • 4

    Teht a grf tpusa: irnyts nlkli lslyozott

    Feladat: Hatrozzuk meg a grffal brzolt elektromos hlzatnak egy olyan rszhlzatt, amelyre teljesl, hogy brmely kt vros sszekttetsben van (kzvetlen vagy kzvetve), s ezen tulajdonsg rszhlzatok kzl, az illet rszhlzat teleptsnek sszkltsge a legkisebb.

    1.4 Irnytott krmentes grf (DAG1) topologikus rendezse Problma: Tegyk fel, hogy egy sszetett tevkenysg (pl.: egy termk ellltsa, a tovbbiakban nevezzk gyrtsnak) felbonthat rsztevkenysgekre. Szeretnnk kszteni egy gyrtsi technolgit, azaz a rsztevkenysgek olyan szekvencilis sorozatt, amelyet mintegy "receptet" vgrehajtva, az sszetett tevkenysg elvgezhet (elkszthetjk a termket). Vegyk figyelembe, hogy a szekvencilis sorrendben bizonyos tevkenysgeknek meg kell elznik ms tevkenysgeket, klnben fizikailag ellentmondsos lenne a technolgiai lers (pl.: a palacsintt addig nem tlthetjk meg, mg a tsztt meg nem stttk).

    Modell: A tevkenysgeknek megfeleltetjk a grf cscsait, az emltett megelzsi relcinak pedig a grf leit. Mivel a megelzsi relci nem megfordthat, ezrt irnytott grfot hasznlunk. Mivel a problma sorn nem foglalkozunk az egyes folyamatok slynak megfeleltethet tulajdonsgaival, gy az leket sly nlkl tekintjk.

    1 Directed Acyclic Graph

  • 5

    Teht a grf tpusa: irnytott slyozatlan

    Feladat: rjuk fel a tevkenysgek egy olyan szekvencilis sorrendjt, ahol az i-edik tevkenysget nem elzheti meg a j-edik tevkenysg ( ji ), ha a gyrts "fizikai" sorrendjben a j-edik tevkenysg kzvetlenl vagy kzvetve az i-edik tevkenysgre vagy annak eredmnyre pl.

    Pl.: 1, 2, 3, 4, 5, 6, 7, 8 vagy 1, 3, 5, 2, 6, 4, 7, 8 sorozatok, a feladatban elrt tulajdonsggal rendelkez szekvencilis sorozatok

    1.5 Ersen sszefgg komponensek meghatrozsa

    Problma: Adott Budapest trkpe s szeretnnk eldnteni, hogy a vros brmely pontjbl brmely pontjba eljuthatunk autval vagy sem. Pldul az 1.1-es pldban ltott grfon, a 9-es pontba el tudunk jutni, de onnan "szablyosan" kijnni mr nem tudunk (egyirny zskutca).

    Modell: Legyen ugyan az, mint az 1.1-es tkeress problmnl, irnytott s slyozatlan grf.

    Feladat: Osztlyozzuk a grf pontjait oly mdon, hogy egy osztlyon bell az egyik pontbl a msikba el tudok jutni, s viszont, de ez klnbz osztlybeli pontokra ne teljesljn. Teht adjuk meg a grf ersen sszefgg komponenseit. Ha a grf minden pontja egy ersen sszefgg komponensbe esik, akkor brmely pontbl, brmely pontba el tudok jutni autval.

    1.6 Maximlis prosts

    Problma: Arthur kirly szeretn sszehzastani a lovagjait. Az udvarhlgyeit szemeli ki a lovagok jvendbeli felesgeinek. Megbzza Merlin varzslt, hogy dolgozzon ki egy eljrst a leend prok kivlasztsra, gy hogy lovagjai minl elgedettebbek legyenek.

    Modell: Merlin a kvetkezt tallja ki: A lovagoknak s udvarhlgyeknek megfeleltetjk a grf cscsait. Mindegyik lovag jellje meg (Merlin grfjn) azt az udvarhlgyet, akivel el tudn kpzelni a boldog hzasletet. Ezek a szimptia viszonyok lesznek a grf lei. Mivel az udvarhlgyek vlemnyt nem vesszk figyelembe, azaz ha egy lovagnak szimpatikus az illet hlgy, akkor a klcsns szimptit knytelen a hlgy magra erltetni, ezrt a relcikat tekintsk szimmetrikusnak, azaz a grf legyen irnytatlan Tovbb, a problma sorn nem foglalkozunk az egyes viszonyok rzelmi mlysgeivel, (slynak megfeleltethet tulajdonsgval), gy az leket sly nlkl tekintjk.

  • 6

    lovagok udvarhlgyek

    Teht a grf tpusa: irnyts nlkli slyozatlan

    Feladat: Vlasszunk ki prokat gy, hogy azok szma maximlis legyen.

    1.7 Optimlis teljes prosts Problma: Arthur kirly gy gondolja, hogy az elbb emltett eljrs mgsem tkletes prvlaszts a lovagjai szmra, klnben is, ha valamibl lehet hasznot hzni, akkor tegyk is meg. Ismt Merlinhez fordult tancsrt.

    Modell: Minden lovagnak nyilatkoznia kell az sszes hlgyrl (s viszont), milyen mrtkben rokonszenvez az illetvel. Ezek az rzelmek rtelemszeren lehetnek pozitvak s negatvak is (a negatv rzelem ellenszenvet takar). A hzassgok utn mindenki annyi aranyat fizet a kirlynak, amennyi a szmra kijellt pr fel rzett rokonszenv rtke, negatv rzelem esetn a kirly fizet az illetnek. Mivel most az rzelmi relcik nem szimmetrikusak, gy legyenek az lek irnytottak, s a hozzjuk rendelt rzelmi rtkeket tekintsk az l slynak.

    Teht a grf tpusa: irnytott slyozott

    Feladat: Talljunk prokat, gy hogy Arthur kirly bevtele a legnagyobb legyen.

    lovagok hlgyek

    3

    0

    -3

    4

    1

    2

  • 7

    2. Alapfogalmak, jellsek A tovbbiakban ismertnek felttelezzk az alapvet grfelmleti fogalmakat, defincikat s tteleket. Most nzznk nhny fontosabb fogalmat kevsb formlisan, inkbb csak a felelevents szintjn.

    Irnytott grf: ( )EVG ,= pr, ahol V a cscsok vges halmaza (ltalban 1,2,3,,n), VVE pedig az lek halmaza.

    l: ( ) Evue = , ,ahol Vvu , cscsok szma: Vn = lek szma: Ee =

    1-bl a 2-be vezet l

    hurokl

    Az irnytott grf defincijnak kiterjesztse irnyts nlklire: ( )EVG ,= , amelyre, ha ( ) Evu , , akkor ( ) Euv , is teljesl (E a V elemeibl alkotott rendezetlen prok egy rszhalmaza, jells: [u,v] rendezetlen pr). A szakirodalomban ltalban az irnyts nlkli grfoknl a hurkok s a tbbszrs (prhuzamos) lek nincsenek megengedve.

    G egyszer grf, ha nincs benne hurokl s tbbszrs l.

    Szomszd/rkvetkez fogalma: v az u-nak a szomszdja, vagy rkvetkezje.

    ( ha nincs irnyts, akkor a relci szimmetrikus) Jells: vu

    t: kvvv ,...,, 10 sorozat k hosszsg t, ha [ ] ( ) Evvki ii ,:..1 1 Jells: kvv >~0 Kr: egy k hosszsg t kr, ha kvv =0 . A krmentes (pronknt klnbz cscsokbl ll) utat egyszer tnak nevezzk.

    1u v

  • 8

    Minimlis krk:

    irnytott grfban k=1

    irnyts nlkli grfban k=3

    A krt egyszer krnek nevezzk, ha nincs benne bels kr, azaz kr, s minden v1,..,vk esetn pronknt klnbz cscsokbl ll.

    Krmentes grf: a krt nem tartalmaz grf.

    Fokszm: Irnyts nlkli grf fokszma a cscsbl kiindul lek szma Irnytott grfnl megklnbztetjk a befokot (bemen lek szma) s a kifokot

    (kimen lek szma). Ekkor a fokszmot ezek sszege adja.

    sszefggsg: G Irnyts nlkli grf sszefgg brmely kt cscs sszekthet ttal a grf egy darab sszefgg komponensbl ll

    Pl.: A fenti grf sszefgg komponensei: { }4}{6,3}{5,2,1

    G irnytott grf akkor s csak akkor sszefgg, ha az lek irnytsnak figyelmen kvl hagysval kapott irnyts nlkli grf sszefgg.

    G irnytott grf ersen sszefgg brmely kt cscs sszekthet ttal (figyelembe vve az irnytst, teht vu >~ s uv >~ egyarnt kell, hogy teljesljn)

    Teljes grf: Olyan irnyts nlkli grf, amelynek brmely kt cscsa szomszdos

    Pros grf: Olyan irnyts nlkli grf, amelynek cscsai kt, diszjunkt halmazra bonthatk, s l csak a kt klnbz halmaz cscsai kztt mehet, azonos halmazban lv cscsok kztt nem. (lsd: Arthur kirly hzastsi problmi)

    Erd: krmentes, irnyts nlkli grf.

    Fa: sszefgg, krmentes, irnyts nlkli grf.

    v

  • 9

    lslyok: REc : egy vals rtk fggvny, amelynek rtelmezsi tartomny a grf lhalmaza.

  • 10

    3. Grfok brzolsa

    A grfok brzolsra kt, a gyakorlatban igen elterjedt adatszerkezetet adunk. Az egyik tisztn aritmetikai brzols (szomszdsgi-mtrix), a msik vegyes, aritmetikai s lncolt brzols (llista).

    1) Szomszdsgi-mtrix (adjacencia-mtrix , cscsmtrix)

    Legyen G=(V,E) vges grf, s n a cscsok szma. Ekkor a grfot egy nn -es mtrixban brzoljuk, ahol az oszlopokat s a sorokat rendre a cscsokkal indexeljk (ez leggyakrabban 1,..,n). Egy mezben akkor van 1-es, ha a hozz tartoz oszlop ltal meghatrozott cscs szomszdja a sor ltal meghatrozott cscsnak.

    ,azaz

    =

    EjihaEjihajiA ),( , ,1

    ),( , 0],[

    Pl.:

    A fenti irnytott grf esetn:

    0100000000010001110000110

    A fenti irnytatlan grf esetn:

    0101010110010111110100110

    (szimmetrikus)

    Ha slyozott a grf, akkor a slyokat (lkltsgeket) is el kell trolni. Ezt is a mtrixon bell oldjuk meg. A sly vals szmokat vehet fel. Termszetesen addik, hogy ahol elzleg 1-est rtunk, azaz ltezett az illet l, oda most rjuk be az l kltsgt. Kt tovbbi eset maradt: a mtrix ftlja, s az olyan mezk, amelyek esetn nem ltezik l. Vezessk be a lslyt, s a nem ltez lek esetn a mtrix megfelel helyre rjunk -t. Egy ilyen "len" csak vgtelen nagy kltsggel tudunk vgighaladni (teht nem tudunk). A mtrix ftljba kerlnnek a huroklek kltsgei, ami azt takarja, hogy az illet lbl nmagba ilyen kltsggel tudunk eljutni. Ennek, az elkvetkezend feladatok esetn, szmunkra nincs jelentsge, mivel, ha eljutottunk egy cscsba, akkor tovbbi kltsg terhe mellett nem akarunk a cscsba tovbbra is "krzni" (mivel az elkvetkezend algoritmusok jelents rsze

  • 11

    minimlis kltsg problmk megoldsra trekszik). Teht, ha mr eljutottunk egy cscsba, akkor a kvetkez lpsekben az ott tartzkods kltsge legyen 0. (A gyakorlati letben ritkn elfordul feladatoknl lehet rtelme, pl.: negatv kr vagy hurokl egy minimlis kltsg tkeressnl, ekkor vgtelen nagy haszonra tudunk szert tenni (lsd gyakorlaton: arbitrzs). Teht lslyozott grf esetn:

    [ ]

    =

    =

    klnbenEjisjihajic

    jihajiC

    ,

    ),( , ),( , 0

    ,

    Helyfoglals: A helyfoglals mindig ugyanakkora, fggetlen az lek szmtl, a mtrix mretvel n2-tel arnyos. (Az n pont teljes grfnak is ekkora a helyfoglalsa.) Teht sr grfok esetn rdemes hasznlni, hogy ne legyen tl nagy a helypazarls.

    2) Szomszdsgi lista (llista)

    A Grf minden cscshoz egy listt rendelnk. Ezen listban tartjuk nyilvn az adott cscsbl kimen leket.

    Megvalsts: Vegynk fel, egy mutatkat tartalmaz Adj[1..n] tmbt (a cscsokkal indexeljk a tmbt). A tmbben lv mutatk mutatnak az llistkra. (Az llistk szoksos listk, lehetnek egy vagy ktirny, fejelemes vagy fejelem nlkli, ez most nem lnyeges a grf szempontjbl.) Irnytott grf esetn, az llistk listaelemei reprezentljk az leket. Az lnek megfelel listaelemet abban a listban troljuk, amelyik cscsbl kiindul az l, s a clcscs cmt (tmb indext, cmkjt stb.) eltroljuk a listaelemben. Teht az Eji ),( l megvalstsa: az i-edik listban egy olyan listaelemmel, amelyben eltroltuk a j-t , mint az l clcscst. Irnytatlan grf esetn, egy lnek kt listaelemet feleltetnk meg, azaz egy irnytott lt egy oda-vissza mutat, irnytott lprral valstunk meg a korbban emltett mdon. lslyozott grf esetn, az l slyt is a listaelemben fogjuk trolni.

    Plda:

    Irnytott grf esetn:

    Helyfoglals: en +

  • 12

    Irnytatlan grf esetn:

    Helyfoglals: en 2+

    Helyfoglals: Mivel a memriaigny az lek szmval arnyos, ezrt az llists brzolst ritka grfok ( 2VE

  • 13

    4. Bejrsi stratgik, szlessgi bejrs A bejrsi/keressi algoritmusok feladata a grf feldertse, szerkezetnek a megismerse vagy adott tulajdonsg cscs keresse stb. Az ismertetsre kerl bejrsi algoritmusok a cscsok elrsnek stratgijban klnbznek. Kt bejrsi algoritmust tanulunk a flv sorn, a szlessgi s a mlysgi bejrst. Most nzzk a szlessgi bejrst, nhny fejezettel ksbb, pedig megvizsgljuk a mlysgi bejrst.

    4.1 Bejrsi/keressi stratgik A bejrsi stratgik alaptlethez tekintsk az albbi kis pldt a Rnyai-Ivanyos-Szab: Algoritmusok c. tanknyvbl. Van egy kzpkori kisvros, ahol az utcai lmpkat egy korosod lmpagyjtogat ember gyjtja fel. Este az illet egymaga indul munkba. A vros ftern felgyjtja az els lmpt, majd a ftrrl kivezet egyik utcban gyjtogatja a lmpkat. Amikor egy elgazshoz r, valamelyik utcba befordulva folytatja tevkenysgt. Elrve a vros szlre, egy zskutcba vagy egy olyan utcba jutva, ahol mr gnek a lmpk, az reg visszamegy az elz telgazshoz, s egy olyan utcba fordul, amelyikben mg nem gnek a lmpk. Vgl visszarve a ftrre (persze a ftrrl kivezet sszes utat mr bejrta), elvgezve aznap esti munkjt hazatr aludni. Ezt az elvet hasznlja a mlysgi keress. Egy msik este a lmpagyjtogat fradtnak s gyengnek rzi magt, ht szl a bartainak, hogy segtsenek neki az esti munkjban. (Nagyon sok bartja van az illetnek.) A csapat kimegy este a ftrre, s a kvetkez stratgia szerint gyjtogatja a lmpkat. A ftren meggyjtjk a lmpkat, majd annyi fel oszlik a csapat, ahny ftrrl kivezet t van. Mindegyik csapat elindul egy kivezet ton, s t kzben felgyjtja a lmpkat. Amikor a csapat egy telgazshoz r, sztoszlik kisebb csapatokra, s mindegyik kisebb csapat tovbb indul az elgazs egyik mg stt utcjn. Amikor egy csapat mr nem tud tovbb menni (vros szle, zskutca, minden lmpa g a krnyez utckban), akkor a csapattagok hazamennek aludni. Ez az elve a szlessgi keressnek. Ha fentrl nznnk a vrost, ahogy kigyulladnak a lmpk, a kvetkezket ltnnk. Az els esetben a ftrrl a vros szle fel halad t mentn gyulladnak ki a lmpk, majd a vros szlnl egy-egy nagyobb foltok kezdenek kivilgosodni, mg a vros kzepn mg mindig lesznek stt terletek. A msodik esetben, a kzppontbl a vros szle fel egyre nagyobb sugar krben terjed a vilgossg.

    Most nzzk az emltett vros fellnzett:

    1) Mlysgi stratgia: Az els nhny lps utn, mr csak a teljessg ignye nlkl nhny pillanatfelvtel.

  • 14

  • 15

  • 16

    2) Szlessgi stratgia:

    A pldbl is kitnik, hogy a szlessgi bejrs knnyen prhuzamosthat.

    Mindenki emlkszik mg a mlt flvben, a fknl tanult szntfolytonos bejrsra. Nzzk meg az albbi pldn:

  • 17

    Az brkon is jl lthat, hogy a szintfolytonos bejrs a szlessgi bejrs specilis esete fkra alkalmazva, a fa gykert vve kezdcscsnak.

    4.2 Szlessgi bejrs/keress algoritmusa 4.2.1 Definci: Legyen G=(V,E) grf s Vus , cscsok, s us >~ t kvvv ,...,, 10 ,ahol s=v0 , u=vk. Az t hossza legyen, az t mentn rintetett lek szma, azaz

    kvvvus k == 1,...,,~ 10> Az u cscs s-tl val tvolsga legyen az us >~ utak kzl a legrvidebb lszma, azaz

    { } us usd >~min),( =

    Ha nincs us >~ t a grfban, akkor legyen =),( usd

    Feladat: Adott egy G irnytott vagy irnyts nlkli, vges grf. rjuk ki a cscsokat egy Vs kezdcscstl val tvolsguk nvekv sorrendjben. Minden cscsra jegyezzk fel a

    kezdcscstl val tvolsgt, s a hozz vezet (egyik) legrvidebb ton a megelz cscsot. Az azonos tvolsg pontok egyms kztti sorrendje, a feladat szempontjbl legyen tetszleges.

    Az algoritmus elvt az elzekben mr lttuk, most foglaljuk ssze rviden: 1) Elszr elrjk a kezdcscsot. 2) Majd elrjk a kezdcscstl 1 tvolsgra lv cscsokat (a kezdcscs szomszdait) 3) Ezutn elrjk s-tl 2 tvolsgra lv cscsokat (a kezdcscs szomszdainak a

    szomszdait), s gy tovbb. 4) Ha egy cscsot mr bejrtunk, akkor a ksbbi odajutsoktl el kell tekinteni

    Hogyan tudjuk biztostani a fenti elrsi sorrendet? Nzzk meg ADT szinten.

    Az elrsi sorrendnl azt kell figyelembe venni, hogy amg az sszes kezdcscstl )0( k tvolsgra lv cscsot ki nem rtuk, addig nem szabad k-nl kisebb vagy nagyobb tvolsg cscsokat kirni, st mire egy k tvolsg cscsot kirunk, mr az sszes k-nl kisebb tvolsg cscsot ki kellett rnunk. Egy k+1 tvolsg cscs biztosan egy k tvolsg cscs szomszdja (az egyik legrvidebb ton a megelz cscs biztosan k tvolsgra van a kezdcscstl). A k+1 tvolsg cscsokat a k tvolsg cscsok szomszdai kztt kell keresni (nem biztos, hogy az sszes szomszd k+1 tvolsg, lehet, hogy egy rvidebb ton mr elrtk.). Hasznljunk sor adattpust s biztostsuk azt az invarins tulajdonsgot, hogy a sorba csak k vagy k+1 tvolsg cscsok lehetnek az elrsk sorrendjben, amely egyben az s-tl val tvolsguk szerinti (nveked) sorrendnek is megfelel. Ameddig ki nem rl a sor, vegynk

  • 18

    ki az els elemet, rjuk ki s terjesszk ki, azaz a mg "meg nem ltogatott" szomszdait rjk el s rakjuk be a sorba.

    4.2.2 llts: Az emltett ciklust vgrehajtva teljesl a fenti invarins s a cscsokat tvolsguk sorrendjben rjk el s rjuk ki.

    Bizonyts: Teljes indukcival: (k tvolsg cscsok a sorban megelzik a k+1 tvolsg cscsokat, s a sorban lv cscsok tvolsgnak az eltrse legfeljebb 1)

    k=0: Indulskor berakjuk a sorba a kezdcscsot, ami 0 tvolsgra van. Kivesszk a kezdcscsot a sorbl s kirjuk, majd a szomszdait, az 1 tvolsgra lv cscsokat rakjuk a sorba.

    1+ kk : Indukcis feltevs szerint a sorba csak k s k+1 tvolsg cscsok vannak tvolsguk szerint nvekven, s a sor invarinsa, hogy a korbban bekerlt cscsot korbban veszi ki. Az sszes k tvolsg cscsot kiterjesztjk, mieltt egy k+1 tvolsg cscsot kivennnk, s amg ki nem vettk az sszes k tvolsg cscsot, addig csak k+1 tvolsg cscsokat rakunk a sorba. Csak az els k+1 tvolsg cscs kivtelnl kerlhet a sorba k+2 tvolsg cscs, de addigra mr az sszes k+1 tvolsg cscs a sorban lesz, mert az sszes k tvolsg cscsot kiterjesztettk. k+1 tvolsg cscsok megelzik a k+2 tvolsg cscsokat s a tvolsg klnbsg is mindig legfeljebb 1 marad.

    Ha egy cscsot egyszer mr elrtnk, akkor ksbb nem kell jra elrni. Hasznljunk egy halmazt, amelybe az elrt cscsokat rakjuk, kezdetben csak a kezdcscsot rakjuk bele. Amikor egy cscsot elszr elrnk, dobjuk be a halmazba, s minden cscs kiterjesztsnl csak azokat a szomszdait tekintsk (rakjuk a sorba), amelyeket mg nem rtnk el, azaz nincsenek benne az elrt halmazban Minden cscsot csak egyszer rnk el (tesznk a sorba). Minden cscsot csak egyszer runk ki.

    Mivel a cscsok szma vges s minden cscsot legfeljebb egyszer rnk el s terjesztnk ki. A bejrs biztosan terminl.

  • 19

    Teht az algoritmus ADT szinten:

    Az algoritmusban hasznlt Szomszd(u) absztrakt fggvny az Vu cscs szomszdainak halmazt adja meg. A tbbi jells magtl rtetdik.

    Most nzzk meg egy pldn az algoritmus mkdst ADS szinten:

    Az ADT szinten trgyalt halmazt most a cscsok sznezsvel valstsuk meg, st a cscsoknak ne csak kt llapott klnbztessk meg, hanem az albbi hrom llapott. 1) Amikor egy cscsot mg nem rtnk el legyen fehr szn. Indulskor a kezdcscs

    kivtelvel minden cscs ilyen. ( okElrtCscsuQu s ) 2) Amikor egy cscsot elrnk s bedobjuk a sorba, sznezzk szrkre. A kezdcscs

    indulskor ilyen. ( okElrtCscsuQu s ) 3) Amikor egy cscsot kivettnk a sorbl s kiterjeszttettk (elrtk a szomszdait), a szne

    legyen fekete. ( okElrtCscsuQu s )

    ADT szinten egy cscs szomszdainak az elrsi sorrendjrl (a Szomszd(u)\ ElrtCscsok feldolgozsi sorrendjrl) nem tettnk fel semmit, azaz a szomszd cscsok elrse nem egyrtelm, teht egy nem determinisztikus algoritmust kaptunk. Azonban gyakorlati feladatoknl nha megkveteljk a szomszd cscsok elrsnek az egyrtelmsgt, hogy az algoritmus mkdse egyrtelm, azaz ellenrizhet legyen (pl.: ZH-ban algoritmus szemlltetse). A kvetkez pldban a szomszd cscsok feldolgozsi sorrendje legyen a cscsok cmkje szerint nvekeden rendezett. A kvetkez bra-sorozaton megfigyelhet a szlessgi keress algoritmusa lpsenknt. A cscsokra, a cmkn kvl, felrunk kt pozitv egsz szmot. Az els szm megadja, hogy az illet cscsot hnyadikknt rnnk ki, a msodik szm, pedig a kezdcscstl val tvolsgot tartalmazza. Kezdetben legyenek -1 extremlis rtkek. A kezdcscs legyen az 1-es cmkj cscs. Kezdetben minden cscs fehr kivve a 1-es cscsot, amelyik szrke. A sorban is kezdetben csak az 1-es cscs van. Az els lpsben kivesszk a sorbl az 1-es cscsot, majd kiterjesztjk, azaz elrjk az 1-es cscs mg fehr szomszdait (2,3,4), amelyeket szrkre szneznk, s bedobunk a sorba. Az 1-es cscsot kiterjesztettk, teht kszen vagyunk vele, gy feketre sznezzk. Figyeljk meg, hogy a sor a szrke cscsokbl ll, az elrsi szm

    all v eleme Szomszd(u) \ ElrtCscsokSorba(Q,v)

    Halmazba(ElrtCscsok,v)

    not res?(Q)Sorbl(Q,u)

    Kir(u)

    resSor(Q)resHalmaz(ElrtCscsok)

    Sorba(Q,s)Halmazba(ElrtCscsok,s)

    SZB(G,s)

  • 20

    (els szm) szerint rendezve, azaz mindig azt a szrke cscsot terjesztjk ki, amelyiknek az elrsi szma a legkisebb, mivel ez a cscs kerlt be legkorbban a sorba.

    Figyeljk meg, hogy ebben lpsben nem kerl be jabb cscs a sorba, mivel a 3-as cscsot terjesztjk ki, de a 3-as minden szomszdjt mr elrtk, azaz nincs fehr szn szomszdja.

  • 21

    A tovbbiakban, mivel a sorban lv cscsoknak nincsenek szomszdaik, mr csak a sorbl vesszk ki a cscsokat s feketre sznezzk.

  • 22

    Az utols brn berajzoltuk a kezdcscsbl az illet cscsba vezet, az algoritmus ltal feldertett legrvidebb t mentn az leket. A cscsok, s a berajzolt lek alkotta rszgrfot jobban megnzve lthat, hogy egy kezdcscs gyker ft alkot, amely mentn minden cscs a legrvidebb ton rhet el.

    4.2.3 Definci: F=(V',E') grf a G=(V,E) grf szlessgi fja, ha V' elemei az s-bl elrhet cscsok, EE ' s 'Vv cscsra pontosan egy egyszer t vezet s-bl v-be, s ez az t egyike az s-bl v-be vezet legrvidebb G-beli utaknak.

    Most nzzk meg az algoritmust az brzols szintjn: -llists brzolssal -cscsmtrixos brzolssal (gyakorlaton)

    A cscsok sznt egy [ ]nszn ..1 (cscsokkal indexelt) tmbbe troljuk. Tovbbi feladatunk a cscs tvolsgnak, s a hozz vezet ton a megelz cscsnak (a szlessgi fa felrajzolshoz) az eltrolsa. Ezt egy [ ]nd ..1 s egy [ ]nP ..1 tmbben tesszk meg. Az rtkeket akkor ismerjk, amikor elrjk a cscsot, azaz amikor szrkre sznezzk, teht ekkor fogjuk a tmbbe berni. Kezdetben legyen minden cscs vgtelen tvolsgra a kezdcscstl, s ha nincs a grfban us >~ t, akkor az u tvolsga vgtelen is marad.

  • 23

    A programot a fenti pldn lefuttatva, a kvetkez eredmnyeket kapjuk: d[1..10]=[0,1,1,1,2,2,3,3,3,2] s P[1..10]=[NIL,1,1,1,2,2,5,5,5,4]. Lthat, hogy a P[1..10] tmb tartalmbl knnyen "elllthat" a szlessgi fa, illetve brmely cscsra kirhat a legrvidebb t (gyakorlaton).

    Mveletigny: Az algoritmus az inicializl lps sorn minden cscsnak belltja a sznt, a d s P tmbbeli rtkt. Ez n-el arnyos mveletigny: )(n . llists brzols esetn: minden cscsot (amibe megy l) legfeljebb egyszer tesznk a sorba. Mikor a sorbl kivesszk a cscsot, az llistjn lv cscsokat rjk el. Mivel minden cscs legfeljebb egyszer kerl a sorba s onnan ki, ezrt minden llistn legfeljebb egyszer megynk vgig, teht sszessgben legfeljebb az sszes llistn egyszer megynk vgig. Az llistk egyttes hossza e, gy a mveletigny O(e) (Ha nem sszefgg a grf, akkor lehetnek olyan lek, amik mentn nem jrunk, ezrt nem mondhatunk -t).

    )()()()( enennT +=+= Cscsmtrixos brzols esetn: egy cscs szomszdainak a vizsglata, a grf egy n hossz sornak a vgigjrst eredmnyezi, ezt az sszes cscsra vettve megkapjuk:

    )()*()( 2nOnnnOnT =+= A tovbbiakban kln nem hangslyozzuk, hogy e-vel arnyos mveletigny cscsmtrixos brzols esetn mindig n2-el arnyos mveletet jelent.

    szn[v^.Cimke]:=szrked[v^.Cimke]:=d[u]+1

    P[v^.Cimke]:=uSorba(Q,v^.Cimke)

    vNILszn[v^.Cimke]=fehr

    v:=v^.Kvetkezl

    SKIP

    not res?(Q)u:=Els(Q)

    Kir(u)v:=Adj[u]

    szn[s]:=szrked[s]:=0

    resSor(Q)Sorba(Q,s)

    for u:=1 to nszn[u]:=fehrd[u]:=vgtelen

    P[u]:=NIL

    SZB(G,s)

  • 24

    5. Legrvidebb utak egy forrsbl

    Problma: Adott egy G=(V,E) lslyozott, vges grf s egy Vs cscs .n. forrs. Szeretnnk meghatrozni, Vv cscsra, s-bl v-be vezet legkisebb kltsg utat.

    A grfalgoritmusok bevezetjben mr felvetettnk egy problmt "minimlis kltsg t keresse" cmen, amely egy cscspr kztti legkisebb kltsg utat keresi. Ezt a problmt, tekinthetjk a fent emltett problma rszeknt, azaz a fenti problmt megold algoritmus megoldja ezt a problmt is. rdekes, hogy nem ismert aszimptotikusan hatkonyabb algoritmus s-bl egyetlen v cscsba vezet legkisebb kltsg t megtallsra, mint s-bl minden cscsba men ilyen t megtallsnak leggyorsabb algoritmusa. Ebben a fejezetben lslyozott grfokkal fogunk foglalkozni. A legrvidebb ton, a szakirodalomban elterjedt mdon, a szlessgi keressnl tanultaktl eltren, a legkisebb kltsg utat fogjuk rteni.

    5.0.1 Definci: Legyen G=(V,E) lslyozott, irnytott vagy irnyts nlkli grf REc : slyfggvnnyel. A p= kvv ,...,0 t hossza (slya, kltsge) az utat alkot lek slyainak az sszege, azaz

    =

    =

    =

    klnben , ),(

    0 ha, 0)(

    11

    k

    iii vvc

    kpd

    5.0.2 Definci: Az u-bl a v-be ( Vvu , ) vezet legrvidebb (legkisebb sly, kltsg) t

    slya legyen

    =

    klnben , grfban at ha , )}~(min{),( vu~vudvu >>

    Az u cscsbl a v-be vezet legrvidebb ton a ),( vu sly, u-bl v-be vezet utak egyikt rtjk.

    Egy exponencilis mveletigny megolds: Szeretnnk eljutni a legrvidebb ton Budapestrl Szegedre. Rendelkeznk egy auts trkppel, amelybl kiolvashatjuk az telgazsok kzti tvolsgot. A problma egyik megoldsa, ha ellltjuk az sszes egyszer (mivel kr esetn vgtelen sok t ltezik) Budapestrl Szegedre men utat, s egy minimumkeresssel kikeressk kzlk a legrvidebbet. Elre lthat, hogy sok olyan t lesz, amely biztosan nem jhet szmtsba (pl.: Sopronon tmen utak). Ez egy lass, exponencilis idej algoritmus. A tovbbiakban ltni fogunk a problma megoldsra polinomilis idej algoritmust is.

    Legrvidebb utak brzolsa: A szlessgi keressnl mr tallkoztunk egy hasonl feladattal, az ottani legrvidebb (legkisebb lszm) utak nyilvntartsval. Most is ugyangy fogunk eljrni, egy P[1..n] tmbben tartjuk nyilvn minden cscsnak, az algoritmus ltal tallt egyik legrvidebb ton, a megelzjt. Itt is a szlessgi fhoz hasonlan definilhatjuk a legrvidebb-utak ft.

    5.0.3 Definci: F=(V',E') grf a G=(V,E) grf legrvidebb-utak fja, ha V' elemei az s-bl elrhet cscsok, EE ' s 'Vv cscsra pontosan egy egyszer t vezet s-bl v-be, s ez az t egyike az s-bl v-be vezet legrvidebb G-beli utaknak.

  • 25

    5.1 Dijkstra algoritmus Feladat: Adott egy G=(V,E) lslyozott, irnytott vagy irnyts nlkli, negatv lslyokat nem tartalmaz, vges grf. Tovbb adott egy Vs forrs (kezdcscs). Hatrozzuk meg,

    Vv cscsra, s-bl v-be vezet legrvidebb utat s annak hosszt.!

    Nzznk az algoritmus helyessgnek a beltshoz szksges nhny lltst:

    5.1.1. Lemma: A Vv 0 cscsbl a Vvk cscsba vezet, brmely legrvidebb

    kk vvv ,,..., 10 )0( >k t olyan, hogy a 10 ,..., kvv t is egyike a v0-bl a vk-1-be men legrvidebb utaknak. Bizonyts: Az thossz defincijbl tudjuk, hogy

    ( ) ( ) ,),..,(,,.., 11010 kkkkk vvcvvdvvvd += . Indirekt tegyk fel, hogy ltezik

    10 ,..., = kvvq tnl rvidebb p t vk-1-be. Ekkor ezen az ton eljutva vk-1-be az thossz: d(q)d(p)vvcqdvvcpd kkkk > ~,...,~,~ 01000 rszutak kltsgei monoton nv sorozatot alkotnak. Bizonyts: lsd Analzis: Nem negatv tag vgtelen sorok.

    Ebben a lemmban hasznljuk ki, hogy nincsenek negatv lslyok.

    Az algoritmus elve: Minden lpsben tartsuk nyilvn az sszes cscsra, a forrstl az illet cscsba vezet, eddig tallt legrvidebb utat (a mr megismert mdon a d[1..n] tmbben a tvolsgot, s P[1..n] tmbben a megelz cscsot). 1) Kezdetben a tvolsg legyen a kezdcscsra 0, a tbbi cscsra . 2) Minden lpsben a nem KSZ cscsok kzl tekintsk az egyik legkisebb tvolsg

    ( mind ) cscsot: a) Azt mondhatjuk, hogy ez a Vv cscs mr KSZ, azaz ismert a hozz vezet

    legrvidebb t. b) A v-t terjesszk ki, azaz v cscs szomszdaira szmtsuk ki a (mr ismert) v-be

    vezet, s onnan egy kimen llel meghosszabbtott t hosszt. Amennyiben ez jobb (kisebb), mint az illet szomszdba eddig tallt legrvidebb t, akkor innentl kezdve ezt az utat tekintsk, az adott szomszdba vezet, eddig tallt legrvidebb tnak. Ezt az eljrst szoks kzeltsnek is nevezni.

    5.1.3. Lemma: Az egyes lpsek utn, KSZ\Vu cscs esetn, ha us >~ t a grfban, akkor az u cscshoz vezet legrvidebb ton KSZq cscs. Bizonyts: Az KSZs biztosan teljesl.

  • 26

    5.1.4. Lemma: Minden lpsben, KSZ\Vu cscsra: ),(min usd , azaz s-bl u-ba vezet utak tvolsga nem cskkenhet a jelenlegi minimum al. Bizonyts: Indirekt tegyk fel, hogy KSZ\Vu , amelyre az eddig tallt legrvidebb p t

    min)( dpd , de a legrvidebb usp >~* = tra *)(min pdd > . Tudjuk, hogy van KSZ cscsa a p* tnak (2. lpstl kezdve, 5.1.3. lemma). Legyenek KSZq s

    KSZ\)(qSzomszdw egymst kvet cscsai p*-nak (biztos ltezik w, mivel KSZ\Vu , legfeljebb w=u). Mivel KSZq , gy mr ismert q-ba men egyik

    legrvidebb t, ami rsze az u-ba men egyik legrvidebb tnak (5.1.1. lemma kvetkezmnye). Legyen u-ba men egyik legrvidebb tnak w-ig tart rsztja

    wqsp w = >~* , aminek a hossza mr ismert, mivel q-t mr KSZ-nek vlasztottuk, ezrt p*q ismert, tovbb q-t kiterjesztettk (lsd 2/b. pontban), gy p*w is ismert. Azt is tudjuk, hogy )*(min wpdd , mivel KSZw . A 3.1.2. monotonitsrl szl lemma miatt,

    *)()*( pdpd w *)()*( min pdpdd w ami ellentmond az indirekt feltevsnek. Az els lpsben trivilisan teljesl az llts, mivel dmin=0 s nincs negatv lsly.

    5.1.5. Lemma: Az egyes lpsekben az algoritmus ltal KSZ-nek kivlasztott Vv cscsra valban ismert az egyik legrvidebb vs >~ t. Bizonyts: Legyen vsp >~= a jelenleg ismert legrvidebb t (ami lehet tvolsg is), amelyre tudjuk min)( dpd = , s indirekt tegyk fel, hogy vsp >~* = t, amelyre

    )(*)( pdpd < . Tudjuk, hogy KSZq s KSZ\)(qSzomszdw cscs a p* ton. A 5.1.4. lemmban ltott mdon levezethet, hogy *)()*( )( min pdpddpd w = ami ellentmond az indirekt feltevsnek. Teht rvidebb vs >~ utat a ksbbiekben sem tallhatunk.

    5.1.6. Ttel: A fenti algoritmus, negatv lslyokat nem tartalmaz G=(V,E) vges grf esetn, Vs forrs (kezdcscs) s Vv cscsra, meghatrozza s-bl v-be vezet legrvidebb utat s annak hosszt. Bizonyts: Az algoritmus minden lpsben KSZ-nek vlaszt egy cscsot (5.1.5. lemma). Mivel vges sok cscsa van a grfnak, az algoritmus vges idn bell terminl, s Vv cscs KSZ-en van, azaz ismert a legrvidebb vs >~ t.

  • 27

    Az algoritmus ADT szint lersa: A d[1..n] s P[1..n] tmbket, a korbban ismertetett mdon, a tvolsg s a megelz cscs nyilvntartsra hasznljuk. A KSZ halmazba rakjuk azokat a cscsokat, amelyekhez mr ismerjk az egyik legrvidebb utat. Ezen kvl, hasznlunk egy minimum vlaszt elsbbsgi (prioritsos) sort (minQ), amelyben a cscsokat troljuk a mr felfedezett, legrvidebb )~( usd > tvolsggal, mint kulcs rtkkel.

    Most nzzk meg egy pldn az algoritmus mkdst ADS szinten: A kvetkez bra-sorozaton megfigyelhet Dijkstra algoritmusnak mkdse lpsenknt. A KSZ halmazhoz val tartozst sznezssel valstjuk meg. Legyenek a nem KSZ cscsok fehrek, a KSZ cscsok pedig fekete sznek. A cscsokra a cmkn kvl, felrtuk az eddig tallt legrvidebb t hosszt is (d tmbbeli rtkeket). A vgtelen nagy tvolsgot jelljk '#' jellel. A forrs legyen az 1-es cmkj cscs.

    inicializls utn

    Az inicializl lps utn a kezdcscs 0, a tbbi cscs vgtelen sllyal szerepel az elsbbsgi sorban.

    rendezettlen tmb kupac

    0 n

    n*n n*logn

    e*1

    "e-szer"

    e*logn

    all v eleme Szomszd(u)\KSZd[v]>d[u]+c(u,v)

    d[v]:=d[u]+c(u,v)

    P[v]:=uSKIPHelyrellit(minQ)

    Feltlt(minQ)not res?(minQ)

    u:=KiveszMin(minQ)KSZ:=KSZ U {u}

    d[s]:=0; P[s]:=NILall u eleme V\{s}

    d[u]:=VGTELEN; P[u]:=NILres(KSZ); res(minQ) 1

    "n-szer"

    n*1

    Mveletigny

    1"(n-1)-szer"

    n-1

    Dijkstra(G,s)

  • 28

    1. lps

    2. lps

    3. lps

    Az els lpsben kivesszk a prioritsos sorbl az 1-es cscsot (mivel az prioritsa a legkisebb). Az 1-es cscshoz mr ki van szmtva a legrvidebb t, teht ez a cscs mr elkszlt, sznezzk feketre. Kiterjesztjk az 1-est, azaz a szomszdaira kiszmtjuk az 1-esbl kimen llel meghosszabbtott utat. Ha ez javt l, azaz az 1-esen tmen t rvidebb, mint az adott szomszdba eddig tallt legrvidebb t, akkor a szomszdban ezt feljegyezzk (d s P tmbbe). Az brn kiemeltk a javt leket.

    Megfigyelhet, hogy a 2-es cscsba mr korbban is talltunk 10 hossz utat 1,2 , de a msodik lpsben, a 4-es

    cscs kiterjesztsekor, tallunk, a 4-es cscson tmen rvidebb 8 hossz utat.

    A 2-es cscs kiterjesztsekor a 3-as cscsba talltunk egy rvidebb utat.

  • 29

    4. Lps

    5. lps utn kialakult fa

    A negyedik lpsben mg tallunk rvidebb utat az 5-s cscsba, majd az utols lpsben kivesszk a prioritsos sorbl az 5-s cmkj cscsot is. Az utols brn berajzoltuk a legrvidebb utak fjt alkot leket.

    Az algoritmus megvalstsa az brzols szintjn: Vizsgljuk meg a prioritsos sor(minQ) megvalstsnak kt, termszetes mdon add lehetsgt. 1) A prioritsos sort valstsuk meg rendezetlen tmbbel, azaz a prioritsos sor legyen

    maga a d[1..n] tmb. Ekkor a minimum kivlasztsra egy feltteles minimum keresst kell alkalmazni, amelynek a mveletignye )(n . A Feltlt(minQ) s a Helyrellt(minQ) absztrakt mveletek megvalstsa pedig egy SKIP-pel trtnik.

    2) Kupac adatszerkezet hasznlatval is reprezentlhatjuk a prioritsos sort. Ekkor a Feltlt(minQ) eljrs, egy kezdeti kupacot pt, amelynek a mveletignye lineris (lsd Heap-Sort). Azonban most a d[1..n] tmb vltozsa esetn a kupacot is karban kell tartani, mivel a kulcs rtk vltozik. Ezt a Helyrellt(minQ) eljrs teszi meg, amely a cscsot a

  • 30

    gykr fel "szivrogtatja" fel, ha szksges (mivel a kulcs rtkek csak cskkenhetnek). Ennek a mveletignye logn-es.

    Teht a prioritsos sor fenti kt megvalstsa esetn, a kvetkezkppen alakul az algoritmus mveletignye: A struktogramm mellett feltntettk az egyes mveletek kltsgt a kt brzols estn. A bels ciklust clszer globlisan kezelni, ekkor mondhat, hogy sszesen legfeljebb annyiszor fut le, ahny le van a grfnak. 1) Teht rendezetlen tmb esetn:

    )()(0111)( 222 nOenOe)nnnO(nT =+=++++++= 2) Kupac esetn: )log*)((loglog111)( nenOn)e*nnn*nnO(nT +=++++++=

    Kvetkezmny az brzolsra: Rendezetlen tmbbel val brzols mveletignye csak a cscsok szmtl fgg, mg a kupacos brzols mveletignye, az lek szmnak is a fggvnye. Sr grfnak nevezzk az olyan grfokat, amelyre 2ne , ritka grfoknak pedig ,amelyre ne (vagy "kevesebb"). Teht a kupacos brzols mveletignye ritka grf esetn )log*( nnO , mg sr grf esetn n)O(n log2 . Az az rdekes helyzet addott, hogy a grf srsge befolysolja milyen brzolst rdemes vlasztani. A kupac, csak a ritka grfok esetn hatkonyabb, mg sr grfok esetn a rendezetlen tmbbel val reprezentci az olcsbb. Teht a reprezentci szintjn: Sr grf esetn: cscsmtrix + rendezetlen tmb. Ritka grf esetn: llista + kupac.

    A moh algoritmus mindig az adott lpsben optimlisnak ltsz dntst hozza, vagyis a loklis optimumot vlasztja abban a remnyben, hogy ez globlis optimumhoz fog majd vezetni. Dijkstra algoritmusa is moh stratgit kvet, amikor minden lpsben KSZ-nek vlaszt egy cscsot. Mivel a legrvidebb t rsztja is legrvidebb t, gy a loklis optimumok vlasztsval elrhetjk a globlis optimumot.

    Most vizsgljuk meg a szlessgi keress s a Dijkstra algoritmus kapcsolatt. Mindkt algoritmusnl, egy kezdcscsbl kiindul legrvidebb utakat lltunk el, csak a Dijkstra algoritmusnl az utak hossznak fogalmt ltalnostjuk. Legyen minden l slya egysgnyi, ekkor a Dijkstra algoritmus egy szlessgi keresst hajt vgre (klnbsg, hogy minden cscsot megvizsgl, nem csak az elrhetket). Teht mondhatjuk, hogy a szlessgi keress specilis esete a Dijkstra algoritmusnak, ahol a prioritsos sor helyett, egy egyszer sort hasznlunk, amellyel javtunk a mveletignyen. Azt kell beltni, hogy a sor hasznlatval is mindig a legkisebb tvolsg cscsot vlasztjuk KSZ-nek, de ez kvetkezik a szlessgi keressnl megvizsglt invarins tulajdonsgbl.

  • 31

    5.2 Bellman-Ford algoritmus

    Feladat: Adott egy G=(V,E) lslyozott, irnytott vagy irnyts nlkli, negatv sszkltsg irnytott krt nem tartalmaz vges grf, tovbb egy Vs forrs (kezdcscs). Hatrozzuk meg, Vv cscsra, s-bl v-be vezet legrvidebb utat s annak hosszt.!

    Megjegyzsek: Kezdcscsbl elrhet negatv sszkltsg kr esetn, nem lteznek legkisebb kltsg

    utak, mivel az illet krn tetszlegesen sokszor vgig menve az utak kltsge mindig cskkenthet (lsd gyakorlaton arbitrzs feladat).

    Irnytatlan grf esetn, egy (u,v) negatv sly irnytatlan len oda-vissza haladva az t kltsge vgtelensgig cskkenthet, azaz gy viselkedik, mint egy negatv sszkltsg kr. Tekintsk negatv sszkltsg, 2 lbl ll irnytott krnek, amely egybe vg az brzols szintjn megvalstott irnytatlan grffal, ahol egy irnytatlan lt, egy oda-vissza irnytott lprral valstunk meg. Teht irnytatlan grf esetn a megszortsunk, hogy a grf ne tartalmazzon negatv sly irnytatlan lt, amely negatv sszkltsg irnytott krnek tekinthet.

    Az algoritmus elve: Minden cscsra, ha ltezik legrvidebb t, akkor ltezik egyszer legrvidebb t is, mivel a krk sszkltsge nem negatv, gy a krt elhagyva az t kltsge nem nhet. Egy n pont grfban, a legnagyobb lszm egyszer t lszma, legfeljebb n-1 lehet. A Bellman-Ford algoritmus a Dijkstra algoritmusnl megismert kzelts mvelett vgzi, azaz egy cscson t a szomszdba vezet l mentn vizsglja, hogy az illet l rsze-e a legrvidebb tnak, javt l-e. Egy menetben az sszes lre megvizsglja, hogy javt l-e vagy sem. sszesen n-1 menetet vgez. Vizsgljunk meg egy vsp >~* = legrvidebb utat. Minden menetben a p* minden ln vgznk kzeltst. Legyen yx l rsze p*-nak. Miutn p* x-ig tart rsztja p*x ismert vlik, a kvetkez menetben a p*y is ismert lesz, mivel az (x,y) llel is vgznk kzeltst. Azonban az lek feldolgozsnak (kzeltsnek) sorrendjre nem tettnk semmilyen megktst, gy csak azt tudjuk garantlni, hogy az els lps utn az 1 lszm legrvidebb utak, a msodik lps utn a 2 lszm legrvidebb utak, s gy tovbb, vlnak ismert. Mivel a leghosszabb egyszer t n-1 lszm, ezrt szksges lehet az n-1 menet.

    Az algoritmus ADT szinten

    P[v]:=u SKIPd[v]>d[u]+c(u,v)

    all (u,v) eleme E lre

    d[v]:=d[u]+c(u,v)

    d[s]:=0; P[s]:=NILall u eleme V\{s}

    d[u]:=VGTELEN; P[u]:=NILi=1 to n-1

    Bellman-Ford(G,s)

  • 32

    5.2.1. Ttel: Adott egy G=(V,E) lslyozott, irnytott vagy irnyts nlkli, negatv sszkltsg irnytott krt nem tartalmaz vges grf, tovbb egy Vs forrs (kezdcscs). Ekkor a Bellman-Ford algoritmus meghatrozza Vv cscsra legrvidebb utat s annak hosszt. Bizonyts: 1) Legyen kvvp ,...,* 0= egy s-bl v-be vezet, egyszer legrvidebb t , ahol s=v0 s

    v=vk. Teljes indukcival beltjuk, hogy az i-dik menet utn mr ismert ivv ,..,0 legrvidebb rszt, azaz [ ] ),( ii vsvd = s P[vi]=vi-1, s ez mr nem romlik el ksbb sem.

    a) Kezdetben az inicializl lps utn 0),(][][ 00 === vsvdsd . Ez fennmarad, klnben ltezne egy olyan u cscs, hogy sus >~ s 0),()~( , ami azt jelenti, hogy talltunk egy negatv krt.

    b) ii 1 : Tegyk fel, hogy ismert p*-nak 1~ ivs > rsztja. Az i-dik menetben a ),( 1 ii vv llel is vgznk kzeltst (feljegyezzk ),(][ ii vsvd = s P[vi]=vi-1 ), s ez

    csak akkor nem trtnik meg ( ),( 1 ii vv nem javt l), ha ),( ivs mr ismert, azaz a vi-be men egyik legrvidebb utat mr korbban megtalltuk. A ksbbiek sorn ez mr nem vltozhat, mivel ha ez vltozna, az azt jelenten, hogy ltezik a legrvidebb tnl rvidebb t, mivel p* is legrvidebb t s annak brmely rsztja, gy p*-nak

    ivs >~ rsztja is legrvidebb t. 2) Mivel a legnagyobb lszm, egyszer, legrvidebb t lszma is legfeljebb n-1, ezrt a

    fenti indukcis lltsbl kvetkezik az algoritmus helyessge.

    Most pedig nzzk meg egy pldn, ADS szinten az algoritmus mkdst: Tegyk fel, hogy az lek feldolgozsi sorrendje a cscsok cmkje szerint rendezett.

    inicializls utn

    Az inicializl lps sorn belltjuk a d[1..n] s P[1..n] tmb rtkeit. A vgtelen rtket most is '#' jellel jelljk.

  • 33

    1. lps

    2. lps

    2. lps fja

    Az els 7 l ((1,2),(1,3),,(4,2)) kzeltsnl nem trtnik vltozs, mivel vgtelen rtkek nvelsnl szintn vgtelent kapunk, ami nem javt. Csak kt javt lt tallunk. Most llthatjuk, hogy minden cscshoz megtalltuk az s-bl hozz vezet, minimlis kltsg, 1 lszm utat.

    Az brn lthat, mely cscsokhoz talltunk javt lt.

    Minden cscshoz meghatroztuk a legkisebb kltsg, 1 vagy 2 lszm utat. Az brn lthat, az egyes cscsokba vezet, 1 vagy 2 lszm legrvidebb utakbl kialakult fa. Ez a fa vltozhat, mivel lehet, hogy egy cscsba el lehet jutni nagyobb lszm olcsbb ton is.

  • 34

    3. lps

    3. lps fja

    4. lps

    Az 1-be olcsbb 3 lszm utat talltunk.

    A fa vltozott mivel az 1-be mr nem 1 lszm, hanem 3 lszm, de rvidebb ton juthatunk el a kezdcscsbl. A 4 megelzje a korbban tallt 1-es, csak most nem 2 lhossz ttal, hanem 4 lhosszval 41235 ,,,, . Mivel az (1,4) lt korbban dolgoztuk fel, mint (2,1) lt, gy a 4-es cscsnl bejegyzett kltsg nem konzisztens a fval.

    A fa mr nem vltozik, csak 4-es cscsnl bejegyzett kltsg veszi fel a helyes rtket.

  • 35

    Mveletigny: Mivel n-1 lps van, s minden lps sorn, minden lre vgrehajtunk egy kzeltst, ezrt )*)1(()( ennT = .

    5.2.2. llts: (Gyorstsi lehetsg) ha egy lps sorn nem volt vltozs (a kzeltsek sorn), akkor kszen vagyunk, teht megllhatunk (a bubork rendezsnl mr lttunk egy hasonl gyorstsi lehetsget). U.i.: Indirekt tegyk fel, hogy ltezik az algoritmus ltal megadott olyan legrvidebb

    vyxsp >> ~~* = t, hogy az i-dik lpsben az xs >~ rszutat mr ismerjk, de yx l mg nem rsze a fnak, vagy d[y] rtke nem konzisztens, teht mindkt esetben

    ),(][ ysyd > , tovbb az i-dik lpsben nem trtnik vltozs. Azonban ),(][ xsxd = s ),(),(),( yxcxsys += , tovbbi az i-dik lpsben az (x,y) l kzeltse sorn

    ),(),(),(][ ysyxcxsyd =+ , ami ellentmond az indirekt feltevsnek.

    Megjegyzs: Ha a fenti gyorstsi lehetsget beptjk az algoritmusba, akkor az lek feldolgozsi sorrendje befolysolja az itercik szmt. A fenti pldhoz kpest, most tcmkztk a cscsokat (az lek feldolgozsi sorrendje legyen tovbbra is cscsok cmkje szerint rendezett), gy 1 lpsben megkaphatjuk a megoldst:

    inicializls utn 1. lps

    1. lps utn mr kialakult a vgleges fa

  • 36

    6. Legrvidebb utak minden cscsprra

    Problma: Adott egy G=(V,E) lslyozott vges grf. Szeretnnk meghatrozni, Vvu , cscsra, u-bl v-be vezet legkisebb kltsg utat.

    Biztos mindenki ltott mr, az auts trkpekben elfordul, a vrosok egymstl val legkisebb tvolsgait tartalmaz tblzatot. Ez egy ngyzetes tblzat, ahol a sorok s az oszlopok a vrosok neveivel vannak felcmkzve. A tblzat x cmkj sornak s y cmkj oszlopnak a metszspontjban tallhat, az y vrosnak az x vrostl val legkisebb tvolsga. Modellezzk az auts trkpet egy grffal (irnytott vagy irnytatlan, attl fggen, hogy vannak-e egyirny utak). A cscsokat megfeleltetjk a vrosoknak, az lek pedig a vrosokat sszekt kzvetlen utaknak. Az utak hossza legyen az lek slya, teht a grf legyen lslyozott. Clunk a fenti tblzat ellltsa.

    A cscsprok kztti legkisebb kltsg utakat megkereshetjk az elz feladatban tanult algoritmusok segtsgvel. Minden cscsot forrsknt tekintve futtassuk le a "legrvidebb utak egy forrsbl algoritmusok" egyikt. 1) Amennyiben az lslyok nem negatvak, a Dijkstra algoritmust alkalmazhatjuk. Ekkor,

    mveletigny: a) Prioritsos sorknt rendezetlen tmbt hasznlva: T(n)=n*O(n2)=O(n3) b) Prioritsos sorknt kupacot hasznlva: T(n)=n*O((n+e)*logn)=O(n2logn+n*e*logn),

    amit ritka grfokra alkalmazva T(n)=O(n2logn). 2) Ha negatv lslyokat is megengednk, akkor a Bellman-Ford algoritmust

    hasznlhatjuk, amellyel a mveletigny )*(1 2 en)*en*(n-T(n) == . Ez ritka grfokra )()( 3nOnT = , sr grfokra )()( 4nnT = .

    Ebben a fejezetben egyrszt a negatv lslyok esetre hatkonyabb algoritmust adunk, tovbb vizsgljuk ennek specilis vltozatt grfok tranzitv lezrtjnak a kiszmtsra.

    6.1 Floyd algoritmus

    Feladat: Adott egy G=(V,E) lslyozott, irnytott vagy irnyts nlkli, negatv sszkltsg irnytott krt nem tartalmaz vges grf. Hatrozzuk meg Vvu , cscsra, u-bl v-be vezet legkisebb kltsg utat!

    A fejezet tovbbi rszben az utak hosszn az t mentn szerepl lek kltsgeinek az sszegt rtjk (5.0.1. definci), a cscsprok tvolsgn pedig a cscspr kztti (az 5.0.2. definci szerinti) egyik legrvidebb t hosszt rtjk. Tegyk fel, hogy V={1,2,,n}, s hogy a G grf az C szomszdsgi mtrixval adott. A cscsprok tvolsgnak a kiszmtsra egy szintn nn -es D mtrixot fogunk hasznlni.

    6.1.1. Definci: Legyen egy mvvvp ,...,, 21= egyszer t bels cscsa p minden v1-tl s vm-tl klnbz cscsa, azaz { }12 ,..., mvv halmaz elemei.

  • 37

    Az algoritmus elve: n itercis lps utn kapjuk meg a megoldst, mely itercis lpsek sorn folyamatosan fenntartjuk a D(k) mtrixunkra a kvetkez invarins tulajdonsgot: a k-adik iterci lefutsa utn ),( ji cscsprra D(k)[i,j] azon ji >~ utak legrvidebbjeinek a hosszt tartalmazza, amelyek kzbls cscsai k-nl nem nagyobb sorszmak. Teht k=n esetn ),( ji cscsprra D(n)[i,j] az ji >~ utak legrvidebbjeinek a hosszt, azaz a feladat megoldst tartalmazza.

    Az invarins tulajdonsg fenntartsa: (k szerinti teljes indukci) k=0 esetben: ),( ji cscsprra D(0)[i,j] tartalmazza azon ji >~ utak kzl a legkisebb

    kltsg utak hosszt, amely bels cscsainak sorszma kisebb, mint 1, azaz nem tartalmaznak bels cscsot. Ami nem ms, mint a C szomszdsgi mtrixban szerepl rtk. Teht D(0) mtrix rtke legyen C szomszdsgi mtrix.

    kk 1 : a D(k)[i,j] rtket szeretnnk kiszmtani a D(k-1) mtrix rtkeinek a felhasznlsval. Kt esetet klnbztetnk meg aszerint, hogy jip k >~)( = (i-bl j-be vezet, bels cscsknt nem nagyobb, mint k sorszm cscsokat tartalmaz) egyik legrvidebb tnak, k bels cscsa vagy sem. (p(k) t legyen egyszer t, mert ha tartalmazna krt, s nem lehet negatv sszkltsg a kr, akkor a krt "kivgva" a kapott t kltsge nem n, teht a legrvidebb utak kztt vannak egyszerek.) 1) Ha k nem bels cscsa p(k)-nek, akkor p(k) minden bels cscsnak sorszma legfeljebb

    k-1, azaz p(k) hossza azonos a legfeljebb k-1 bels cscsokat tartalmaz ji >~ legrvidebb t hosszval D(k-1)[i,j]-vel.

    2) Ha k bels cscs a p(k) ton, akkor felbonthatjuk kip k >~)1(1 = s jkp k >~)1(2 = legfeljebb k-1 sorszm bels cscsokat tartalmaz i-bl k-ba ill. k-bl j-be vezet legrvidebb egyszer utakra (legrvidebb t rsztja is legrvidebb t, 5.1.1. lemma kvetkezmnye). Teht D(k)[i,j]=D(k-1)[i,k]+ D(k-1)[k,j].

    Teht a kt eset kzl az adja a rvidebb utat, ahol kisebb a szmtott rtk, azaz a krdses legrvidebb t hossza megkaphat az albbi kplettel:

    D(k)[i,j]=min{ D(k-1)[i,j] , D(k-1)[i,k]+ D(k-1)[k,j] }

    Mivel ],[],[ )1()( kiDkiD kk = s ],[],[ )1()( jkDjkD kk = , gy elegend egyetlen D mtrix az algoritmus vgrehajtshoz.

    Floyd algoritmus az brzols szintjn, cscsmtrixos brzolssal:

    for j:=1 to nD[i,j]:=min{D[i,j], D[i,k]+D[k,j]}

    D[1..n,1..n]:=C[1..n,1..n]

    for i:= 1 to nfor k:=1 to n

    Floyd(G,D)

  • 38

    Most nzzk meg egy pldn, ADS szinten az algoritmus mkdst:

    =

    011102

    201110

    )0(D

    Az els iterci sorn, az 1-es cscson tmen utakkal prbljuk javtani a mtrix rtkeit.

    Az els itercis lps utn a kvetkez mtrix alakul ki:

    =

    01211022201110

    )1(D

    A msodik itercis lpsben: mr olyan javt utakat keresnk, amelyek bels cscsainak a sorszma legfeljebb 2. Vizsgljuk az legfeljebb 1-es sorszm bels cscsokat tartalmaz utakat (ill. a mg nem ltez utakat), s megprbljuk kzbls cscsnak beilleszteni a 2-es cscsot.

    A msodik itercis lps utn a kvetkez mtrix alakul ki:

    =

    0121102322011310

    )2(D .

    A kezdeti inicializl lps utn D mtrix megegyezik a grf cscsmtrixnak rtkvel.

    Amikor a 2-es cscsbl a 4-es cscsba men utakat vizsgljuk, tallunk az 1-esen tmen javt utat, D[2,4] rtkt 2-re javtjuk. Mivel a grf irnytatlan, gy a szimmetrikus esetben is trtnik javts (D[4,2]).

    Az 1-bl a 3-ba ill. 3-bl az 1-be talltunk javt utat (az eddig nem ltez thoz, a hossz thoz kpest) a 2-esen t.

  • 39

    A harmadik iterciban nem tallunk a 3-as cscson tmen javt utakat, gy a mtrix nem

    vltozik.

    =

    0121102322011310

    )3(D .

    A negyedik itercis lpsben: mr olyan javt utakat keresnk, amelyek bels cscsainak a sorszma legfeljebb 4. Vizsgljuk a legfeljebb 3-as sorszm bels cscsokat tartalmaz utakat (ill. a mg nem ltez utakat), s megprblunk a 4-es cscson tmen, kisebb kltsg "elkerl" utat tallni.

    Vgl a negyedik itercis lps utn megkapjuk a vgeredmnyt:

    =

    0121102222011210

    )4(D .

    Az algoritmus mveletignye: az algoritmus n itercis lpsben, az n2-es mtrix minden elemre konstans szm mveletet vgez, gy )()( 3nnT = . Ez egy stabil algoritmus, mivel legjobb, legrosszabb s tlagos esetben is azonos a mveletignye.

    Megjegyzsek: 1) A mveletignynk nagysgrendileg ugyanannyi, mintha a Dijkstra algoritmust cscsmtrixos brzols grfon, prioritsos sorknt rendezetlen tmbt hasznlva, minden cscsra, mint forrsra lefuttatnnk. A Dijkstra algoritmusnl mr lttuk, hogy ezt a megvalstst sr grfok esetn clszer alkalmazni. Ritka grfok esetn llists brzolst hasznlhatunk, prioritsos sorknt pedig kupacot, gy a mveletigny T(n)=O(n2logn), ami jobb, mint a Floyd algoritmus mveletignye. gy tnik, hogy felesleges a Floyd algoritmust hasznlni, mivel a Dijkstra algoritmus jobb eredmnyt ad, azonban a Dijkstra algoritmust csak nem negatv kltsg lek esetn hasznlhatjuk. Amennyiben elfordulhat a grfban negatv sly l (de negatv sszkltsg kr nem), a Bellman-Ford algoritmus hasznlatval ritka grfokra )()( 3nOnT = , sr grfokra

    Tallunk a 4-es cscson tmen javt utat. Eddig az 1-esbl a 3-mas cscsba vezet, legfeljebb 3-as sorszm bels cscsokat tartalmaz legrvidebb t hossza 3 volt. Ez az t: 1,2,3. Most megengedjk, hogy bels pont sorszma lehet 4 is, gy megvizsglva az 1,4 ill. 4,3 rszutak hossznak sszegt, az kevesebb mint, az 1,2,3 t hossza, teht talltunk egy kisebb kltsg elkerl utat. Termszetesen ez a szimmetrikus esetre is igaz.

  • 40

    )()( 4nnT = mveletignnyel tudjuk megoldani a feladatot. Lthat, hogy sr grfok esetn a Floyd algoritmus hatkonyabb. 2) A Floyd algoritmust az brzols szintjn adtuk meg mtrixos brzols mellett, mint ahogy a szakirodalomban szoks. 3) Amennyiben a cscsprok kztti legrvidebb utakra is kvncsiak vagyunk (s nem csak azok hosszra), a korbban mr ltott mdon eltrolhatjuk a megelz (vagy kzbls k cmkj) cscsot. Mivel most cscsprok kztti utakrl van sz minden lehetsges cscsprra (n*n cscspr), gy rdemes mtrixot hasznlni. (Bvebben lsd a gyakorlaton.)

    6.2 Tranzitv lezrt

    Most azt vizsgljuk meg, hogy a grf egy u pontjbl el tudunk-e jutni egy v pontjba, azaz ltezik-e t u-bl v-be. A fejezet tovbbi rszben a grfunk legyen vges, slyozatlan, irnytott vagy irnytatlan, az utak hosszn pedig az t mentn tallhat lek szmt rtjk (4.2.1. definci szerint).

    6.2.1. Ttel: Legyen a G grf szomszdsgi mtrixa C [ ] ( )Nkni,jjiC k ,1 , az i-bl a j-be vezet k hosszsg utak szmt adja meg.

    Bizonyts: k szerinti teljes indukcival k=1 esetben: 1 hossz t=l. Teht [ ]jiC ,1 az i-bl a j-be men lek szmt adja meg,

    (ami megllapods szerint legfeljebb 1 lehet), ez pedig pontosan a szomszdsgi mtrix defincija.

    kk 1 : Tegyk fel, hogy k-1-ig teljesl az llts. Krds, hnyflekppen juthatok el k hossz ton i-bl j-be? ji >~ k hosszsg utat a kvetkez mdon tudjuk felbontani: si >~ k-1 hossz t, majd js l. Krds, hnyflekppen juthatok el k hossz ton i-bl j-be gy, hogy a j-t megelz cscs az s? Az indukcis feltevs szerint, [ ]siC k ,1 fle mdon juthatok el k-1 hossz ton i-bl s-be, tovbb ha ltezik js l a grfban (C[s,j]=1), akkor azon mr csak egyflekppen tudunk tovbb menni j-be, azaz [ ] [ ]jsCsiC k ,*,1 megadja az i-bl j-be men k hossz utak szmt, ahol j eltti megelz cscs az s. Amennyiben nem ltezik js l, akkor a szorzat rtke nulla, ami kifejezi, hogy nincs ilyen t a grfban. Az elzekben s-en tmen utakat szmlltunk, de s tetszleges cscsa lehet a grfnak, gy ezeket minden Vs cscsra sszegezzk:

    [ ] [ ] [ ]( ) ),1( re, ,*,,1

    1njijijsCsiCjiC

    n

    s

    kk ==

    ,ami nem ms, mint egy mtrix szorzat CCC kk *1= .

    A ttel kvetkezmnye: kCCCC ++++ ...32 mtrix [i,j]-edik eleme, az i-bl j-be men legfeljebb k hosszsg utak szmt adja meg.

  • 41

    6.2.2. Definci: G=(V,E) vges grf tmtrixa (elrhetsgi mtrixa): [ ]

    =klnben , 0

    grfban at ~ ha , 1, :),1( re, jijiUnjiji >

    ,ahol Vn = .

    Az tmtrix meghatrozsa: ha ltezik i-bl j-be men t a grfban, akkor ltezik i-bl j-be men egyszer t is, tovbb minden egyszer t legfeljebb n-1 hossz, egy egyszer kr pedig legfeljebb n hossz. Teht szmoljuk ki nCCCC ++++ ...32 sszeget, s az eredmnymtrixban a nullnl nagyobb elemeket rjuk t 1-esre.

    6.2.3. Definci: Egy G=(V,E) grf tranzitv lezrsa G'(V',E') grf ,ahol V'=V s vuEvu >~ '),( t a grfban.

    Nhny trivilis llts: 1) G tmtrixa G' szomszdsgi mtrixa 2) G ersen sszefgg U-ban nincs nulla elem G' teljes grf

    6.3 Warshall algoritmus

    Az elz fejezetben egy grf tranzitv lezrtjt el tudtuk lltani a szomszdsgi mtrix hatvnyainak az sszegeknt, amelynek hatkonysga )()( 4nnT = . Most lssunk egy nagysgrenddel hatkonyabb mdszert. A tranzitv lezrt meghatrozsra hasznlhatnnk a Floyd algoritmust is, hiszen az algoritmus lefutsa utn, ha D[i,j] vges, akkor ltezik ji >~ t, ha vgtelen, akkor pedig nincs i-bl j-be men t. Azonban a Floyd algoritmus elvt felhasznlva, szp algoritmus adhat az brzols szintjn a problmra (br S. Warshall nevhez fzd algoritmus megelzte Floydt).

    Adott a G=(V,E) vges, slyozatlan, irnytott vagy irnytatlan grf. A Floyd algoritmushoz kpest az albbi vltoztatsok utn megkapjuk a Warshall algoritmust:

    1) A W mtrix (a Floyd-nl D-vel jellt mtrix) kezdeti rtke legyen

    =

    =klnben , 0

    ),( vagy ha, 1],[:),1( re, EjijijiWnjiji .

    A mtrixban szerepl rtkeket tekintsk logikai rtkeknek (hamis=0, igaz=1).

    2) A ciklusban vgzett mvelet pedig legyen a kvetkez: ]),[],[(],[:],[ jkWkiWjiWjiW =

    Az algoritmus helyessgnek a beltsa hasonlan trtnhet, mint a Floyd algoritmusnl.

    Termszetesen a mveletigny is aszimptotikusan megegyezik a Floyd algoritmus mveletignyvel, azzal a klnbsggel, hogy a Floyd algoritmusnl, a ciklus belsejben konstans mveletnek tekintett sszeads s minimumvlaszts helyett, most logikai mveleteket vgznk, ami hatkonyabb lehet.

  • 42

    7. Minimlis kltsg fesztfk

    A bevezet 1.3. fejezetben mr emltettk a tmakrben klasszikusnak szmt pldt, miszerint egy terlet villamostst kell megoldani a lehet legkisebb kltsggel. Tudomsunk szerint a problma els rdemi megoldst Otakar Boruvka brnoi professzor kzlte 1926-ban, aki Morvaorszg nyugati rsznek villamostsa kapcsn tallkozott a feladattal, amely szerint minimlis sszkltsg vezetkrendszert kellet tervezni megadott vrosok kztt. A modellnk legyen irnyts nlkli, slyozott grf, ahol a vrosoknak megfeleltetjk a grf pontjait, az leknek pedig a tervezett, kt vrost sszekt villamos vezetket. Az lek irnyts nlkliek az elektromos ram irnytatlan tulajdonsga miatt, s slyozottak, ahol az lek kltsgei legyenek a becslt ptsi kltsgek.

    7.0.1. Definci: Legyen G=(V,E) irnytatlan grf. A G'=(V',E') grfot a G rszgrfjnak nevezzk, ha VV ' s EE ' , tovbb ', :'],[ VvuEvu .

    7.0.2. Definci: Legyen G=(V,E) irnytatlan, sszefgg, vges grf. A G egy krmentes, sszefgg F=(V,E') rszgrfjt a G egy fesztfjnak nevezzk. (F s G pontjainak halmaza megegyezik)

    7.0.3. Definci: Legyen G=(V,E) irnytatlan, sszefgg, lslyozott, vges grf a REc : kltsgfggvnnyel. Ekkor F=(V,E') fesztfa a G egy minimlis kltsg

    fesztfja, ha kltsge

    =

    '

    )()(Ee

    ecFC minimlis a G fesztfi kztt, azaz

    C(F)=min{C(H) | H a G fesztfja}.

    Feladat: Adott egy G=(V,E) irnytatlan, sszefgg, lslyozott, vges grf. Hatrozzuk meg a G egy minimlis kltsg fesztfjt.

    A tovbbiakban tekintsnk nhny fkkal kapcsolatos lltst, amelyek a ksbbi bizonytsok sorn hasznosak lehetnek.

    7.0.4. llts: Minden legalbb ktpont fban van elsfok cscs. Bizonyts: Tekintsk kvvvu ,...,, 10= egyik leghosszabb utat a fban. Ha v0-bl menne l egy olyan cscsba, amely nem eleme { }kvvv ...,, 21 halmaznak, akkor u nem lenne a leghosszabb t, ha v0-bl menne l egy olyan cscsba, amely eleme { }kvvv ...,, 21 halmaznak, akkor az tban lenne kr, teht nem lenne fa. gy azt kaptuk, v0 elsfok cscs.

    7.0.5. llts: Minden sszefgg G=(V,E) grfnak van fesztfja. Bizonyts: Ha a grfban van kr, elhagyjuk az egyik lt. Ezt vges sokszor ismtelve krmentes, sszefgg V cscshalmaz grfot kapunk, teht fesztft.

  • 43

    7.0.6. llts: Egy n pont sszefgg grf fa n-1 le van Bizonyts:

    : n pont fbl trlnk egy elsfok cscsot (7.0.4. szerint ltezik) s a hozz tartoz lt, akkor egy n-1 pont ft kapunk. Ezt ismtelve, n-1-szer lehet elsfok cscsot elhagyni a hozz tartoz llel egytt, mivel a vgn mr csak egyetlen cscs marad az eredeti fnak n-1 le volt.

    : Legyen F egy n pont n-1 l sszefgg grf, tovbb legyen F' egy fesztfja F-nek. Az elbb igazoltak szerint F'-nek is n-1 le van F=F'.

    7.0.7. llts: Egy fa brmely kt pontja kztt pontosan egy t vezet. Bizonyts: Indirekt tegyk fel, hogy u-bl v-be kt t vezet, ekkor u-bl v-be elmegyek az egyik ton, majd visszajvk a msik ton, akkor legksbb u-ba jutva tallok egy olyan cscsot, amely eleme az els tnak, teht krt talltam.

    7.0.8. llts: Legyen G=(V,E) grfnak F=(V,E') egy minimlis kltsg fesztfja, tovbb, legyen e=[u,v] ( Ee ) a G-nek egy olyan le, ami nem le F-nek ( 'Ee ), s tegyk fel ,hogy az F-beli u-bl v-be vezet ton van olyan e' l ( '' Ee ), amelyre )'()( ecec . F-bl az e hozzvtelvel s az e' elhagysval kapott F' grf is egy minimlis kltsg fesztfja G-nek. Bizonyts: Vegyk hozz F-hez e lt, ekkor a kapott grfban van olyan kr amelynek e' le. Az e' trlsvel kapott grf teht sszefgg marad s leinek a szma is ugyanannyi, mint F leinek a szma, gy 7.0.6. szerint F' is fesztfja G-nek. Tovbb )()'( FCFC , mivel

    )'()( ecec , azaz egy nem nagyobb kltsg llel cserltnk le egy lt.

    Szemlltessk a 7.0.8. lltst egy pldn. Legyenek u=2, v=3 cscsok, tovbb e=[2,3], e'=[1,4] az lltsban emltett lek.

    Az llts szerint, ha e' l helyett e lt vesszk fel a fesztfa le kz, akkor ttrnk a G-nek egy msik minimlis kltsg fesztfjra.

  • 44

    7.1 A piros-kk eljrs A fejezetben trgyalt algoritmusok kzs vonsa, hogy valamilyen mdszer szerint sorra veszik a grf leit, s egyes leket bevesznek a kialakul minimlis kltsg fesztfba, msokat pedig nem. Ezen algoritmusok ltalnostsaknt Robert E. Tarjan adott egy szp, nem determinisztikus eljrst, melyet piros-kk eljrsknt emlegetnek. A szemlletes trgyals rdekben az leket szoks besznezni, innen szrmazik a mdszer neve is. A mdszer kkre sznezi a minimlis kltsg fesztfba bekerl lt, s pirosra sznezi azokat az leket, amelyek mr biztosan nem kerlnek be a fba. Az lek sznezse sorn kt szablyt fogunk alkalmazni a piros szablyt s a kk szablyt. A kt szablyt tetszleges sorrendben s tetszleges helyen alkalmazhatjuk, akr vletlentett mdon. A ksbb ismertetsre kerl algoritmusokat (Prim, Kruskal) tekinthetjk gy is, mint a piros-kk eljrs egy-egy specializlt vltozatait.

    7.1.1. Definci: Tekintsk a G=(V,E) irnytatlan, slyozott vges grf leinek egy sznezst, amelynl egy l lehet piros, kk vagy szntelen. Ez a sznezs takaros, ha ltezik G-nek olyan minimlis kltsg fesztfja, ami az sszes kk lt tartalmazza, de egyetlen piros lt sem tartalmaz.

    Kk szably: Vlasszunk ki egy olyan VX cscshalmazt, amibl nem vezet ki kk l. Ezutn egy legkisebb sly X-bl kimen szntelen lt fessnk kkre.

    Tekintsk az albbi brn szerepl pldn a kk szably egy alkalmazst. Legyen X={1,2,3,4} halmaz. Lthat, hogy X-bl nem vezet ki kk l.

    Sznezzk kkre az X-bl "kivezet" egyik legkisebb sly lt, amely most a 3-as sly [1,6] l.

  • 45

    Piros szably: Vlasszunk G-ben egy olyan egyszer krt, amiben nincs piros l. A kr egyik legnagyobb sly szntelen lt sznezzk pirosra.

    Most a piros szably egy alkalmazst illusztrljuk az albbi brn. A szablyban emltett kr legyen 3,4,2,1 , amely nem tartalmaz piros lt.

    Keressk meg a kr egyik legnagyobb sly lt, amely az 5-s sly [2,4] l. Sznezzk pirosra.

    Piros-kk eljrs: Legyen kezdetben a G=(V,E) irnytatlan, slyozott, sszefgg, vges grf minden le szntelen. Alkalmazzunk a kt szablyt tetszleges sorrendben s helyen, amg csak lehetsges.

    7.1.2. Ttel: Legyen G=(V,E) irnytatlan, slyozott, sszefgg, vges grf, s Vn = . I. A piros-kk eljrs sorn a sznezs mindig takaros marad. II. A sznezssel sosem akadunk el, ameddig G minden le sznes nem lesz. III. Ha beszneztk G minden lt, akkor a kk lek G egy minimlis kltsg

    fesztfjnak leit adjk, st mr n-1 kkre sznezett l utn is megkaptuk az emltett fesztft.

    Bizonyts: I. Teljes indukcival lssuk be az lltst. Kezdetben, amikor minden l szntelen

    nyilvn teljesl a takaros sznezs. Tovbbiakban tegyk fel, hogy egy olyan llapotban vagyunk, amelyre teljesl a takaros sznezs. Legyen F a G egy olyan minimlis kltsg fesztfja, amely az sszes, jelenleg kkre sznezett lt tartalmazza, s egyetlen, jelenleg pirosra sznezett lt sem tartalmaz. Tegyk fel, hogy az eljrs kvetkez lpse sorn az Ee lt szneztk be, ahol e=[u,v]. Kt eset lehet attl fggen, hogy melyik szablyt alkalmaztuk.

  • 46

    1) A kk szablyt alkalmaztuk: ekkor nyilvn e szne kk lett. a) Ha e le F-nek, akkor F mutatja ,hogy takaros a sznezs. b) Ha e nem le F-nek, akkor tekintsk az VX halmazt, amire a kk szablyt

    alkalmaztuk. Az F-ben vu >~ t, hiszen F fesztfa (7.0.7. llts), tovbb ezen az ton van olyan e' l, ami kimegy X-bl (Ugyanis e-t szneztk kkre, teht a kk szably rtelmben e egyik vge X-en bell, a msik vge X-en kvl van. Tovbb az emltett vu >~ F-beli t, egy X-beli s egy X-en kvli pontot kt ssze, teht valahol ki kell lpnie X-bl.).

    Az brn vastagabb vonallal jelltk az F leit, s segdvonallal az F-beli vu >~ utat.

    Vizsgljuk, milyen lehet e' szne! Piros nem lehet, mivel rsze F-nek, kk sem lehet, mivel a kk szablyt alkalmaztuk, amely szerint X-nek olyannak kell lennie, amibl nem vezet ki kk l. Teht e' szntelen. Tovbb )'()( ecec , mivel a kk szably szerint az X-bl kimen egyik legkisebb sly lt kell vlasztani, s mi e-t vlasztottuk. Alkalmazhatjuk a 7.0.8. lltst, mely szerint F-bl e' trlsvel s e hozzvtelvel kapott j F' grf is a G egy minimlis kltsg fesztfja. Teht F' igazolja, hogy e kkre sznezsvel a sznezs tovbbra is takaros marad.

    Az brn vastagabb vonallal kiemeltk a msik minimlis kltsg fesztfa, F' leit.

    2) A piros szablyt alkalmaztuk: ekkor nyilvn e szne piros lett. a) Ha e nem le F-nek, akkor F mutatja, hogy takaros a sznezs. b) Ha e le F-nek, akkor a pirosra sznezs azt jelenti, hogy e tovbbiakban mr

    nem lehet le az eljrs sorn elllts alatt lv minimlis fesztfnak, teht a takaros sznezs bizonytshoz t kell trni egy msik minimlis fesztfra. Az e F-bl val trlsvel F kt komponensre esik szt. Tekintsk azt a krt,

  • 47

    amelyre a piros szablyt alkalmaztuk, ennek van olyan e' le, amelyik a kt komponenst sszekti s nem le F-nek (Ugyanis a kt komponenst sszekt e-tl klnbz lnek lennie kell, mivel kr mentn vizsgldunk, s egy krbeli l elhagysval az sszefggsg nem sznhet meg. Tovbb, ha nem lenne ilyen e' l, ami nem le F-nek, az azt jelenti, hogy a kr minden le F le is, teht kr lenne a fban.).

    Az brkon kiemeltk F leit, majd illusztrltuk e elhagysa utn keletkez kt komponenst.

    Vizsgljuk, milyen lehet e' szne! Nem lehet kk, mivel nem le F-nek s feltettk, hogy a sznezs takaros, amit F mutat. Nem lehet piros, mivel a piros szably rtelmben, olyan krt kell vlasztani, amiben nincs piros l. Teht e' szntelen. Tovbb )()'( ecec , mivel a piros szably alkalmazsa sorn e-t vlasztottuk sznezsre, amely szerint a kr egyik legnagyobb sly lt kell pirosra sznezni. Az e' vgpontjait sszekt F-beli t tartalmazza e lt. (Ugyanis e trlse eltt F fesztfa volt, s 7.0.7. llts szerint, brmely kt pontja kztt pontosan egy t vezet. Azonban most kt olyan rszre esett szt, amelynek egyik komponensben van e' egyik vge, a msik komponensben e' msik vge. F-ben a kt komponens kztt az tjrst ppen az e l biztostotta, teht az emltett tnak t kell haladnia az e len.)

    Az brn segdvonallal berajzoltuk az e' kt vgpontjt sszekt F-beli utat.

    Alkalmazhatjuk a 7.0.8. lltst, mely szerint F-bl e trlsvel s e' hozzvtelvel kapott j F' grf is a G egy minimlis kltsg fesztfja. Teht F' igazolja, hogy e pirosra sznezsvel a sznezs tovbbra is takaros marad.

  • 48

    Az brn vastagabb vonallal kiemeltk a msik minimlis kltsg fesztfa, F' leit.

    II. Most beltjuk, hogy a sznezssel sosem akadunk el, ameddig G minden le sznes nem lesz. Tegyk fel, hogy G-nek mg nem minden le sznes. Legyen e egy szntelen l. A sznezs takarossga miatt a kk lek egy erdt alkotnak (de lehet, hogy mr egy ft, ekkor az albbi 1. eset alkalmazhat), az erd fit nevezzk kk fknak. Kt eset lehetsges: 1) Ha e kt vgpontja ugyanabban a kk fban van. Ekkor a piros szablyt

    alkalmazhatjuk arra a krre, aminek az leit gy kapjuk, hogy az e kt vgpontjt sszekt egyetlen (7.0.7. llts) kk thoz hozzvesszk e-t.

    Az brkon vastagabb vonallal jelltk a kk fkat, segdvonallal az emltett krt.

    2) Ha e kt vgpontja klnbz kk fban van. Ekkor a kk szably alkalmazhat a kvetkezkppen: X legyen az egyik olyan kk fa cscsainak halmaza, amelyikben benne van e egyik vge. Ebbl a kk fbl (X-bl) biztosan megy ki l (legalbb e), ezen kimen lek kzl, az egyik legkisebb sly (nem biztos, hogy e) kkre sznezhet.

  • 49

    Az brkon jelltk a kk fkat, az X halmazt, s vgl a kt kk ft sszekt, j kk lt.

    III. A harmadik llts szerint, vgl megkapjuk G egy minimlis kltsg fesztfjt. Ez rgtn kvetkezik abbl, hogy a vgs sznezs is takaros. Az llts msodik rsze szerint, az eljrst elegend addig folytatni, mg n-1 kk l nem lesz. A 7.0.6. llts szerint, a fesztfnak sszesen n-1 le van, teht ha mr van n-1 kk lnk, akkor a tovbbiakban tbb nem is keletkezhet.

    Teht a piros s kk szablyt tetszleges helyen s sorrendben alkalmazva, vgl minimlis kltsg fesztft kapunk, azonban hatkonysgi szempontbl megfontoland melyik szablyt mikor s hol alkalmazzuk. A kvetkez algoritmusokat a piros-kk eljrs egy-egy specilis esetnek is tekinthetjk.

    7.2 Prim algoritmus

    Az algoritmus elve: A Prim algoritmus minden lpsben a kk szablyt alkalmazza egy s kezdcscsbl kiindulva. Az algoritmus mkdse sorn egyetlen kk ft tartunk nyilvn, amely folyamatosan nvekszik, mg vgl minimlis kltsg fesztfa nem lesz. Kezdetben a kk fa egyetlen cscsbl ll, a kezdcscsbl, majd minden lps sorn, a kk ft tekintve a kk szablyban szerepl X halmaznak, megkeressk az egyik legkisebb sly lt (moh stratgia), amelynek egyik vge eleme a kk fnak (X-ben van), a msik vge viszont nem (nem eleme X-nek). Az emltett lt hozz vesszk a kk fhoz, azaz az lt kkre sznezzk, s az l X-en kvli cscst hozzvesszk az X-hez.

    Az algoritmus ADT szint lersa: Az algoritmus megvalstsnak a kulcsa az X-bl kimen egyik legkisebb sly l meghatrozsa. Ehhez hasznljunk egy minimum vlaszt elsbbsgi (prioritsos) sort (minQ), amelyben a fhoz mg nem tartoz (mg nem eleme X-nek) cscsokat troljuk az X-tl val tvolsggal, mint kulcs rtkkel. A tvolsg elnevezsbl addan s a korbbi algoritmusokhoz hasonlan, jelljk a kulcsot egy Vv cscs esetn d[v] -vel. Egy Vv cscs esetn az X-tl val tvolsg, azaz a d[v] legyen azon lek kzl a minimlis sly l slya, amely v s egy X-beli cscs kztt halad. Amennyiben nem ltezik l v s egy tetszleges X-beli cscs kztt, legyen =][vd . A korbbi algoritmusokhoz hasonlan, a P[1..n] tmbbe troljuk el egy cscs fesztfabeli megelzjt (szljt), amelynek segtsgvel bejrhat a fa. Az algoritmus elvnl, azt mondtuk, hogy kezdetben a kk fa legyen egyetlen pont, a kezdcscs. Most az X-tl val tvolsg fogalmnak bevezetsvel, azt mondhatjuk, hogy kezdetben X legyen az res halmaz, amelytl a kezdcscs nulla tvolsgra van, az sszes

  • 50

    tbbi cscs pedig vgtelen tvolsgra. Az algoritmus lersban az X halmazt explicite nem brzoljuk, hanem X = V \ minQ. Az algoritmus minden lpsben kivesszk a minQ (egyik) legkisebb kulcs elemt (az X-bl kimen egyik legkisebb sly l X-en kvli cscst), azaz a kszl fesztfhoz, X-hez hozzvesszk az illet cscsot. Majd az X-en kvli cscsok X-tl val tvolsgt, mint invarins tulajdonsgot karban kell tartani. Nyilvn elegend az X-be jonnan bekerlt cscs szomszdainak az X-tl val tvolsgt mdostani (ha szksges), mivel egy v cscs gy kerlhet kzelebb X-hez, hogy valamelyik u szomszdja bekerl az X-be. Ekkor v tvolsga a kvetkezkppen alakul: ha =][vd , akkor most legyen d[v]=c(u,v) ha

  • 51

    =

    X iXi

    iXha, 1

    ha, 0][ . Az X tmbt kezdetben ki kell nullzni, majd menet kzben karban kell tartani. Amint kikerl egy cscs a minQ-bl, az X tmbben a cscsnak megfelel helyre 1-est kell rni.

    2) Kupac adatszerkezet hasznlatval is reprezentlhatjuk a prioritsos sort. Ekkor a Feltlt(minQ) eljrs, egy kezdeti kupacot pt, amelynek a mveletignye lineris (lsd Heap-Sort). Azonban most a d[1..n] tmb vltozsa esetn a kupacot is karban kell tartani, mivel a kulcs rtk vltozik. Ezt a Helyrellt(minQ) eljrs teszi meg, amely a cscsot a gykr fel "szivrogtatja" fel, ha szksges (mivel a kulcs rtkek csak cskkenhetnek). Ennek a mveletignye logn-es. Ennl az brzolsnl is vezessnk be egy segdtmbt, a HOL[1..n] tmbt, amely megmutatja, hogy egy cscs hol helyezkedik el a kupacban (a kupacot [1..2n] tmbben valstsuk meg), illetve legyen 0, ha az illet cscs mr nem eleme a minQ-nak. A HOL tmb felhasznlsval egy cscs prioritsos sorban val keressnek mveletignyt konstansra cskkenthetjk. A HOL tmbt a minQ vltozsakor szintn karban kell tartani.

    Teht a prioritsos sor fenti kt megvalstsa esetn, a kvetkezkppen alakul az algoritmus mveletignye: A struktogramm mellett feltntettk az egyes mveletek kltsgt a kt brzols estn. A bels ciklust clszer globlisan kezelni, ekkor mondhat, hogy sszesen legfeljebb annyiszor fut le, ahny le van a grfnak.

    I. Teht rendezetlen tmb esetn: )()(*311)( 222 nOenOe)nnnO(nT =+=++++=

    II. Kupac esetn: )log*)((log*3log11)( nenOn)e*enn*nnO(nT +=+++++=

    Kvetkezmny az brzolsra: A Dijkstra algoritmusnl mr emltett kvetkezmny itt is rvnyes, azaz Sr grf esetn: cscsmtrix + rendezetlen tmb. Ritka grf esetn: llista + kupac.

  • 52

    Most pedig nzzk meg egy pldn, ADS szinten az algoritmus mkdst:

    A szemlltets rdekben sznezzk a cscsokat a kvetkezkppen: Fehr: a cscs eleme a minQ-nak s nincs X-beli szomszdja, azaz mg nem kerlt

    "lttvolsgba", teht az X-tl val tvolsga vgtelen. Szrke: a cscs eleme a minQ-nak, de ltezik X-beli szomszdja, teht a tvolsga mr

    kisebb, mint vgtelen. Fekete: a cscs kikerlt a minQ-bl, azaz bekerlt X-be

    A pldban a kezdcscs legyen az 1-es cscs.

    Az inicializl lps utn az 1-es cscs kivtelvel minden cscs tvolsga (az X halmaztl) legyen vgtelen, az 1-es cscs tvolsga pedig legyen 0, az X legyen az res halmaz.

  • 53

    Az els lpsben kivesszk a minQ-bl az 1-es cscsot (mivel az 1-es cscs tvolsga a legkisebb az X-tl), teht X={1}, majd az 1-es cscs szomszdai (2 s 3) kerlnek kzelebb az X-hez. Ezek tvolsga d[2]=2 s d[3]=3.

    A msodik lpsben a 2-es cscs kerl be az X halmazba (feljegyezve az 1-es cscsot, mint fabeli szlt), mivel kzelebb van X-hez, mint a 3-as cscs. Ezutn a 2-es szomszdai kerlnek "lttvolsgba". Megfigyelhet, hogy a 3-as cscs d[3]=3 tvolsgra volt az X-tl, de most kzelebb kerlt d[2]=2, a [2,3] l figyelembe vtelvel. Az X={1,2}.

    A harmadik lpsben az X={1,2} halmazhoz a legkzelebb lv cscs (d[3]=2, d[4]=8, d[5]=1), az 5-s cscs kerl az X halmazba (feljegyezve szlknt a 2-es cscsot). Az 5-s (mg X-hez nem tartoz) szomszdai, a 4-es s 6-os cscsok kerlnek kzelebb az X-hez.

  • 54

    A negyedik lpsben a nem fekete cscsok kzl a legkisebb tvolsg, a 4-es cscs kerl az X-be. X={1,2,4,5}. A 4-es szomszdai, a "4-esen keresztl" mr nem kerlnek X-hez kzelebb.

    Az tdik lpsben a 3-as cscs kerl az X-be. A 3-asnak mr nincs is nem fekete (nem X-beli) szomszdja.

    Vgl az utols lpsben a 6-os cscs kerl az X halmazba. A menetkzben feljegyzett szlcscsok segtsgvel meghatrozhat a fesztfa.

  • 55

    7.3 Kruskal algoritmus

    Az algoritmus elve: Kezdetben legyen n db kk fa, azaz a grf minden cscsa egy-egy (egy pontbl ll) kk fa, s legyen minden l szntelen. Minden lps sorn kivlasztjuk az egyik legkisebb sly szntelen lt. Ha a kivlasztott l kt vgpontja klnbz kk fban van, akkor sznezzk kkre, klnben (az l kt vge azonos kk fban van, teht a kk fa leivel krt alkot) sznezzk pirosra. A fentiekbl kitnik, hogy a Kruskal algoritmust is tekinthetjk a piros-kk eljrs egy specilis esetnek, ahol az lek sznezsnek a sorrendje egyfajta moh stratgia szerint trtnik ("mg mohbb", mint a Prim algoritmusnl). Ugyanis: Amikor egy e lt pirosra szneznk, akkor arra az egyszer krre alkalmazhat a piros

    szably, amelynek lei az e, s az e kt vgpontjt sszekt kk t lei. Ez egy egyszer kr, mivel pontosan egy e vgpontjait sszekt kk t ltezik, tovbb az e kivtelvel, minden le kk, teht e sznezse eltt nem tartalmazott piros lt. gy teljeslnek a piros szably felttelei.

    Amikor egy e lt kkre szneznk, akkor e kt kk ft kt ssze, F1-et s F2-t. A kk fk defincijbl kvetkezik, hogy F1 cscsainak halmazbl nem vezet ki kk l. Legyen X={F1 cscsainak a halmaza}, ekkor az e l lesz az egyik legkisebb sly X-bl kimen szntelen l, mivel e az egyik legkisebb sly (nem csak X-bl kimen) szntelen l. Teht teljeslnek a kk szably felttelei.

    Az algoritmusnak egy fontos tulajdonsga, hogy amennyiben a grf nem sszefgg, gy egy minimlis kltsg feszterdt hatroz meg.

    Az algoritmus ADT szint lersa: Az algoritmus absztrakt szintjn, diszjunkt halmazokkal val mveleteket fogunk vgezni. Tekintsk a kk fk cscsainak (diszjunkt) halmazait (ezek a halmazok osztlyozzk V-t). Amikor az egyik legkisebb sly szntelen lt kivlasztjuk, el kell dnteni, hogy a kt vgpontja azonos vagy klnbz halmazban vannak-e. Majd a vlasztl fggen: Ha azonos halmazban vannak, akkor a kivlasztott lt sznezzk pirosra. Ha klnbz halmazban vannak, akkor a kivlasztott lt sznezzk kkre, s a kt

    klnbz halmazt vonjuk ssze, azaz a kt halmaz helyett legyen egy halmaz, amely megegyezik a kt halmaz unijval.

    Az algoritmust akkor ll le, ha mr nincs szntelen l (lellhatna mr akkor is, ha az elbb kvetkezne be, hogy besznezett n-1 db kk lt). Mivel vges sok lnk van, s minden lpsben beszneznk egyet, gy |E| lps utn az algoritmus biztosan befejezi a mkdst.

  • 56

    Nzzk, milyen absztrakt mveleteket fogunk hasznlni: Eljrsok: HalmazokatKszt(G): Elkszti a kezdeti n db, pontosan egy cscsot tartalmaz diszjunkt

    halmazokat.

    sszevon(e): Az e l kt vgpontja ltal reprezentlt halmazokat sszevonja. szn[e]:=: Az e l sznt vltoztatja meg az rtkads jobb oldaln szerepl sznre. Fggvnyek:

    VanMgSzntelenl(G)=

    klnben , hamisleszntelen mgnek van - ha, igaz G

    VgkAzonosHalmazban(e)=

    klnben , hamisvanhalmazban azonos tjakt vgpon ha, igaz e

    LegkisebbSzntelenl(G): Visszaadja a legkisebb sly szntelen lt.

    Most pedig nzzk meg egy pldn, ADS szinten az algoritmus mkdst: A pldban a cscsok osztlyokhoz (halmazokhoz/kk fhoz) val tartozst sznezssel illetve cmkzssel oldottuk meg. Az azonos szn cscsok, azonos osztlyba tartoznak. Tudjuk, hogy az osztlyok reprezentlhatk egy-egy elemkkel, ezrt az brn (a cscs cmkje alatt), feltntettk azon osztly egy reprezentl elemnek a cmkjt, amelyhez az illet cscs tartozik. Teht azok a cscsok tartoznak egy osztlyba (azonos kk fhoz), amelyeknl a cmkjk alatt megjelen, mrett tekintve kisebb szm azonos.

    Az inicializl lps utn, minden l szntelen s minden cscs kln osztlyt alkot.

    szn[e]:=kksszevon(e)szn[e]:=piros

    HalmazokatKszt(G)VanMgSzntelenl(G)

    e:=LegkisebbSzntelenl(G)VgkAzonosHalmazban(e)

    Kruskal(G)

  • 57

    Az els lpsben kivlasztjuk az egyik legkisebb sly lt ( [1,2] ), s az 1-es ill. 2-es cscsokat tartalmaz (egyelem) halmazokat sszevonjuk egyetlen H={1,2} halmazz. Az j halmaz reprezentns eleme legyen az 1-es cscs.

    A kvetkez lpsben, az els lpshez hasonlan jrunk el az 5-s s 6-os cscsokkal:

    A harmadik lpsben, mg mindig egyelem halmazokat vonunk ssze, most a 7-es s 8-as cscsok osztlyait.

  • 58

    A negyedik lpsben a kivlasztsra kerl [8,9]-es 1-es sly l, mg mindig kt klnbz kk ft kt ssze, gy kkre kell sznezni s a H1={7,8} s H2={9} halmazokat ssze kell vonni a H={7,8,9} halmazz.

    Az tdik lpsben mr nincs 1-es sly l. A kvetkez egyik legkisebb sly l, valamelyik 2-es sly l lesz. Mi most vlasszuk az [1,3]-as lt, amelyet kkre szneznk, s a vgpontjainak megfelel halmazokat sszevonjuk.

    A hatodik lpsben kivlasztott [2,3]-as l kt vgpontja azonos kk fhoz tartozik, ezrt sznezzk pirosra.

  • 59

    A hetedik lpsben ismt a piros szablyt alkalmazzuk, most a 9,8,7 krre, amelynek kvetkeztben a [7,9]-es l piros lesz.

    A nyolcadik lpsben a [2,4]-es lt vlasztjuk ki, s a kk szablyt alkalmazhatjuk az X={1,2,3} halmazra. Teht a [2,4]-es lt kkre sznezzk, aminek kvetkeztben azonos kk fba kerlnek az {1,2,3,4}-es cscsok. A Kruskal algoritmusnak megfelelen, a kk fk nyilvntartsra, vonjuk ssze ket egy halmazba!

    A kilencedik lpsben mindenkppen az [5,7]-es lt kell vlasztanunk, mert ez az egyetlen 3-as sly szntelen l. Az lt sznezzk kkre, s a H1={5,6}, H2={7,8,9} halmazokat vonjuk ssze!

  • 60

    A tizedik lpsben az egyetlen 4-es sly szntelen l kerl kivlasztsra, amelynek kt vgpontja azonos osztlyba esik, ezrt pirosra sznezzk.

    A tizenegyedik lpsben a [2,5]-s l a legkisebb sly szntelen l. Mivel a 2-es s 5-s cscsok klnbz osztlyokhoz tartoznak, gy az lt sznezzk kkre, s a H1={1,2,3,4}, H2={5,6,7,8,9} halmazokat vonjuk ssze! A halmazok sszevonsa utn, mr csak egy H={1,2,3,4,5,6,7,8,9} osztlyunk (kk fnk) maradt, teht a tovbbiakban mr nem alkalmazhatjuk a kk szablyt, azaz megkaptunk egy minimlis kltsg fesztft, amelynek lei: [1,3], [1,2], [2,4], [2,5], [5,6], [5,7], [7,8], [8,9].

    Az ADT sznt lers szerint mg maradt egy lps, mivel mg van egy szntelen l [4,6]. Termszetesen ezt az lt mr csak pirosra sznezhetjk.

    Az brzols szintjn nem trgyaljuk az algoritmust, mivel az jelenleg nem rsze a tananyagnak. Jobban szemgyre vve a Kruskal algoritmust, a mveletignye a diszjunkt halmazok megvalststl fgg. Amennyiben az leket egy kupac adatszerkezetben troljuk az lslyokkal, mint kulccsal, egy l kivtele O(loge), e l kivtele O(eloge). Teht j lenne olyan brzolst vlasztani a diszjunkt halmazoknak, hogy a teljes algoritmus mveletignye O(eloge) maradjon. Ilyen ltezik pl. a Rnyai-Ivanyos-Szab: Algoritmusok c. tanknyvben az UNI-HOLVAN adatszerkezet.

  • 61

    8. Mlysgi bejrs s alkalmazsai

    8.1 Mlysgi bejrs Az algoritmus elvt a Bejrsi/keressi stratgik cm fejezetben mr lttuk, most foglaljuk ssze rviden. Egy kezdpontbl kiindulva addig megynk egy l mentn, ameddig el nem jutunk egy olyan cscsba, amelybl mr nem tudunk tovbb menni, mivel nincs mr meg nem ltogatott szomszdja. Ekkor visszamegynk az t utols eltti cscshoz, s onnan prblunk egy msik l mentn tovbb menni. Ha ezen az gon is minden cscsot mr bejrtunk, ismt visszamegynk egy cscsot, s gy tovbb.

    Most vizsgljuk meg a bejrst ADS szinten egy pldn: Sznezzk a cscsokat attl fggen, hogy az illet cscsra vonatkozan a bejrs milyen fzisban van. Egy cscs legyen fehr, ha mg nem jutottunk el hozz a bejrs sorn (kezdetben minden

    cscs fehr). Egy cscs legyen szrke, ha a bejrs sorn mr elrtk a cscsot, de mg nem llthatjuk,

    hogy az illet cscsbl elrhet sszes cscsot megltogattuk. A cscs legyen fekete, ha azt mondhatjuk, hogy az illet cscsbl elrhet sszes cscsot

    mr megltogattuk s visszamehetnk (vagy mr visszamentnk) az idevezet t megelz cscsra

    A bejrs sorn troljuk el, hogy egy cscsot hnyadikknt rtnk el, azaz hnyadikknt lett szrke s troljuk el, hogy hnyadikknt fejeztk be a cscs, s a belle elrhet cscsok bejrst, azaz a cscs hnyadikknt lett fekete. Az emltett szmokat nevezzk mlysgi, illetve befejezsi szmnak s az brkon a cscsok cmki alatt fogjuk megjelenteni. A pldban egy cscsbl kimen lek feldolgozsi sorrendje legyen a szomszd cscsok cmkje szerint nvekeden rendezett (pl.: lncolt brzolsnl az llista a cscsok cmkje szerint rendezett).

    Teht nzzk az albbi pldt, amelyben a kezdcscs legyen az 1-es cscs. Legyen kezdetben minden cscs fehr, s a mlysgi s befejezsi szmuk is legyen az extremlis 0.

  • 62

    A kezdcscsot rjk el elsknt, teht sznezzk szrkre, s a mlysgi szmt lltsuk be 1-re

    Az 1-es cscsbl hrom l vezet ki, azaz hrom l mentn indulhatnnk el, de a kiktttk felttelknt, hogy az lek feldolgozsi sorrendje legyen a szomszd cscsok cmkje szerint nvekeden rendezett. Teht a 2-es cscsot rjk el msodikknt.

    Ezutn elrjk harmadikknt a 4-es cscsot.

  • 63

    Negyedikknt a 8-as cscsot rjk el.

    Mivel a 8-as cscsnak nincs olyan szomszdja, amit mg nem ltogattunk volna meg (nincs egyltaln szomszdja), a 8-as cscs bejrst befejeztk, a cscsot sznezzk feketre. Mivel a bejrs sorn a 8-as cscs lett elsknt fekete, gy az befejezsi szma legyen az egyes.

    A bejrs sorn a megtett utunk 8,4,2,1 . Most menjnk vissza az utols eltti cscsra, a 4-es cscsra. Mivel a 4-es cscsnak sincs mg meg nem ltogatott szomszdja, gy a 4-es cscs bejrst is befejeztk, sznezzk a cscsot feketre, s a bejrsi szmt lltsuk be kettre.

  • 64

    Menjnk vissza a 2-es cscshoz. A 2-es cscsnak kt olyan szomszdja is van, amelyet mg nem ltogattunk meg. Ltogassuk meg a kisebb cmkj cscsot.

    Az 5-s cscs bejrst harmadikknt befejeztk.

    A 2-es cscsbl a bejrst a 6-os cscs irnyba folytatjuk.

  • 65

    Tovbb haladva hetedikknt elrjk a 9-es cscsot.

    Nyolcadikknt a 7-es cscsot rjk el.

    Majd a 7-es cscsbl elsknt megvizsgljuk a 3-as cscsba vezet l mentn a lehetsgeket. Mivel a 3-as cscs mg fehr, kilencedikknt elrjk a 3-as cscsot.

  • 66

    A 3-as cscsbl a 6-os cscsba vezet l, azonban a 6-os cscsot mr megltogattuk, azaz a szne mr nem fehr, azaz erre mr nem folytatjuk a bejrst (klnben a krn vgtelen sokig keringhetnnk).

    Mivel a 3-as cscsbl mr nem vezet l mg meg nem ltogatott cscsba, gy a 3-as cscs bejrst is befejeztk.

    Visszamegynk a 7-es cscsba, ahol a sorrendben kvetkez l, a (7,8) mentn vizsgldunk. Azonban a 8-as cscs szne mr fekete, teht mr befejeztk a bejrst, gy erre mr felesleges volna mennnk.

  • 67

    Mivel a 7-es cscsnak nincs fehr szomszdja, gy tdikknt befejeztk a bejrst.

    A 9-es cscsnak a bejrst is befejeztk.

    Az ton ismt egy csccsal visszamegynk s befejezzk a 6-os cscsot is.

  • 68

    A 2-es cscsra lpve, lthat, hogy minden kimen le mentn mr prblkoztunk, gy nyolcadikknt befejezzk t is.

    Az 1-es cscsra lpve megvizsgljuk a 3-as cscsot, de ltva, hogy szne nem fehr, arra nem megynk tovbb.

    Ezutn az elzhz hasonlan mg megvizsgljuk a maradk (1,4) l mentn a 4-es cscsot, de annak szne sem fehr.

  • 69

    Vgl az 1-esbl kimen sszes l mentn mr megvizsgltuk a bejrsi lehetsgeket, gy az 1-es cscsot is befejeztk utolsknt.

    Az algoritmus ADT szint lersa: Legyen G=(V,E) irnytott vagy irnytatlan, vges grf, ahol V={1,2,,n}. Tovbb definiljuk az albbi vektorokat: szn[1..n]: az ADS sznt sznezs megvalstsra mszm[1..n] s bszm[1..n]: az ADS szinten emltett mlysgi s befejezsi szmok

    nyilvntartsra P[1..n]: a bejrs sorn, egy cscs megelz cscsnak a nyilvntartsra (a korbban

    ltottakhoz hasonlan, pl.: szlessgi bejrs vagy Dijkstra algoritmus). Az elz pldban gy kezdtk a bejrst, hogy kijelltnk egy kezdcscsot s a kezdcscsbl elrhet cscsokat (a pldban az sszes cscs ilyen volt) jrtuk be. Egy msik pldn elfordulhatna, hogy lennnek olyan cscsok, amelyeket egyltaln nem ltogatnnk meg (a szlessgi keress is gy mkdik). Azonban a ksbbi alkalmazsok rdekben, a bejrsunk legyen olyan, hogy minden cscsot megltogatunk. Tekintsnk egy kezdcscsot, s innen indtsunk el egy bejrst. Miutn visszajutottunk az emltett kezdcscsba (azaz a kezdcscsbl elrhet cscsokat bejrtuk), nem fejezzk be az algoritmust, hanem keresnk egy eddig mg meg nem ltogatott (azaz fehr) cscsot s innen jra indtjuk a bejrst. Ezt eddig folytatjuk, amg van fehr cscsunk. Nyilvn minden ilyen menetben legalbb egy cscsot tszneznk feketre, teht vges szm menet utn elfogynak a fehr cscsok. Elegend a cscsok halmazn egyszer vgigm