• Tidak ada hasil yang ditemukan

Algoritmi v teoriji grafov : diplomsko delo

N/A
N/A
Protected

Academic year: 2021

Membagikan "Algoritmi v teoriji grafov : diplomsko delo"

Copied!
89
0
0

Teks penuh

(1)Povzetek V diplomi so obravnavane nekatere teme iz teorije grafov, kot so vpeta drevesa, ravninski in izomorfni gra, klike in kromati£no ²tevilo.. Opisanih je nekaj. algoritmov znanih avtorjev, ki so jim dodani nazornej²i primeri s slikami za laºje razumevanje. Nekaterim od teh so dodane tudi podrobnej²e psevdokode in poteki algoritmov po korakih z opazovanjem uporabljenih spremenljivk. V tem besedilu so med drugimi opisani algoritmi za dolo£anje kromati£nega polinoma in kromati£nega ²tevila, za iskanje in konstrukcijo vpetih dreves grafa in za ugotavljanje izomorfnosti grafov. Med bolj kompleksnimi so opisani linearni ravninski algoritem avtorjev Tarjana in Hopcrofta, Tarjanov algoritem za iskanje prese£nih to£k in blokov, algoritem za iskanje klik oz. maksimalnih neodvisnih mnoºic avtorjev Trojanowskega in Tarjana, ter algoritem za risanje grafa v ravnini, katerega avtor je Tutte.. Klju£ne besede:. vpeto drevo, kromati£ni polinom, kromati£no ²tevilo, ravni-. nski graf, izomorfni gra. Math.Subj.Class.(2000)*: O5C05, 05C85, 68R10.

(2) Abstract In diploma thesis there are discussed some themes of graph theory, such as spanning trees, planar graphs, graph isomorphism, cliques and chromatic number. There are described some algorithms of known authors and more evident examples with gures for better understanding are added. Furthermore, detailed pseudocodes and step-by-step algorithms with observation of used variables are added to some of them. In the thesis there are described algorithms for computing chromatic polynomial and chromatic number, spanning tree algorithms and algorithms for testing graph isomorphism. There are some more complex algorithms included too, such as linear planarity algorithm of Tarjan and Hopcroft, Tarjan's strongly connected components algorithm, algorithm for nding all the cliques or maximal independent sets of Trojanowski and Tarjan, and Tutte's algorithm for planar graph drawing.. Keywords:. spanning tree, chromatic polynomial, chromatic number, planar. graph, graph isomorphism.

(3) Kazalo 1 Osnovni pojmi in denicije. 3. 2 Gra in algoritmi v ra£unalni²tvu 2.1. ƒasovna in prostorska zahtevnost. 2.2. Razredi problemov. 12 . . . . . . . . . . . . . . . . .. 12. . . . . . . . . . . . . . . . . . . . . . . . . .. 14. 2.3. Podatkovne strukture za predstavitev grafov . . . . . . . . . . .. 16. 2.4. Povezani seznam, sklad in vrsta. 19. . . . . . . . . . . . . . . . . . .. 3 Vpeta drevesa. 24. 4 Osnovni obhodi, prese£ne to£ke in bloki. 35. 4.1. Osnovni obhodi . . . . . . . . . . . . . . . . . . . . . . . . . . .. 35. 4.2. Mostovi. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .. 35. 4.3. Prese£ne to£ke in bloki . . . . . . . . . . . . . . . . . . . . . . .. 36. 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 41. 5.1. Konstrukcija vseh vpetih dreves . . . . . . . . . . . . . . . . . .. 42. 5.2. Kromati£ni polinomi. 44. . . . . . . . . . . . . . . . . . . . . . . . .. 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. 50. 7 Ravninski gra. 56. 7.1. Linearni ravninski algoritem . . . . . . . . . . . . . . . . . . . .. 58. 7.2. Risanje grafa v ravnini . . . . . . . . . . . . . . . . . . . . . . .. 62. 8 Izomorfni gra. 67. 9 Izomorzem grafov posebnih oblik. 71. 9.1. Drevesa s korenom. . . . . . . . . . . . . . . . . . . . . . . . . .. 71. 9.2. Drevesa brez korena. . . . . . . . . . . . . . . . . . . . . . . . .. 75. 9.3. Ravnina in ravninski gra. . . . . . . . . . . . . . . . . . . . . .. 76.

(4) Zaklju£ek Literatura Priloga. 78 80 81.

(5) 1. Uvod Tesna povezanost ter odvisnost matematike in ra£unalni²tva se je izkazala ºe v ²tevilnih primerih. Re£emo lahko, da je matemati£no znanje, polek drugih naravoslovnih ved, osnova za delovanje ra£unalnika, ra£unalni²tvo pa je v veliko pomo£ oz. olaj²anje pri re²evanju in razumevanju ²tevilnih matemati£nih problemov. V teoriji grafov najdemo veliko struktur, katerih iskanje in dolo£anje je ob ustreznem ra£unalni²kem algoritmu enostavnej²e in hitrej²e. Nekaj takih je opisanih v osrednjem delu tega besedila.. Na za£etku so opredeljeni in na primerih razloºeni osnovni pojmi iz teorije grafov, ki so bistveni za razumevanje nadaljnega besedila. Prav tako so opisani osnovni pojmi s podro£ja ra£unalni²tva, ki se navezujejo na algoritme in programiranje. Predstavljene so podatkovne strukture, ki se uporabljajo v nadaljevanju, in osnovne operacije za delo z njimi. Na za£etku osrednjega dela sta teoreti£no opisana algoritma za iskanje vpetega drevesa grafa po metodah najprej v globino in najprej v ²irino. Dodani sta tudi psevdokodi za oba primera. Podrobneje je opisan algoritem za iskanje prese£nih to£k in blokov grafa po Tarjanu, ki mu je dodana psevdokoda. Z opazovanjem klju£nih spremenljivk je predstavljen tudi potek algoritmov po korakih.. V programiranju je pogosto uporabljen na£in snovanja od zgoraj navzdol, ki razgradi problem do take mere, da je ta enostavno re²ljiv. Po tem postopku so opisani algoritmi za kostrukcijo vseh vpetih dreves grafa, dolo£anje kromati£nega ²tevila, iskanje klik oz. maksimalnih neodvisnih mnoºic. Sem spada tudi algoritem za dolo£anje kromati£nega polinoma, katerega psevdokoda je realizirana s pomo£jo sklada.. V zadnjem delu so v ospredju ravninski gra in izomorzem grafov. Opisan je linearni ravninski algoritem, katerega avtorja sta Hopcroft in Tarjan, in je zanimiv ravno zaradi u£inkovite £asovne zahtevnosti. Opisan in s primerom podkrepljen je ²e algoritem za risanje grafa v ravnini, katerega avtor je Tutte..

(6) 2. Dodana je ²e psevdokoda za omenjeni algoritem. Pri ugotavljanju izomorfnosti grafov so izpostavljene le nekatere oblike grafov, napisana je recimo psevdokoda za kodiranje dreves s korenom.. Dodana pa je tudi programska koda v pro-. gramskem jeziku pascal, ki dejansko poi²£e kodo vseh dreves s korenom za podano ²tevilo vozli²£..

(7) 1 Osnovni pojmi in denicije. 3. 1 Osnovni pojmi in denicije Denicija 1.1 Graf G sestavlja neprazna mnoºica vozli²£ in mnoºica neurejenih parov teh vozli²£, ki jih imenujemo povezave grafa. Mnoºico vozli²£ grafa G ozna£imo z V (G), mnoºico povezav pa z E(G).. ’tevilo vozli²£ grafa. |E(G)|,. pa z. G, |V (G)|,. bomo ozna£evali z. n,. ²tevilo povezav grafa. G,. m.. Denicija 1.2 Naj bosta u in v vozli²£i grafa. ƒe sta u in v povezani s povezavo, potem re£emo, da sta sosednji. Povezava e = uv je incidentna z vozli²£ema u in v . Vozli²£i u in v sta kraji²£i povezave e. Denicija 1.3 Podgraf H grafa G je dolo£en z mnoºico vozli²£ V (H) ⊆ V (G) in mnoºico povezav E(H) ⊆ E(G). Podgraf H grafa G je inducirani podgraf na mnoºici vozli²£ V (H) £e za poljuben par vozli²£ u, v ∈ V (H) velja: uv ∈ E(G) ⇒ uv ∈ E(H).. Denicija 1.4 Povezave, ki povezujejo isti par vozli²£, imenujemo vzporedne povezave. Zanka je povezava, ki povezuje vozli²£e s samim seboj. Graf brez ve£kratnih povezav in zank imenujemo enostavni graf. Denicija 1.5 Naj bo G graf brez zank, v pa vozli²£e grafa G. Stopnja vozli²£a v je ²tevilo povezav, ki vsebujejo v , ozna£imo jo z d(v).. Denicija 1.6 Prazen graf je graf brez povezav. Denicija 1.7 Sprehod dolºine k v grafu G je zaporedje povezav grafa G oblike uv, vw, wx, . . . , yz..

(8) 1 Osnovni pojmi in denicije. 4. Ozna£imo ga uvwx . . . yz in ga imenujemo sprehod med vozli²£ema u in z . ƒe so vse povezave sprehoda razli£ne, gre za enostavni sprehod. ƒe so razli£na tudi vsa vozli²£a, enostavni sprehod imenujemo pot.. Denicija 1.8 Sklenjeni sprehod ali obhod v grafu G je zaporedje povezav grafa G oblike uv, vw, wx, . . . , yz, zu.. ƒe so vse povezave obhoda razli£ne, ga imenujemo enostavni obhod. ƒe pa so razli£na tudi vsa vozli²£a, gre za cikel.. Denicija 1.9 Graf G je povezan, kadar obstaja pot med poljubnim parom to£k tega grafa, sicer je nepovezan. Nepovezani graf razpade na ve£ povezanih podgrafov, ki jih imenujemo komponente grafa G. Denicija 1.10 Povezava povezanega grafa je most, £e po njeni odstranitvi graf ni ve£ povezan.. Denicija 1.11 Prese£na to£ka je vozli²£e grafa G brez katerega graf postane nepovezan. Blok je najve£ji podgraf grafa G brez prese£nih to£k. d. a. f. b. c. e. Slika 1: Graf s prese£no to£ko.. Vozli²£e. d na sliki 1 predstavlja prese£no to£ko, saj po njegovi odstranitvi graf. razpade na dve nepovezani komponenti z mnoºicama vozli²£ Primer bloka za ta graf je podgraf z mnoºico vozli²£. {a, b, c} in {e, f }.. {a, b, c}..

(9) 1 Osnovni pojmi in denicije. 5. Denicija 1.12 Povezanost po to£kah κ(G) povezanega grafa G je najmanj²e ²tevilo vozli²£, brez katerih graf G postane nepovezan. ƒe je κ(G) ≥ k , je graf G po to£kah k -povezan.. Denicija 1.13 Povezanost po povezavah λ(G) povezanega grafa G je najmanj²e ²tevilo povezav, brez katerih postane graf G nepovezan. ƒe je λ(G) ≥ k, je graf G po povezavah k -povezan.. Denicija 1.14 Elementarna skr£itev grafa G, je graf, ki ga dobimo tako, da identiciramo dve njegovi sosednji vozli²£i, pri tem opustimo morebitne ve£kratne povezave. Graf H je skr£itev grafa G, £e ga lahko dobimo iz G z zaporedjem elementarnih skr£itev.. Slika 2: Skr£itev Petersenovega grafa.. Na Petersenovem grafu smo opravili pet zaporednih elementarnih skr£itev za odebeljeno ozna£ene povezave in dobili polni graf na petih to£kah pravimo, da je. K5. K5 ,. zato. skr£itev Petersenovega grafa.. Denicija 1.15 Neodvisna mnoºica imenujemo mnoºico vozli²£, v kateri noben par vozli²£ ni soseden, neodvisna mnoºica najve£je velikosti pa je najve£ja neodvisna mnoºica..

(10) 1 Osnovni pojmi in denicije. 6. 1. 6. 2. 5. 3 4. Slika 3: Graf. Neodvisne mnoºice grafa. G. na sliki 3 so. G.. {1, 3} , {1, 5} , {2, 4, 5} , {3, 4, 6},. med. temi sta le slednji dve tudi najve£ji neodvisni mnoºici.. Denicija 1.16 Klika je maksimalen polni podgraf. Maksimalen v smislu, da ni vsebovan v nobenem ve£jem polnem podgrafu. a. f. b. e. c d. Slika 4: Klike v grafu.. Klike v grafu na sliki 4 so podgra na naslednjih mnoºicah vozli²£. {a, b, f } , {c, d, e} , {e, f }, {a, b, c} , {a, c, d} , {b, c, d} grafu.. {a, b, c, d} ,. medtem ko podgra na mnoºicah vozli²£. {a, b, d} ,. niso klike, ker so vsebovani v ve£jem polnem pod-.

(11) 1 Osnovni pojmi in denicije. 7. Denicija 1.17 Grafa G in H sta homeomorfna, £e ju dobimo iz istega grafa z dodajanjem vozli²£ stopnje 2 na povezave.. Slika 5: Primer homeomorfnih grafov.. Denicija 1.18 Graf G je ravninski, £e ga lahko nari²emo v ravnini tako, da se noben par njegovih povezav ne seka, razen v skupnem kraji²£u.. a. b. 1. 5 d. 2. c b 4. 3. a c. d. Slika 6: Ravninski (K4 ) in neravninski (K5 ) graf.. Na sliki 6 je polni graf na ²tirih to£kah narisan na dva na£ina. sliki se povezavi. ac. in. bd. Na zgornji. sekata, na spodnji sliki pa je razporeditev vozli²£.

(12) 1 Osnovni pojmi in denicije. 8. in povezav taka, da se noben par povezav ne seka, torej je graf To pa ne velja za polni graf. K5 ,. K4. ravninski.. saj je dokazano, da ga ni mogo£e narisati v. ravnini brez sekanja povezav.. Denicija 1.19 Vsaka ravninska risba ravninskega grafa G razdeli ravnino na obmo£ja, ki jih imenujemo lica. Eno od teh lic je neomejeno in ga imenujemo neskon£no lice. V Eulerjevi formuli je izraºena povezava med ²tevilom vozli²£, povezav in lic ravninskega grafa. ƒe je. n. ²tevilo vozli²£,. m. ²tevilo povezav in. f. ²tevilo lic. ravninske risbe povezanega ravninskega grafa, po Eulerjevi formuli velja:. n − m + f = 2.. Denicija 1.20 Grafa G in H sta izomorfna, £e obstaja bijektivna preslikava med vozli²£i G in H , tako da je ²tevilo povezav, ki povezujejo katerikoli par vozli²£ v G, enako ²tevilu povezav, ki povezujejo pripadajo£i par vozli²£ v H . G ≈ H ⇐⇒ ∃ bijektivna preslikava ϕ : V (G) −→ V (H) za katero velja: uv ∈ E(G) ⇐⇒ ϕ(u)ϕ(v) ∈ E(H),. za poljubni vozli²£i u, v ∈ V (G). Preslikavi ϕ re£emo izomorzem. a. b. c. f. 1. 2. 3. 4. 5 e. 6. d. Slika 7: Izomorfna grafa.. Da sta grafa na sliki 7 izomorfna, lahko potrdimo s preslikavo, ki vozli²£a preslika takole:. 1 7−→ c, 2 7−→ d, 3 7−→ a, 4 7−→ f, 5 7−→ e, 6 7−→ b..

(13) 1 Osnovni pojmi in denicije. 9. Denicija 1.21 Drevo je povezan graf brez ciklov. Denicija 1.22 Gozd je ne nujno povezan graf, pri katerem je vsaka komponenta drevo.. Denicija 1.23 Naj bo G povezan graf. Vpeto drevo v G je podgraf grafa G, ki vsebuje vsa vozli²£a grafa G in je drevo.. Denicija 1.24 Usmerjeni graf ali digraf D je sestavljen iz mnoºice vozli²£ V (D), mnoºice povezav E(D) in funkcije, ki vsaki povezavi priredi usmerjen,. urejen par vozli²£. Prva komponenta urejenega para vozli²£ je za£etek povezave, druga pa konec povezave.. V digrafu so vse povezave usmerjene. Povezava ozna£ena z. u. in konec v. uv. ima za£etek v. v.. Denicija 1.25 Naj bo D digraf in u vozli²£e digrafa D. Izhodna stopnja vozli²£a u je ²tevilo usmerjenih povezav, ki gredo iz to£ke u. Vhodna stopnja vozli²£a u je ²tevilo usmerjenih povezav, ki gredo v vozli²£e u.. Denicija 1.26 Drevo s korenom je usmerjeno drevo, ki ima natanko eno vozli²£e r z vhodno stopnjo 0, vsa ostala vozli²£a imajo vhodno stopnjo 1. Vozli²£u r pravimo koren drevesa s korenom. Vozli²£a, ki imajo izhodno stopnjo 0, pa imenujemo listi drevesa.. Denicija 1.27 Naj bo G graf brez zank. Dobro k-barvanje grafa G je dodelitev k barv vozli²£em grafa G, tako da sosednji vozli²£i dobita razli£ne barve. ƒe ima graf G dobro k -barvanje, je k -pobarljiv. Kromati£no ²tevilo grafa G, χ(G), je najmanj²e ²tevilo k , za katero je G k -pobarljiv..

(14) 1 Osnovni pojmi in denicije. 10. Obstaja enostavna metoda za dolo£itev spodnje meje za poi²£emo najve£ji polni podgraf grafa graf. Kp ,. potem je. je o£itno. χ(G) ≥ p.. χ(G) ≤ n,. G.. G. Naj bo v. Za dolo£itev zgornje meje. vendar je ta meja zelo slaba.. poznamo najve£jo stopnjo vozli²£a grafa. V. χ(G),. pri kateri. najve£ji polni pod-. χ(G) grafa z n vozli²£i. Precej jo izbolj²amo, £e. [6] je z matemati£no indukcijo. dokazan naslednji izrek.. Izrek 1.28 Za enostavni graf G z najve£jo stopnjo vozli²£a d je χ(G) ≤ d + 1.. Ker z dolo£anjem zgornje in spodnje meje ne dobimo vedno dobre ocene za kromati£no ²tevilo grafa, je potrebno vpeljati druge na£ine za dolo£anje. χ(G).. Denicija 1.29 Naj bo G enostavni graf in naj bo PG (k) ²tevilo na£inov barvanja grafa G s k barvami, tako da noben par sosednih vozli²£ nima dolo£ene iste barve. Funkcijo PG (k) imenujemo kromati£ni polinom grafa G. k-1. k. k-1. k. k. k (a). k-2. k-1. (b). Slika 8: Barvanje grafov s. k-1 (c). k. barvami.. Na sliki 8 so narisani gra (a), (b) in (c) na treh vozli²£ih z razli£nim ²tevilom povezav. sliki.. Vsakega od teh lahko pobarvamo s. k. barvami kot je ozna£eno na. Dvema vozli²£ema grafa (a) lahko priredimo katerokoli od. k. barv, saj.

(15) 1 Osnovni pojmi in denicije. 11. nista sosedni; tretjemu pa dolo£imo eno od preostalih dolo£ene njegovi sosedi.. k−1. barv, ki niso bile. Kromati£ni polinom tega grafa je tako. Podobno ugotovimo, da je kromati£ni polinom grafa (b). k 2 (k − 1).. k(k − 1)2 .. Graf (c). je polni graf na treh vozli²£ih. Prvo vozli²£e lahko pobarvamo s katerokoli od. k. barv, njegovi sosedi dolo£imo eno od preostalih. pa pobarvamo z eno od. k−2. je kromati£ni polinom grafa. k−1. barv, zadnje vozli²£e. barv, ki niso dolo£ene njegovim sosedam, zato. K3. enak. k(k − 1)(k − 2).. Iz kromati£nega polinoma lahko enostavno izra£unamo kromati£no ²tevilo grafa, saj je kromati£no ²tevilo grafa prvo pozitivno celo ²tevilo. k,. za katero je. PG (k) > 0.. Denicija 1.30 Naj bo G graf brez zank z n vozli²£i ozna£enimi z 1, 2, 3, . . . , n. Sosednostna matrika M (G) je matrika velikosti n × n, v kateri element v j -tem stolpcu i-te vrstice pove ²tevilo povezav, ki povezujejo vozli²£i i in j .. Nazornej²a razlaga s primerom sosednostne matrike se nahaja v podpoglavju 2.3 na strani 17..

(16) 2 Gra in algoritmi v ra£unalni²tvu. 12. 2 Gra in algoritmi v ra£unalni²tvu 2.1 ƒasovna in prostorska zahtevnost Pri algoritmih je poleg pravilnosti bistvenega pomena tudi u£inkovitost le tega, ki se odraºa v £asovni (v£asih tudi prostorski) zahtevnosti.. Pri tem. gre za £as izvajanja implementiranega algoritma v ra£unalniku v odvisnosti od velikosti vhodnih podatkov. V. [1] je zapisano, da so zna£ilnosti vhodnih po-. datkov, ki vplivajo na £asovno zahtevnost naslednje: ²tevilo podatkov, velikost posameznega podatka, vrstni red podatkov, relacije med posameznimi podatki in druge lastnosti posameznega podatka.. Redko lahko natan£no dolo£imo £as izvajanja algoritma, je pa mogo£e najti dober pribliºek z ocenitvijo, kolikokrat se ponovijo osnovne ra£unalni²ke operacije kot so se²tevanje, od²tevanje, mnoºenje, deljenje. V praksi se parameter, ki dolo£a velikost problema, pogosto ozna£i z. n, tako da je £asovna zahtevnost. v bistvu funkcija tega parametra in jo ozna£imo s. T (n).. Ker lahko v neka-. terih primerih na £asovno zahtevnost vpliva ve£ parametrov, je v. [1] £asovna. zahtevnost razdeljena na:. •. velikostni red funkcije. •. dejanski pri£akovani £as izvajanja.. T (n). in. Pri algoritmih za re²evanje problemov z gra je parameter, ki ozna£uje velikost problema, pogosto kar ²tevilo vozli²£ grafa, lahko pa je tudi ²tevilo povezav grafa ali kak²na druga lastnost.. Na podlagi zgoraj opisanih dejstev je v [5] izpeljana primerjava u£inkovitosti dveh poljubnih algoritmov. Algoritem s £asovno zahtevnostjo od tistega s £asovno zahtevnostjo. O(n3 ),. O(n2 ). je bolj²i. £e je hitrej²i za ve£je vrednosti. n..

(17) 2 Gra in algoritmi v ra£unalni²tvu. 13. ƒe sta dejanska £asa izvajanja dveh programov za isti problem je bila ve£ja hitrost algoritma s £asovno zahtevnostjo. O(n2 ). An2. B.. To je seveda nepomembno, £e se. pa v praksi. n. An2 > Bn3. izpolnjena za vse vrednosti. n. Bn3. in. doseºena zaradi. zapletenej²ega in razdelanega programiranja, se lahko zgodi, da je ve£ji od. in. A. znatno. pove£uje £ez vse meje, vendar. nikoli ne gre v neskon£nost, zato se lahko zgodi, da je neenakost. n,. ki bodo dejansko uporabljene. Pod. temi pogoji se program s £asovno zahtevnostjo. O(n3 ) izkaºe za u£inkovitej²ega. in zato bolj²ega od prvega.. Naj bo pri opazovanju £asovne zahtevnosti velikost problema ozna£ena z. n.. Potem glede na £asovno zahtevnost algoritme razdelimo na polinomske in eksponentne. V skupino polinomskih algoritmov spadajo tisti, katerih £asovna zahtevnost je oblike. O(nk ),. kjer je. algoritme s £asovno zahtevnostjo. k. konstanta. Med eksponentne pri²tevamo. O(αn ),. kjer je. α. lahko konstanta. V. njihova razlika opisana s pomo£jo opazovanja rasti diference kjer je. f. funkcija £asovne zahtevnosti.. pove£anju problema za. [2] je. f (n + 1) − f (n),. Pri polinomskih algoritmih je pri. 1 prirastek za red manj²i kot sama £asovna zahtevnost,. medtem ko je pri eksponentnih algoritmih prirastek enak zahtevnosti za. 1 man-. j²ega problema.. Tako kot je £as izvajanja algoritma merilo £asovne zahtevnosti, je koli£ina potrebnega prostora v pomnilniku in na magnetnem disku merilo prostorske zahtevnosti. Najpogostej²a enota za merjenje prostorske zahtevnosti je ²tevilo zlogov potrebnih za predstavitev informacije. Pri tem se spomnimo:. 1 bit. 2 moºni stanji. 2 bita. 4 moºna stanja. 8 bitov. 28. 1 zlog (1 byte). moºnih stanj.

(18) 2 Gra in algoritmi v ra£unalni²tvu. (210 ) 1024. zlogov. 14. =. 1 kB. 1024. kB. =. 1 MB. (220. zlogov). 1024. MB. =. 1 GB. (230. zlogov). Opravimo primerjavo med eksponentno in polinomsko zahtevnostjo. Opazujmo prostor, ki ga za shranjevanje podatkov potrebuje matrika, katere prostorska zahtevnost je. n2. in neka podatkovna struktura. Vidimo, da podatkovna struktura. S. S,. ki zahteva. 2n. prostora.. ºe pri razmeroma majhni velikosti pro-. blema porabi kar 1 GB prostora, medtem ko matrika pri isti velikosti problema ²e vedno ne zasede 1 kB prostora.. n. n2. 2n. 10 100. 1024. 11 121. 2048. . . .. . . .. . . .. 20 400 1048576 . . .. . . .. 30 900. (1 MB). . . .. ≈ 109. (1 GB). 2.2 Razredi problemov Za dobro razumevanje, kako so problemi in s tem tudi algoritmi razdeljeni v razrede, je najprej treba pojasniti pojma odlo£itveni problem in optimizacijski problem, kar je opisano v. [7].. Odlo£itveni problem je dolo£en z mnoºico nalog, ta pa razpade na dva razreda: tiste, za katere je odgovor na vpra²anje DA in tiste, za katere je odgovor NE. Na primer, pri ugotavljanju ravninskosti grafa, je graf ravninski ali pa ni. Podobno je tudi pri izomorzmu, grafa sta izomorfna ali pa ne.. Optimizacijski problem je dolo£en z mnoºico nalog in z namensko funkcijo, pri £emer lahko privzamemo, da je vedno treba poiskati minimum namenske.

(19) 2 Gra in algoritmi v ra£unalni²tvu. funkcije. V. 15. [7] so optimizacijski problemi lo£eni ²e glede na to ali nas zani-. ma samo optimalna vrednost namenske funkcije ali tudi vsaj ena optimalna re²itev, saj lahko zapis optimalne re²itve v£asih odlo£ilno vpliva na zahtevnost problema.. Pri obravnavi zahtevnosti problemov odlo£itveni problem razvrstimo v razred P, £e za njegovo re²itev obstaja polinomski deterministi£ni algoritem. V razredu NP pa se nahajajo odlo£itveni problemi, ki jih je mogo£e re²iti v polinomskem £asu z nedeterministi£nim algoritmom.. Poenostavljeno lahko re£emo, da je. problem v razredu NP, £e obstaja polinomski algoritem, ki v primeru pozitivnega odgovora preveri pravilnost odgovora.. NP-polni problemi so podmnoºica problemov razreda NP, za katere bi lahko rekli, da so najteºji problemi v tem razredu. Za poljubni NP-polni problem velja: £e najdemo polinomski algoritem, ki ga re²i, v polinomskem £asu re²imo tudi vse probleme iz NP in bi veljalo P = NP. Velja tudi obrat zgornje trditve: £e za poljuben problem iz razreda NP-polnih problemov dokaºemo, da zanj ni mogo£e napisati polinomskega algoritma, bi to veljalo za vse probleme iz tega razreda.. Na podoben na£in so denirani NP optimizacijski problemi (razred NPCO), v polinomskem £asu re²ljivi optimizacijski problemi (razred PO) in NP-polni optimizacijski problemi.. V [7] je predstavljena enostavna pot, kako optimizacijskemu problemu prirediti odlo£itveno razli£ico.. ƒe podatkom dodamo ²tevilo. m. in namesto iskanja. minimuma namenske funkcije ugotavljamo, ali je minimum namenske funkcije manj²i od. m,. dobimo odlo£itveni problem.. Optimizacijski problem je v razredu PO, £e obstaja polinomski algoritem, ki ga re²i. Izkaºe se, da je to natanko tedaj, ko je njegova odlo£itvena razli£ica problema v razredu P. Prav tako je optimizacijski problem NP-teºek, £e je njegova odlo£itvena razli£ica NP-polni problem..

(20) 2 Gra in algoritmi v ra£unalni²tvu. 16. 2.3 Podatkovne strukture za predstavitev grafov Ko ºelimo algoritem realizirati v nekem programskem jeziku, se postavi vpra²anje, katero podatkovno strukturo uporabiti, da bo program hitro in u£inkovito deloval.. Pri algoritmih, ki obravnavajo grafe, je ²e posebno pomembno, da. na£in predstavitve grafa prilagodimo konkretnemu algoritmu in s tem zagotovimo hitrost in u£inkovitost programa.. Tako je pri algoritmih, ki pogosto. zahtevajo podatek o sosedah poljubnega vozli²£a, graf smiselno predstaviti s sosednostno matriko, medtem ko bo pri algoritmih, ki se ukvarjajo s povezavami grafa, primernej²i seznam povezav dolo£enih s kraji²£ema v naklju£nem vrstnem redu.. 1. 2. 8. 3. 7. 4 6. 5. Slika 9: Graf. Za graf. G.. G na sliki 9 je sosednostna matrika napisana spodaj,. vrstici in. j -tem stolpcu pomeni,. recimo vozli²£i. 2. in. 5. da sta vozli²£i. v na²em primeru.. i in j. pri £emer. 1 v i-ti. povezani oz. sosedni, kot.

(21) 2 Gra in algoritmi v ra£unalni²tvu. 17. 1 2 3 4 5 6 7 8 1 2 3 4 5 6 7 8. 0. 1. 1. 1. 1. 0. 0. 1. 1. 0. 1. 1. 1. 0. 0. 0. 1. 1. 0. 1. 0. 0. 0. 0. 1. 1. 1. 0. 1. 0. 0. 0. 1. 1. 0. 1. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 1. 0. 0. 0. 0. 0. 0. 1. 0. 1. 1. 0. 0. 0. 0. 0. 1. 0. Podatek o povezanosti dveh vozli²£ je dosegljiv v konstantnem £asu, kar pomeni, da je neodvisen od ²tevila vozli²£ in ²tevila povezav grafa. Je pa tak na£in predstavitve grafa prostorsko potraten predvsem za grafe, ki imajo malo ²tevilo povezav. V na²em primeru so v vrstici oz. stolpcu za vozli²£a noma. 0,. 6, 7. in. 8. ve£i-. ker imajo ta vozli²£a samo po dve sosedi, dodeljen pa jim je enak. prostor kot ostalim.. U£inkovitej²o izkori²£enost prostora zagotavlja predstavitev grafov s seznamom povezav v naklju£nem vrstnem redu. Pri tem je vsaka povezava predstavljena s parom celih ²tevil, ki predstavljajo oznake incidentnih vozli²£. seznam za graf. 1 2. 2 3. 3 4. G. Ustrezen. na sliki 9 je. 4 5. 5 6. 6 7. 7 8. 8 1. 1 4. 4 2. 2 5. 5 1. 1 3. Ta na£in predstavitve grafa se slab²e izkaºe pri algoritmih, v katerih je danemu vozli²£u. i. pogosto potrebno poiskati sosednje vozli²£e. Za ta podatek je nam-. re£ potrebno preiskati celoten seznam povezav in najti ustrezen par vozli²£, medtem ko moramo v sosednosti matriki poiskati. 1. v. i-ti. vrstici.. Da polju-. bnemu vozli²£u v seznamu povezav poi²£emo sosednje vozli²£e je v najslab²em primeru treba pregledati vseh. m. povezav, tako da se £as dostopa do tega po-. datka v splo²nem pove£uje s ²tevilom povezav grafa..

(22) 2 Gra in algoritmi v ra£unalni²tvu. Optimalnej²o re²itev v tem primeru ponuja tem. i-ti. Za graf. 18. n. seznamov sosednjih vozli²£. Pri. seznam sestoji iz oznak vozli²£ sosednih vozli²£u. G. i (i = 1, 2, 3, ..., n).. na sliki 9 bi ta podatkovna struktura izgledala takole:. 1. 2. 3. 4. 5. 2. 1. 3. 4. 5. 3. 1. 2. 4. 4. 1. 2. 3. 5. 5. 1. 2. 4. 6. 6. 5. 7. 7. 6. 8. 8. 1. 7. 8. Slika 10: Seznam sosednih vozli²£.. Na sliki 10 je podatkovna struktura sicer prikazana z dinami£nimi seznami, vendar jo lahko predstavimo tudi s stati£nimi seznami v obliki. n polj razli£nih. dolºin, pri £emer ima vsako polje kazalec na za£etek in konec seznama. Dejstvo je, da take podatkovne strukture ni lahko ustvariti, prav tako se pojavijo teºave pri dodajanju sosednjih vozli²£ in odstranjevanju vozli²£ na poljubnem mestu seznama.. To je tudi razlog, da se bolj nagibamo k dinami£nim seznamom,. ki jih oblikujemo tako, da kazalec na naslednjega kaºe na mesto, kamor bo vstavljeno novo vozli²£e oziroma pomeni konec seznama.. Kadar algoritem iz teorije grafov zahteva hiter dostop do posebne vrste podatkov, ki zadevajo vozli²£a, povezave grafa in relacije med njimi, bo potrebno ustvariti veliko bolj kompleksno in zapleteno podatkovno strukturo. Po drugi strani pa uporaba kompleksne podatkovne strukture pri algoritmih, kjer zadostuje enostavnej²a, pomeni potro²njo v programiranju in £asu izvedbe programa..

(23) 2 Gra in algoritmi v ra£unalni²tvu. 19. Zgoraj omenjeni na£ini predstavitve grafa v ra£unalniku ne predstavljajo najbolj²ega moºnega na£ina, ampak je podatkovno strukturo pogosto potrebno prilagoditi konkretni aplikaciji.. 2.4 Povezani seznam, sklad in vrsta Povezani seznam je podatkovna struktura, ki jo v splo²nem sestavlja elementov. ai (i = 1, 2, ...n),. datki, ki jih nosijo elementi. n ≥ 0. ki jih poveºemo v seznam. Pri tem so lahko po-. ai , razli£nih podatkovnih tipov, prav tako je lahko. v splo²nem poljuben tudi interval, s katerega izbiramo indekse, ki ozna£ujejo zaporedne elemente seznama.. V splo²nem je nad seznamom mogo£e izvesti veliko razli£nih operacij, vendar, odvisno od namena uporabe seznama, obi£ajno uporabljamo le nekatere. Najpogosteje uporabljene operacije so:. 1. Vstavi(seznam, i, podatek ): Na. podatek ,. mesto v seznamu. ki prekrije prej²nji podatek na. 2. Vrini(seznam, i, podatek ):. podatek ,. i-to. zato se elementi. 3. Vrni(seznam, i): Vrne. Na. i-to. se vstavi. seznam. se vrine. mestu.. mesto v seznamu. ai , ai+1 , ..., an. i-ti. i-tem. seznam. pomaknejo za eno v desno.. podatek seznama. seznam,. pri £emer slednji. ostane nespremenjen.. 4. Odstrani(seznam, i): elementi. Odstrani. ai+1 , ai+2 , ..., an. i-ti. podatek seznama. seznam,. zato se. pomaknejo za eno v levo.. Seznam lahko predstavimo stati£no ali dinami£no.. Stati£na predstavitev v. tabeli je za operaciji Vrini in Odstrani £asovno potratna, saj zahteva pomikanje elementov tabele. Nekoliko zahtevnej²a, vendar precej u£inkovitej²a je dinami£na predstavitev s kazalci. V tem primeru vsak element ve, kdo je njegov.

(24) 2 Gra in algoritmi v ra£unalni²tvu. 20. naslednik, s £imer postane seznam enosmerno povezan. Element seznama je sedaj sestavljen iz podatka in kazalca na naslednji element.. Med preprosta povezana seznama spadata podatkovni strukturi sklad in vrsta, ki se pri delu z ra£unalnikom pogosto uporabljata. Sklad je nepogre²ljiv pri rekurzivnih klicih podprogramov, saj se pri tem nanj shranijo vsi potrebni podatki. Vrsta se najpogosteje uporablja, ko programi £akajo na izvajanje ali zapis ter pri prenosu podatkov z diska v hitri pomnilnik.. Sklad je urejeni seznam, v katerega vstavljamo in iz njega bri²emo samo na enem koncu, to je na vrhu sklada. Tako bo podatek, ki je bil zadnji vstavljen na sklad, tudi prvi zbrisan z njega. Osnovne operacije za delo s skladom so:. 1. Pripravi(): Pripravi prazen sklad.. 2. Vstavi(S, p): Vstavi podatek. p. na sklad. S.. 3. Vrh(S ): Vrne podatek, ki je na vrhu sklada. S,. pri £emer ta ostane ne-. spremenjen.. 4. Odstrani(S ): Izbri²e podatek, ki je na vrhu sklada. 5. Prazen(S ):. Vrne. true,. £e je sklad. S. prazen, in. S.. false. v nasprotnem. primeru.. Vrsta je urejeni seznam, v katerega vstavljamo na enem koncu, ki ga imenujemo rep ali konec vrste, in iz njega odstranjujemo elemente z drugega konca, to je za£etka vrste. Podatki torej zapu²£ajo vrsto v enakem zaporedju kot so bili vanjo vstavljeni. Osnovne operacije, s katerimi upravljamo z vrsto so:. 1. Pripravi(): Pripravi prazno vrsto.. 2. Vstavi(V, p): Vstavi podatek. p. na konec vrste. V.. 3. Za£etek(V ): Vrne podatek, ki je na za£etku vrste. V..

(25) 2 Gra in algoritmi v ra£unalni²tvu. 21. 4. Odstrani(V ): Izbri²e prvi element vrste. 5. Prazna(V ):. Vrne. true,. £e je vrsta. V. V. prazna, in. false. v nasprotnem. primeru.. Ker sta sklad in vrsta enostavnej²i obliki urejenega seznama, ju lahko tako kot seznam predstavimo bodisi stati£no bodisi dinami£no. Stati£na predstavitev sicer porabi ve£ prostora, vendar je hitrej²a in jo je laºje inicializirati.. Pri skladu v obliki tabele potrebujemo spremenljivko, ki ozna£uje indeks zadnjega vstavljenega elementa in je. 0, £e je sklad prazen.. Operaciji za vstavlja-. nje in brisanje elementov sklada sta predstavljeni v nadaljevanju.. procedure Vstavi(sklad, n, v, podatek) begin if v ≥ n then sklad je poln else begin v := v + 1; skladv := podatek;. end end. procedure Odstrani(sklad, n, v, podatek) begin if Prazen(sklad, v) then napaka else begin podatek := skladv ; v := v − 1;. end end..

(26) 2 Gra in algoritmi v ra£unalni²tvu. 22. S tabelo je mogo£e predstaviti tudi vrsto, vendar jo je potrebno voditi kot kroºno po modulu velikosti, da bomo lahko po brisanju elementov zapolnili spro²£en prostor na za£etku vrste. Uporabimo spremenljivko. z , ki jo postavimo. na eno mesto pred za£etkom vrste. S tem ostane en element neizkori²£en in deluje kot straºar. Pri tem velja. n, ko je vrsta polna.. z = k,. ko je vrsta prazna in. procedure Vstavi(vrsta, n, z, k, podatek) begin mod. n;. if z = i then vrsta je polna else begin k := i; vrstak := podatek;. end end. procedure Odstrani(vrsta, n, z, k, podatek) begin if z = k then napaka else begin z := (z + 1). mod. n;. podatek := vrstaz ;. end end.. mod. Pod temi pogoji je vstavljanje in brisanje elementov vrste. mogo£e izvesti takole:. i := (k + 1). z = (k + 1).

(27) 2 Gra in algoritmi v ra£unalni²tvu. 23. Pri dinami£ni predstavitvi sklada in vrste je zadeva podobna dinami£nemu seznamu, le da je pri skladu dovolj, da poznamo njegov elementov, za vrsto pa potrebujemo elementov v vrsto.. za£etek. in. vrh. in razporeditev. konec ter vrstni red vstavljanja.

(28) 3 Vpeta drevesa. 24. 3 Vpeta drevesa Vemo, da mora vpeto drevo grafa. G. zajemati vsa vozli²£a (vsakega natanko. enkrat) tega grafa in take povezave iz povezave pa ne tvorijo cikla.. V. G,. da je novonastali graf povezan,. [6] sta omenjeni dve metodi za iskanje. vpetega drevesa v povezanem grafu. Prva je metoda odstranjevanja, pri kateri iz poljubnega cikla v grafu. G odstranimo eno povezavo.. Postopek ponavljamo,. dokler v grafu ni nobenega cikla ve£; dobljeni graf je vpeto drevo. ƒe. G. nima. cikla, je sam sebi vpeto drevo.. Metoda konstrukcije je podrobneje opisana v. [5].. Osnovna ideja iskanja. vpetega drevesa grafa po tej metodi je v postopnem preiskovanju povezav grafa, ki jih ozna£imo za pripadajo£e vpetemu drevesu, £e ne tvorijo cikla z mnoºico povezav, ki so ºe zajete v vpeto drevo tega grafa. na£in ozna£ili. n−1. povezav, pri £emer je. n = |V (G)|,. grafa. V kolikor smo preiskali vse povezave iz. E(G),. ƒe smo na ta. smo dobili vpeto drevo. pa nismo ozna£ili. n−1. povezav, nam to da vedeti, da graf nima vpetega drevesa in je nepovezan. V tem primeru ozna£ene povezave tvorijo gozd, katerega drevesa so vpeta drevesa posameznih komponent preiskovanega grafa.. Denimo, da preiskujemo povezave grafa. G v poljubnem vrstnem redu ali, kakor. se v praksi pogosto zgodi, da informacije o povezavah v program vstopajo postopoma in v naklju£nem vrstnem redu. V tem primeru bo podgraf, ki nastaja po zgoraj opisanem postopku, na poljubnem mestu algoritma v splo²nem nepovezan. Temu problemu se lahko izognemo. ƒe upo²tevamo, da mora imeti vsaka na novo preiskovana povezava eno kraji²£e ºe zajeto v podgraf, bo ta povezan na vsakem koraku. Za tak pristop je potrebno imeti vse informacije o grafu preden za£nemo izvajati algoritem, prav tako pa je pomembno, da je graf predstavljen na na£in, ki omogo£a enostaven in hiter dostop do sosed nekega vozli²£a.. ƒe je tem pogojem zado²£eno, lahko postopamo, kot je opisano v. nadaljevanju..

(29) 3 Vpeta drevesa. 25. Izberemo vozli²£e, imenujemo ga lahko koren vpetega drevesa. Poi²£emo mu incidentno povezavo. e. oz.. sosednje vozli²£e. incidentno povezavo vozli²£u. v. v.. V nadaljevanju bomo iskali. in tako nadaljevali s postopkom.. Imenujmo. tako doseºeno vozli²£e na nekem nivoju aktivna to£ka. ƒe je drugo kraji²£e povezave. e vozli²£e, na katerega smo ºe naleteli, e ne bo v vpetem drevesu, ker. bi sicer dobili cikel. Ozna£imo le, da smo to povezavo preiskali, in nadaljujemo s preiskovanjem naslednje incidentne povezave z aktivno to£ko. ƒe ²e nismo imeli opraviti z njenim drugim kraji²£em, to postane aktivna to£ka, povezava pa je vklju£ena v vpeto drevo grafa. Na nekem mestu se lahko zgodi, da smo opravili z vsemi incidentnimi povezavami aktivne to£ke, tedaj moramo narediti korak nazaj k prej²njemi aktivni to£ki in tu izbrati incidentno povezavo. Ta na£in sestopanja ponavljamo, dokler ne pridemo do korena in ne najdemo nobene incidentne povezave ve£.. Tako smo skonstruirali vpeto drevo ene komponente grafa. ƒe smo preiskali vsa vozli²£a grafa, potem smo kon£ali, sicer za nov koren izberemo ²e nepreiskano vozli²£e grafa in poi²£emo vpeto drevo druge komponente grafa.. 7. 1. 6. 5. 2. 3. Slika 11: Graf. 4. G.. Spodaj navedeni primer nam nazorneje predstavi potek opisanega algoritma. Graf. G. na sliki 11 opi²emo s seznami sosednjih vozli²£ takole:.

(30) 3 Vpeta drevesa. ƒe izberemo. 1. 26. 1. :. 2,. 5,. 7. 2. :. 1,. 5. 3. :. 4. 4. :. 3,. 5,. 6. 5. :. 1,. 2,. 4,. 6. :. 4,. 5. 7. :. 1. 6. za koren vpetega drevesa, bo zgoraj opisani algoritem potekal. po naslednjih korakih:. povezava. opis koraka. aktivna to£ka. 12. povezava je vklju£ena v vpeto drevo. 2. 25. povezava je vklju£ena v vpeto drevo. 5. 51. s to povezavo dobimo cikel,. 5. zato je ne vklju£imo v vpeto drevo. 54. povezava je vklju£ena v vpeto drevo. 4. 43. povezava je vklju£ena v vpeto drevo. 3. naredimo en korak nazaj. 4. povezava je vklju£ena v vpeto drevo. 6. naredimo en korak nazaj. 4. sestopamo do korena. 1. povezava je vklju£ena v vpeto drevo. 7. 46. 17. ni povezav incidentnih s. 7. ali. 1. pregledali smo vse to£ke, izstopimo iz algoritma. Vpeto drevo grafa lahko nari²emo tudi tako, da povezave od ene do druge aktivne to£ke potekajo preteºno zaporedno navzgor. Pri tem povezave usmerimo tako, da je pu²£ica usmerjena proti vozli²£u, ki ga je algoritem obiskal kasneje. ƒe povezave grafa, ki jih nismo vklju£ili v vpeto drevo, usmerimo v.

(31) 3 Vpeta drevesa. 27. 7. 1. 6. 5. 2. 4. 3. Slika 12: Vpeto drevo grafa. G.. nasprotni smeri (proti vozli²£u, ki smo ga obiskali prej) in dodamo usmerjenim povezavam vpetega drevesa, dobimo usmerjeni graf, ki ga imenujemo palma. Primer palme je na sliki 13.. 3. 6. 4. 5. 7. 2. 1. Slika 13: Palma.. V nadaljevanju je napisana podrobnej²a psevdokoda za zgoraj opisani algoritem.. v. Dan je seznam vozli²£ grafa. v komponenti. v.sosedai v.. za. v.StSosed. V = {v1 , v2 , . . . , vn }.. Za vsako vozli²£e. hranimo podatek o ²tevilu sosed vozli²£a. i = 0, 1, . . . , v.StSosed − 1. pa ozna£imo. Za ve£jo u£inkovitost algoritma imamo polje. sw,. v,. z. i-tega. soseda vozli²£a. swj. ozna£uje nasle-. kjer.

(32) 3 Vpeta drevesa. 28. dnjega nepreiskanega soseda dobi vrednost. j -tega vozli²£a.. Globalna spremenljivka. zastavica. false, £e aktivna to£ka nima ve£ nepreiskanih sosed, kar pomeni,. da se je potrebno vrniti k prej²nji aktivni to£ki. Pri tem nam je v pomo£ polje. pw,. v katerem beleºimo zaporedje aktivnih to£k.. procedure Vpeto drevo(V, E, v0 ); begin VD := {} ; //mnoºica vozli²£ vpetega drevesa ED := {} ; //mnoºica povezav vpetega drevesa zastavica :=. true;. sw := (0, 0, ..., 0); w := v0 ; //aktivna to£ka w.obiskan :=. true;. VD := VD ∪ {v0 } ; j := 0; pwj := 0; //vozli²£e od katerega je bila aktivna to£ka najprej obiskana. loop v :=. Poi²£i sosedo(w,. j );. if zastavica then begin VD := VD ∪ {v}; ED := ED ∪ {(w, v)}; v.obiskan :=. true;. pwj := w; j := j + 1; w := v;. end; else begin if w = v0 then exit(loop); //koren nima ve£ nepreiskanih sosed j := j − 1;.

(33) 3 Vpeta drevesa. 29. w := pwj ; //vrnemo s k prej²njemu vozli²£u zastavica :=. true;. end; forever end. function Poi²£i sosedo(x, j ); begin while swj < x.StSosed and x.sosedaswj .obiskan do swj := swj + 1; if swj < x.StSosed then return(x.sosedaswj ); else begin zastavica := false; //globalna spremenljivka return(); end; end. V nadaljevanju je predstavljen potek algoritma in vrednosti spremenljivk na vsakem koraku za graf na sliki 11..

(34) 3 Vpeta drevesa. 30. V = {1, 2, 3, 4, 5, 6, 7} v0 = 1. v. zastavica w. j. pwj. VD. 1. 0. 0. 1. 2. 2. 1. 1. 1, 2. 12. 5. 5. 2. 2. 1, 2, 5. 12, 25. 4. 4. 3. 5. 1, 2, 5, 4. 12, 25, 54. 3. 3. 4. 4. 1, 2, 5, 4, 3. 12, 25, 54, 43. F. 4. 3. 5. T. 6. 4. 4. 1, 2, 5, 4, 3, 6. 12, 25, 54, 43, 46. F. 4. 3. 5. 5. 2. 2. 2. 1. 1. F. 1. 0. T. 7. 1. F. 1. 0. T. 6. ED. T F T F T. 7. 1. 1, 2, 5, 4, 3, 6, 7 12, 25, 54, 43, 46, 17. T F. V zgoraj opisanem algoritmu smo ²li tako dale£ kot le mogo£e v globino, preden smo za£eli sestopati, kar se ujema s preiskovanjem v globino (ang. DFS - Depth First Search), zato se ta na£in imenuje preiskovanje grafa v globino.. Vpeto. drevo, ki ga dobimo, je odvisno od tega, katero vozli²£e izberemo za koren in v kak²nem vrstnem redu pregledujemo povezave. Oblika vpetega drevesa niti ni tako pomembna, bolj pomembno je, da smo na grafu se u£inkovito uporablja v razli£nih primerih.. G. dobili strukturo, ki.

(35) 3 Vpeta drevesa. 31. ƒasovna zahtevnost:. Algoritem prei²£e vsako vozli²£e in vsako povezavo. najve£ dvakrat, zato je £asovna zahtevnost algoritma. O(n + m).. Poleg preiskovanja v globino grafa poznamo ²e preiskovanje v ²irino grafa, ki se prav tako u£inkovito uporabi pri iskanju vpetega drevesa poljubnega grafa. V [8] je predstavljena glavna ideja tega postopka in psevdokoda za algoritem. Za koren vpetega drevesa vzamemo poljubno vozli²£e. v1 ,. nato v vpeto drevo. vklju£imo vse sosede tega vozli²£a in povezave do njih. V nadaljevanju dodamo vse tiste sosede teh vozli²£, ki ²e niso bile preiskane in tako dalje. Z naslednjim zaporedjem korakov nazorno opi²emo algoritem za iskanja vpetega drevesa s preiskovanja v ²irino grafa.. 1.. v0. dodamo v. T,. ga vstavimo v vrsto in ga ozna£imo za preiskanega.. 2. ƒe je vrsta prazna, smo kon£ali, sicer naj bo. 3. Za vsako vozli²£e dodamo. w. w. iz. G,. in povezavo. v. vozli²£e na za£etku vrste.. ki ²e ni bilo preiskano in je sosednje vozli²£u. (v, w). v. T, w. v,. vstavimo v vrsto in ga ozna£imo. za preiskanega.. 4.. v. izbri²emo iz vrste.. 5. Vrnemo se na korak 2.. Dan je seznam vozli²£ grafa. V = {v1 , v2 , . . . , vn }. s katerim za£nemo preiskovanje. V komponenti vozli²£e. v. ºe preiskano,. v , v.sosedai. za. v.StSosed. in koren vpetega drevesa. v.obiskan. v0 ,. beleºimo ali je bilo. ozna£uje ²tevilo sosednih vozli²£ vozli²£a. i = 0, 1, . . . , v.StSosed − 1. pa ozna£uje. i-tega. soseda od. v.. Uporabljena je podatkovna struktura vrsta in osnovni operaciji za vstavljanje in odstranjevanje elementov iz vrste, ki sta podrobneje opisani v podpoglavju 2.4 na strani 19..

(36) 3 Vpeta drevesa. 32. procedure Vpeto drevo(V, E, v0 ); begin VD := {v0 } ; //mnoºica vozli²£ vpetega drevesa ED := {} ; //mnoºica povezav vpetega drevesa Pripravi vrsto(); Vstavi(vrsta,. v0 );. v0 .obiskan :=. true;. while not Prazna(vrsta) do begin v :=. Odstrani(vrsta);. for i := 0 to v.StSosed − 1 do begin w := v.sosedai ;. if not w.obiskan then begin VD := VD ∪ {w}; ED := ED ∪ {(v, w)}; Vstavi(vrsta,. w);. true; if |VD | = |V | then exit(Vpeto drevo); end; end; end; end. w.obiskan :=. Sledi potek delovanja algoritma z opazovanjem najpomembnej²ih spremenljivk za graf na sliki 14. Graf naj bo predstavljen tako, da ima vsako vozli²£e seznam svojih sosed..

(37) 3 Vpeta drevesa. 33. c b h d. e. g i a. f. Slika 14: Graf. G.. a. :. b,. f,. g. b. :. a,. e,. g,. h,. c. :. d,. g,. h,. i. d. :. c,. e,. g,. h. e. :. b,. d,. i. f. :. a,. g,. i. g. :. a,. b,. c,. h. :. b,. c,. d. i. :. b,. c,. e,. d,. f. i. f.

(38) 3 Vpeta drevesa. 34. V = {a, b, c, d, e, f, g, h, i} v0 = a. vrsta. v. w. a b. VD. ED. a b. a, b. ab. b, f. f. a, b, f. ab, af. b, f, g. g. a, b, f, g. ab, af, ag. a, b, f, g, e. ab, af, ag, be. f, g. a. b. f, g, e. a e g. f, g, e, h. h. a, b, f, g, e, h. ab, af, ag, be, bh. f, g, e, h, i. i. a, b, f, g, e, h, i. ab, af, ag, be, bh, bi. g, e, h, i. f. a g i. e, h, i. g. a b. e, h, i, c. c. a, b, f, g, e, h, i, c. ab, af, ag, be, bh, bi, gc. e, h, i, c, d. d. a, b, f, g, e, h, i, c, d. ab, af, ag, be, bh, bi, gc, gd. ƒasovna zahtevnost:. V algoritmu je vsako vozli²£e in povezava obiskana. najve£ dvakrat, zato je £asovna zahtevnost tega algoritma. O(n + m)..

(39) 4 Osnovni obhodi, prese£ne to£ke in bloki. 35. 4 Osnovni obhodi, prese£ne to£ke in bloki 4.1 Osnovni obhodi Z algoritmom opisanim v tretjem poglavju enostavno odkrijemo tudi obhode v preiskovanem grafu. Povezava. e, ki ima za eno kraji²£e aktivno to£ko, za drugo. kraji²£e pa vozli²£e, ki je ºe vklju£eno v vpeto drevo, sklene obhod v podgrafu ozna£enih povezav. Preden povezavo. e. zavrnemo, ker je ne bomo vklju£ili v. vpeto drevo, shranimo podatek, da s to povezavo dobimo obhod, tako bomo na koncu algoritma za iskanje vpetega drevesa imeli mnoºico osnovnih obhodov, ki jih ni teºko odkriti.. π(v). naj bo predhodnik vozli²£a. najprej dosegli vozli²£e za sestopanje.. in pomeni aktivno to£ko, od katere smo. ustrezno beleºimo, ker ga bomo potrebovali. Ko najdemo povezavo, ki veºe aktivno to£ko. ozna£enim vozli²£em ne pridemo do. v . π(v). v. b.. b,. sledimo zaporedju vozli²£. a. z nekim ºe. a, π(a), π(π(a)), . . .. dokler. S tem smo dobili mnoºico vozli²£ in povezav, ki tvorijo. osnovni obhod dolo£en s povezavo. ab.. Ker smo £rtkanim povezavam na sliki 13 dodali pu²£ice, so osnovni obhodi v grafu pravzaprav usmerjeni obhodi na sliki. Na sliki 13 prikazano strukturo imenujemo palma, £rtkane povezave pa listi.. 4.2 Mostovi Omenjeni postopek enostavno odkrije tudi vse mostove povezanega grafa. Vsaka povezava, ki ni most, mora pripadati nekemu obhodu, torej mora biti vsebovana vsaj v enem danem osnovnem obhodu. povezanem grafu. G,. Da poi²£emo mostove v. izvedemo zgoraj opisano preiskovanje v globino in ozna-. £imo povezave, ki sestavljajo osnovne obhode. Povezave, ki na ta na£in ostanejo ob koncu algoritma neozna£ene, predstavljajo mostove grafa. G..

(40) 4 Osnovni obhodi, prese£ne to£ke in bloki. 36. 4.3 Prese£ne to£ke in bloki V. [5] je za iskanje blokov in prese£nih to£k poljubnega grafa upo²tevano dej-. stvo, da sta povezavi. e. in. ki vsebuje obe povezavi.  e in. f. f. v istem bloku natanko tedaj, £e obstaja obhod,. Naj bo dana mnoºica osnovnih obhodov.. Relacija. sta v relaciji, £e pripadata istemu osnovnemu obhodu ni ekvivalen£na. relacija, ker ni tranzitivna. ƒe pa vzamemo njeno tranzitivno zaprtje, dobimo ekvivalen£no relacijo, ki mnoºico povezav razbije na ekvivalen£ne razrede, katerih povezave dolo£ajo bloke grafa. G.. Enostavnej²i na£in iskanja blokov je predstavil Tarjan z algoritmom, v katerem izkoristi prednosti iskanja v globino in uporabi naslednji izrek:. Izrek 4.1 ƒe za poljubna vozli²£a x, y in z grafa G obstaja pot med x in y, ki ne poteka skozi z , potem je G blok. Pogoj za za£etek algoritma je konstrukcija ustrezne palme, katere denicija in primer se nahaja v poglavju 3 na strani 26. Vsakemu vozli²£u oznako. v.index,. v pripnemo novo. ki predstavlja zaporedno ²tevilko preiskovanja tega vozli²£a.. To pomeni, da bo vozli²£e z manj²o oznako niºje kot tisto z ve£jo oznako. Za vsako vozli²£e povezano z. v,. v. zabeleºimo ²e vrednost oznake najniºjega vozli²£a, ki je. ozna£imo ga. tako da obstaja pot od. v. v.low,. do. w. to je oznaka vozli²£a. w. z najniºjo oznako,. v drevesu. Ta pot je sestavljena iz ²tevilnih. povezav, ki potekajo navzgor in ene poti, ki poteka navzdol do. w.. Tako, kot je konstruirana palma, se tekom algoritma oblikuje sklad z vsebovanimi vozli²£i. Ko pride do situacije, da ni ve£ sosed, ki bi jih preiskali glede na vozli²£e na vrhu sklada, preverimo, £e gre morda za blok, sicer pa sestopimo. ƒe je na poljubnem mestu vrednost. v.low za vozli²£e v enaka vrednosti v.index. za to isto vozli²£e, potem blok grafa so bila nanj naloºena za vozli²£em. v.. G. sestavljajo vsa vozli²£a na skladu, ki. Prese£na to£ka, ki denira ta blok, je. vozli²£e, ki po odstranitvi teh vozli²£ ostane na vrhu sklada..

(41) 4 Osnovni obhodi, prese£ne to£ke in bloki. 37. V spodaj napisani psevdokodi najprej konstruiramo pripadajo£o palmo, tako da med preiskovanjem grafa v globino usmerimo povezave glede na zaporedje vklju£evanja vozli²£ pri vpetem drevesu. Povezave, ki niso v vpetem drevesu, dodamo tako, da so usmerjene v nasproti smeri. Ker je palma usmerjeni graf, so podatki o povezavah shranjeni tako, da ima vsako vozli²£e. v.sosedaDi , do katerih vodi povezava iz vozli²£a v . v.StSosedD. je v bistvu izhodna stopnja vozli²£a. v.. procedure Glavni(V, E, v0 ); begin for ∀ v ∈ V do v.index := 0; index := 1; Konstruiraj palmo(V,. E, v0 );. Pripravi sklad(); Blok(v0 );. //za£nemo s korenom vpetega drevesa. end. procedure Blok(v); begin v.index := index; v.low := index; index := index + 1; Vstavi(S,. v );. for i := 0 to v.StSosedD − 1 do begin w := v.sosedaDi. if w.index = 0 then begin Blok(w );. v.low :=Min(v.low, w.low);. end;. v. seznam vozli²£. Podatek o ²tevilu teh sosed.

(42) 4 Osnovni obhodi, prese£ne to£ke in bloki else begin v.low :=Min(v.low, w.index);. end; end; if v.low = v.index then begin Izpis(BLOK:);. repeat w :=Odstrani(S ); Izpis(w );. until w = v; Izpis(PRESEƒNA TOƒKA:, Vrh(S ));. end; end. procedure begin. Konstruiraj palmo(V,. zastavica :=. E, v0 );. true;. sw := (0, 0, ..., 0); w := v0 ; //aktivna to£ka w.obiskan :=. true;. j := 0; pwj := 0; //vozli²£e od katerega je bila aktivna to£ka najprej obiskana. loop v :=. Palma poi²£i sosedo(w,. j );. if zastavica then begin w.sosedaD := v ; w.StSosedD := w.StSosedD + 1; v.obiskan :=. true;. 38.

(43) 4 Osnovni obhodi, prese£ne to£ke in bloki. 39. pwj := w; j := j + 1; w := v;. end; else begin if w = v0 then exit(loop); //koren nima ve£ nepreiskanih sosed j := j − 1; w := pwj ; //vrnemo s k prej²njemu vozli²£u zastavica :=. true;. end; forever end. function Palma poi²£i sosedo(x, j ); begin while swj < x.StSosed and x.sosedaswj .obiskan do begin x.sosedaDx.StSosedD := x.sosedaswj ; x.StSosedD := x.StSosedD + 1; swj := swj + 1;. end; if swj < x.StSosed then return(x.sosedaswj ); else begin zastavica := false; //globalna spremenljivka return(); end; end. Potek algoritma za primer na sliki 15, kjer so podatki o povezavah grafa in.

(44) 4 Osnovni obhodi, prese£ne to£ke in bloki. 40. c d a b. c. b. a. d. Slika 15: Graf. G. in pripadajo£a palma.. palme shranjeni s seznami vozli²£, kot je prikazano spodaj, je naslednji:. index. v. v.index. 1. a. 2. a. :. b,. d. b. :. a,. c,. c. :. b. d. :. a,. d. b. v.low. w. S. 1. 1. b. a. b. 2. 2. c. a, b. 3. c. 3. 3. 4. d. 4. 4. 1. a, b, c 1. a. a. :. b. b. :. c,. c. :. /. d. :. a. d. izpis BLOK:. BLOK:. c,. d, b, a. PRESEƒNA TOƒKA:. b. a, b, d. 5. ƒasovna zahtevnost:. Procedura Blok se za vsako vozli²£e pokli£e samo. enkrat in vsaka povezava se prei²£e najve£ dvakrat, zato je £asovna zahtevnost opisane procedure. O(n + m)..

(45) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 41. 5 Snovanje od zgoraj navzdol in kromati£ni polinomi V mnogih primerih se zgodi, da lahko re²imo problem na grafu. G,. re²itev podobnega problema na dveh manj²ih grah izpeljanih iz. £e najdemo. G.. V tem. primeru smo problem razdelili na dva podproblema, vsakega od teh pa lahko razdelimo ²e na dva manj²a podproblema in tako dalje. Na ta na£in ustvarimo dvoji²ko drevo, kakr²no je na sliki 16.. Kon£na vozli²£a oz.. listi dvoji²kega. drevesa so problemi, ki jih znamo enostavno re²iti in jih zato ne razbijamo na podprobleme. V na²em primeru na sliki 16 enostavno re²ljive probleme predstavljajo vozli²£a. c, d, g, h. in. i.. Za re²itev problema. a. torej izvedemo preisko-. vanje v globino drevesa in re²imo podprobleme v zaporedju in na koncu. a.. c, d, b, g, h, f, i, e. Vidimo, da enostavni problem re²imo, ko pridemo do njega, in. pozabimo nanj takoj, ko je prispeval svoj deleº pri re²evanju nadproblema.. a. e. b. c. d. g. f. i. h. Slika 16: Primer delitve problema.. Postopek, pri katerem z zaporedno delitvijo kompleksnej²i problem razdelimo na dva ali ve£ enostavnej²ih podproblemov, v ra£unalni²tvu imenujemo snovanje od zgoraj navzdol, algoritme, ki delujejo po tem postopku, pa vejitveni algoritmi (ang. branching algorithms). V nekaterih primerih so vsi podproblemi, ki izhajajo iz nekega problema enaki osnovnemu problemu, le da so.

(46) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 42. dolo£eni z druga£no (manj²o) mnoºico podatkov. V teh primerih govorimo o strategiji deli in vladaj. Ker je vsak podproblem kopija osnovnega problema, lahko algoritem deli in vladaj zelo naravno izvedemo z rekurzijo.. 5.1 Konstrukcija vseh vpetih dreves Ko ºelimo konstruirati vsa vpeta drevesa nekega grafa rabnega izkaºe ravno vejitveni algoritem. ƒe je. e. neka povezava v. G,. G,. se za izredno upo-. Osnovna ideja pri tem je slede£a.. potem mnoºica vseh vpetih dreves grafa. iz unije dveh mnoºic vpetih dreves, in sicer tistih, ki vsebujejo povezave. e. e. G. sestoji. in tistih, ki. ne vsebujejo.. Predstavljajmo si, da ºelimo narisati graf druga£no barvo. Naredimo kopijo. G,. G. in nari²imo neko povezavo. vendar brez povezave. e.. e. z. Vpeta drevesa. prvega grafa tvorijo eno mnoºico, vpeta drevesa njegove kopije pa drugo. Iz vsakega od grafov na enak na£in dobimo dva nova grafa in nadaljujemo z istim postopkom. Pri tem zavrºemo vsak graf, ki ga tvori cikel obarvanih povezav.. Z naivno aplikacijo lahko dobimo drevesno strukturo kot jo prikazuje slika 17. V praksi se ve£krat raje uporabi preiskovanje najprej v globino kot pa najprej v ²irino, kjer se gra na nekem nivoju obravnavajo preden so gra na niºjem nivoju sploh ustvarjeni. Ta na£in je klju£en tudi v opisu v nadaljevanju. Ko je graf razdeljen na dva grafa, kakor je opisano zgoraj, shranimo kopijo na sklad in obravnavamo original. Ko pridemo do primera, da za vsako izbiro. e. dobimo obarvan cikel ali da dobimo vpeto drevo, ki smo ga ºe zabeleºili,. sestopimo, tako da vzamemo graf z vrha sklada.. Opisani algoritem je pravzaprav algoritem, ki ga je podal Minty in ne bo dobro deloval brez odkrivanja mostov. kopija grafa, kjer odstranimo. ƒe je izbrana povezava. e. most, potem bo. e, nepovezan graf, v katerem ne moremo poiskati. vpetega drevesa. Na sliki 17 lahko zaradi tega pozabimo na celo desno stran.

(47) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 43. Slika 17: Konstrukcija vpetih dreves.. drevesa razen zgornjega grafa, ki je edini povezan. Zato za povezave, ki je most.. e ne smemo izbrati. Pomembno pa je, da obarvamo vsak most, ki smo ga. pre£kali. Tak na£in nas pripelje do drevesne strukture, kakr²na je na sliki 18, kjer barvamo mostove in odstanjujemo povezave, ki tvorijo cikle.. V. [5] je na tem mestu omenjen algoritem SPAN, za katerega velja, da na. vsakem grafu, iz katerega moramo odstraniti eno povezavo, uporabimo algoritem za iskanje mostov in bri²emo povezave, ki tvorijo obarvane obhode. ƒasovna zahtevnost tega algoritma je. m. ²tevilo povezav grafa,. T. O(n + m + mT ),. pa ²tevilo vpetih dreves.. kjer je. n. ²tevilo to£k,. ’tevilo vpetih dreves. grafa je v splo²nem eksponentna funkcija ²tevila vozli²£ grafa, zato je bolj realna £asovna zahtevnost algoritma kar £as, ki je potreben, da najdemo vsako od vpetih dreves.. Za algoritem SPAN je to. O(m),. £e je. Postopek je mogo£e izbolj²ati do £asovne zahtevnosti. T. O(n),. primerljiv z. m.. vendar se s tem.

(48) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 44. Slika 18: Konstrukcija vpetih dreves.. bolj zaplete tudi izvedba programa.. 5.2 Kromati£ni polinomi V [5] je pred opisom algoritma za ra£unanje kromati£nega polinoma zapisana ena£ba, ki se pri tem uporablja. Naj bo da izbri²emo povezavo polinome grafov. e. in. G, G − {e}. G\e in. G − {e}. skr£itev grafa. G\e. graf, ki ga dobimo iz. G. za. e.. G. tako,. Potem za kromati£ne. velja. PG (x) = PG−{e} (x) − PG\e (x).. (1). Z zaporedno uporabo te ena£be lahko kromati£ni polinom grafa izrazimo v obliki kromati£nih polinomov praznih grafov, ki so le neke potence. x -a .. V primerjavi z algoritmom generiranja vseh vpetih dreves pri ra£unanju kromati£nega polinoma do rezultata pridemo dosti hitreje. Za£nemo z grafom. G.

(49) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. in oblikujemo dva nova grafa je. G − {e},. G − {e} in G\e.. 45. Enega od teh, bolj priporo£ljivo. obdrºimo za nadaljno obravnavo, drugega pa odloºimo na sklad.. Z delitvijo grafov na manj²e podgrafe nadaljujemo tako dolgo, dokler niso listi tako dobljenega drevesa dovolj enostavni, da znamo hitro dolo£iti njihove kromati£ne polinome. ƒe je tako, zabeleºimo kromati£ni polinom in nadaljujemo algoritem z grafom z vrha sklada.. Ko je sklad prazen, se²tejemo dobljene. polinome z ustreznimi predznaki.. Opozorimo ²e, da skr£itev povezave lahko privede do dvojnih povezav, vendar so te vedno nadome²£ene z enojnimi, ki imajo enak pomen. Sledi, da ima eno vozli²£e in nekaj povezav manj kot kot. n. G,. G\e. torej na skladu nikoli ne bo ve£. grafov. V bistvu ni potrebno razgraditi grafov do praznih grafov, saj je. enostavno preveriti, da je kromati£ni polinom grafa z eno povezavo in grafa z dvema povezavama. xn−2 (x − 1)2 ,. xn−1 (x−1). ne glede na to ali imata povezavi. skupno vozli²£e ali ne.. A. C. B. G. F. E. D. I. H. Slika 19: Ve£ zaporednih delitev grafa.. Za laºje razumevanje poglejmo primer na sliki 19. Graf povezavo. e. smo razdelili na podgrafa. G − {e} (B ). in. A. s krepko ozna£eno. G\e (C ).. Enak postopek.

(50) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. smo ponovili na tako dobljenih grah ter na grah. D in E .. 46. Pri²li smo do grafov,. katerih kromati£ne polinome je enostavno dolo£iti, in sicer je kromati£ni polinom grafa. I. enak. x(x − 1)2 ,. kromati£ni polinom grafa. D. je kromati£ni polinom grafa. H. grafa. x2 (x − 1)2 .. Po ena£bi (1) dobimo. x2 (x − 1)2 − x(x − 1)2 = x(x − 1)3 .. kot. E. pa. enak. x(x − 1)2 ,. Ker. dobimo kromati£ni polinom. x(x − 1)2 (x − 2).. Podobno re²imo desno stran drevesa in do-. bimo kromati£ni polinom grafa. C x(x − 1)2 − x(x − 1) = x(x − 1)(x − 2).. grafa. B. enak. Ko smo izra£unali kromati£ne polinome vseh podgrafov, lahko izra£unamo ²e kromati£ni polinom za£etnega grafa, ki je enak. x(x − 1)(x − 2)2 .. V psevdokodi za opisani algoritem imamo poleg mnoºic vozli²£ in povezav za£etnega grafa ²e mnoºici vozli²£. VS. in povezav. ES. skr£itve grafa, s £imer. ohranimo za£etno mnoºico vozli²£. Z zaporedno delitvijo grafov pridemo do enostavnih grafov z eno povezavo, katerih kromati£ne polinome lahko izra£unamo, jih shranimo v polje. KromP ol in na koncu se²tejemo z ustreznimi pred-. znaki v proceduri Se²tej polinome(). Ker so kromati£ni polinomi enostavnih grafov shranjeni v polju in imajo kromati£ni polinomi grafov, ki so nastali po skr£itvi, sode indekse, velja: £emer. i := i + 2. in. KromP olj := KromP oli − KromP oli+1 ,. j := j + 1.. procedure Kromati£ni polinom(V, E ); begin if |E| > 1 then Razdeli(V, E ); if |E| = 1 then begin KromP oli := x|V |−1 (x − 1); i := i + 1;. if not Prazen(sklad) then begin Odstrani(sklad,. V, E );. Kromati£ni polinom(V,. E );. pri.

(51) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 47. end; else Se²tej polinome(); end; end. procedure Skr£itev(e, V, E, VS , ES ); {Graf G = (V, E) skr£imo za povezavo e in dobimo G\e = (VS , ES ).}. begin VS := V ; ES := E; a := e.krajisce1 ; b := e.krajisce2 ;. for vsak x: (x, b) ∈ ES do begin ES := ES − (x, b); //odstranimo povezave incidentne z b. if (a, x) ∈/ ES then ES := ES + (a, x); //sosede b so sedaj sosede a end; VS := VS − {b}; //odstranimo vozli²£e b. end. procedure Razdeli(V, E ); begin while |E| > 1 do begin e :=Izberi povezavo(E ); //izberemo poljubno povezavo iz mnoºice povezav Skr£itev(e,. V, E, VS , ES );. Vstavi(sklad, VS , ES );. E := E − {e} ;. end; end.. //vozli²£a in povezave skr£itve shranimo na sklad.

(52) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi. 48. w y. x. z Slika 20: Graf. V. E. e. x, y, z, xy, xz, yz. xy. x, z, w xz, xw. {x, z, w} {xz, xw}. xz. x, y, w xy, yw. {x, z, w} {xz, xw}. w. VS. ES. G.. sklad. KromP ol. yw xz, yz, yw. {x, y, w} {xy, yw} yz, yw. yz. x, y, w yw. {x, z, w} {xz, xw} {x, y, w} {xy, yw} {x, y, w} {yw} x3 (x − 1). yw {x, z, w} {xz, xw}. x, y, w yw. x2 (x − 1). {x, y, w} {xy, yw} x, y, w xy, yw. xy. x, w. xw. {x, z, w} {xz, xw} {x, w} {xw} x2 (x − 1). yw x, w. {x, z, w} {xz, xw}. xw. x, z, w xz, xw. xz. x, w. xw. {x, w} {xw} x2 (x − 1). xw x, w. xw. x(x − 1). /. x(x − 1).

(53) 5 Snovanje od zgoraj navzdol in kromati£ni polinomi ƒasovna zahtevnost:. 49. ƒasovno najbolj potraten je algoritem Razdeli, ki se. izvaja dokler v mnoºici povezav ne ostane samo ena povezava, in se zaradi tega izvede. m − 1-krat,. zato je £asovna zahtevnost. O(m2 )..

(54) 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. 50. 6 Kromati£no ²tevilo, klike in neodvisne mnoºice V praksi ni vedno potrebno poiskati kromati£nega polinoma grafa, zadostuje ºe, £e poi²£emo kromati£no ²tevilo. χ(G). in neko barvanje grafa z minimalnim. ²tevilom barv. Za dolo£itev kromati£nega ²tevila grafa obstaja podoben algoritem razvejanosti kot za kromati£ni polinom. Tokrat uporabimo ena£bo (1) v obliki. PG−{e} (x) = PG (x) + PG\e (x),. (2). tako da razvejamo algoritem z dodajanjem in kr£enjem povezav. Poleg tega beleºimo uporabljena vozli²£a na vsakem koraku.. Recimo, da smo dobili polni graf ima. G = (G − {e}) + {e}. G\e. sta dve vozli²£i grafa. Kp. na. p. enako mnoºico vozli²£ kot. G − {e}. Kp. s. p. G. V vejitveni proceduri. G − {e},. toda v grafu. zdruºeni v eno. ƒe v dobljenem dvoji²kem. drevesu sledimo nastajanju polnega grafa zdruºitev vozli²£ grafa. vozli²£ih.. v vozli²£a grafa. Kp. iz originalnega grafa, vidimo. Kp .. Potem pobarvamo polni graf. razli£nimi barvami in se vrnemo po isti poti. S tem dobimo barvanje. originalnega grafa, v katerem vsako vozli²£e dobi barvo vozli²£a, s katerim je bilo zdruºeno v polnem grafu.. Postopek je gra£no prikazan na sliki 21.. Z algoritmom razvejanosti pridemo do polnega grafa. K4 ,. ki ga pobarvamo s. ²tirimi razli£nimi barvami ozna£enimi z M, B, Z in R. S sestopanjem po poti, po kateri smo pri²li do tega grafa, dobimo barvanje za£etnega grafa.. ƒe ºelimo le pobarvati graf z nekim ²tevilom barv, zadostuje uporaba algoritma razvejanosti do nivoja, ko najdemo polni graf. ƒe pa nas zanima kromati£no ²tevilo grafa. G,. moramo algoritem razvejanosti izvesti £isto do konca. Prej ga. lahko prekinemo le, £e poznamo niºjo mejo za kromati£no ²tevilo.. Med klikami in maksimalnimi neodvisnimi mnoºicami obstaja tesna povezava, in sicer je maksimalna neodvisna mnoºica grafa komplementa grafa. G in obratno.. G. ravno mnoºica vozli²£ klike. Torej so problemi, ki se navezujejo na klike,.

(55) 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. M. M. R B. B R. R B. B. Z. 51. in. Z. R. M . . . B. B Z. R. M . . . B Z. R. Slika 21: Barvanje vozli²£ grafa.. enaki problemom povezanim z maksimalnimi neodvisnimi mnoºicami.. Razmislimo o problemu iskanja vseh klik grafa. G,. ƒe je. p. neko vozli²£e grafa. potem lahko klike tega grafa razdelimo na tiste, ki vsebujejo vozli²£e. tiste, ki ga ne. Naj bo. p.. G.. Klike grafa. G,. N. inducirani podgraf grafa. ki vsebujejo. in jih pove£amo za vozli²£e grafa. G − {p},. p.. p,. poi²£emo tako, da poi²£emo klike grafa. N.. in. G na mnoºici sosed vozli²£a. Klike, ki ne vsebujejo vozli²£a. ki niso klike grafa. p. Mnoºica klik grafa. G. p,. N. pa so klike. je torej unija dveh. mnoºic:. (i) mnoºica klik v. N,. vsaka pove£ana za. (ii) mnoºica tistih klik grafa. G − {p},. p;. ki niso klike v. N.. Sedaj imamo tipi£no razdelitev mnoºic za vejitveni algoritem, saj smo problem.

(56) 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. 52. razdelili na dva manj²a. Imamo pa tudi manj²i zaplet, saj v to£ki (ii) potrebujemo informacije, ki jih pridobimo po drugi veji algoritma.. Metoda sicer. deluje, vendar je potrebno shranjevati potrebne podatke.. Drugi na£in je, da se postopka lotimo od dna proti vrhu, in sicer od manj²ih grafov k ve£jim. Naj bo. Hi. podgraf sestavljen iz vozli²£. da smo na²li vse njegove klike. Sedaj dodamo vozli²£e. N. za to to£ko in poi²£emo presek z mnoºico klik. raz²irjeni za vozli²£e v. N. i+1. ²e klike. Hi+1 .. so ravno preostale klike podgrafa. 1, 2, 3, . . . , i, in recimo,. i + 1.. Hi .. Hi+1 .. To so klike v. Hi ,. Klike podgrafa. Poi²£emo mnoºico. N. in. ki niso vsebovane. Na ta na£in smo dobili klike. danega grafa.. Znano je, da je ²tevilo klike nekega grafa eksponentno glede na. n.. Gre torej. za podoben problem kot pri iskanju vseh vpetih dreves, vendar imamo tokrat opravka z enim od znanih NP-problemov, za katere ne poznamo algoritma, ki bi jih re²il v polinomskem £asu.. Problem iskanja klik je re²ljiv v eksponentnem £asu s pregledovanjem in preiskovanjem vseh klik. Re²ljiv je tudi s pregledovanjem vseh. 2n. podmnoºic vozli²£. in testiranjem ali gre za kliko. Pri £emer je to nova procedura, ki da rezultat v £asu. O(2n ).. Samo en algoritem pa da rezultat v nekoliko bolj²em. 1. O(2 3 n ) £asu,. ki sta ga napisala Tarjan in Trojanowski. Njun algoritem sicer i²£e maksimalno neodvisno mnoºico grafa, vendar je to, kot smo videli, identi£en problem.. V [5] je podrobneje opisana ²e ena metoda za dolo£anje kromati£nega ²tevila poljubnega grafa. G.. neodvisno mnoºico v. V poljubnem barvanju grafa vozli²£a neke barve tvorijo. G. in so zato podmnoºica neke maksimalne neodvisne. mnoºice.. Recimo, da smo uporabili prej omenjeni algoritem, s katerim smo dolo£ili mnoºico. Mj. vseh neodvisnih mnoºic grafa. G.. tako da je njihova unija mnoºica vozli²£ grafa vanje grafa. G. s. k. Obstaja. G.. k = χ(G). teh mnoºic,. Potem lahko opravimo bar-. barvami in za vsako barvo dolo£imo mnoºico. Mj ,. tako da.

(57) 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. 53. vsebuje vsa vozli²£a neke barve. Obratno, £e imamo dano poljubno mnoºico maksimalnih neodvisnih mnoºic, ki obsegajo vozli²£a grafa barvanje grafa s. k. G,. k. lahko izvedemo. barvami, pri £emer vozli²£em vsake maksimalne neodvisne. mnoºice dodelimo isto barvo.. Algoritem za dolo£anje. χ(G). ugotovitvah zapisanih v. [5].. je leta 1971 podal Christodes in temelji na. Izrek 6.1 Naj bo G graf, ki ga lahko pobarvamo s k barvami. Potem obstaja barvanje za katerega: (i) vozli²£a z barvo 1 tvorijo makismalno neodvisno mnoºico M1 v G; (ii) za ∀ i > 1 vozli²£a z barvo i tvorijo maksimalno neodvisno mnoºico v G − M1 − M2 − . . . − Mi−1 .. Bistveni rezultat tega je, da lahko delamo z maksimalnimi neodvisnimi mnoºicami in ne s precej ²tevil£nej²imi neodvisnimi mnoºicami. Postopek poteka v naslednjem zaporedju:. 1. Poi²£emo vse maksimalne neodvisne mnoºice grafa. G.. 2. Za vsako makismalno neodvisno mnoºico oblikujemo nov graf, tako da iz. G. zbri²emo vozli²£a, ki jih ta mnoºica vsebuje.. 3. V vsakem tako dobljenem grafu spet poi²£emo vse maksimalne neodvisne mnoºice in nadaljujemo s to£ko (2).. Z zaporednim izvajanjem teh korakov dobimo drevesno strukturo, katere listi ustrezajo praznim grafom, ki so zagotovo maksimalne neodvisne mnoºice. S sestopanjem od takega lista nazaj proti korenu opravimo barvanje grafa. Pri tem bo ²tevilo. χ(G). ustrezalo najmanj²i razdalji med listom in korenom..

(58) 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. 54. 1. 4. 5. 6. 3. 2. Slika 22: Graf. G.. Za primer poglejmo graf na sliki 22. Maksimalne neodvisne mnoºice so. {1, 5} , {2, 4} , {2, 5} , {3, 6} , {4, 6}. 23. Do listov nas pripelje trojica. {1, 3} ,. Del drevesne strukture je prikazan na sliki. {2, 5} , {4, 6} , {1, 3},. zato je. χ(G) = 3,. kar. nam da barvanje vozli²£ grafa s tremi barvami.. 1. 4 5 6 13. 3. 15. 36. 25. 24 4. 46. 2. 5. 5 2 3. 3. 4. 1. 6. 6. 2. 1. 1. 4 1. 4 5. 6. 6. 5 2. 3. 3. 2. 25. 46. 24 4. 5. 6 5. 6. 2. Slika 23: Drevesna struktura za graf. V. G.. [5] je podan tudi opis dokaza tega algoritma. Na vsakem koraku izberemo. maksimalno neodvisno mnoºico in njenim vozli²£em dolo£imo barvo.. Brez.

(59) 6 Kromati£no ²tevilo, klike in neodvisne mnoºice. 4. 3. 1. 5. 6. 2 46. 36 4. 55. 1. 1 5. 5 2. 2. 3. 15. 13. 4 5 2. 2. Slika 24: Drevesna struktura za graf. G. z ozna£enim vozli²£em. p.. izgube za splo²nost je ta lahko poljubna. Sedaj lahko na vsakem koraku, kjer zgoraj opisani algoritem zahteva konstrukcijo vseh maksimalnih neodvisnih mnoºic, izberemo vozli²£e ki vsebujejo. p.. Izbira vozli²£a vozli²£e. p in dolo£imo samo maksimalne neodvisne mnoºice,. V splo²nem s tem dobimo manj²e ²tevilo neodvisnih mnoºic.. p je poljubna, vendar je dobro, £e ºelimo imeti malo drevo, da je. p tako, da je vsebovano v £im manj maksimalnih neodvisnih mnoºicah.. ƒe ocenimo na oko, je za. p najbolje izbrati vozli²£e z najve£jo stopnjo.. postopku grafu na sliki 22 pripada drevo na sliki 24, kjer smo za. p. Po tem izbrali. obkroºeno vozli²£e.. Algoritem je sicer opisan tako, da je izvedeno najprej preiskovanje v ²irino drevesa, vendar je velikokrat bolj priporo£ljivo uporabiti preiskovanje najprej v globino drevesa..

Referensi

Dokumen terkait

Dalam penelitian Sullivan dan McCarthy (2009) menyatakan bahwa pasien hemodialisis yang tidak aktif, 14% akan mengalami kelelahan dan pasien yang mengalami fatigue

02 Membuat program basis data 2.1 Struktur data di bangun pada bahasa pemrograman sesuai dengan disain yang telah di buat. Struktur data di implementasikan dalam

Dengan ini menyatakan kesediaan kami untuk memasang Patok Batas lokasi Izin Pertambangan Rakyat (IPR) sesuai dengan Peraturan dan Ketentuan yang berlaku. Demikian Surat

Fungsi rumput dalam perkebunan karet dan kelapa sawit adalah produksi bahan kering dan energi untuk pakan ternak, tetapi nutrisi untuk memenuhi kebutuhan ternak dalam lahan

Peserta yang mengikuti Ujian Ulang (Ujian Tulis Lokal ) dan wajib hadir tepat waktu &amp; membawa Format A1 dan wajib hadir tepat waktua. Peserta Ujian Ulang mengikuti Sesi

Akan tetapi, bentuk verba present continuous juga dapat mengacu pada waktu yang akan datang, sebagaimana yang terdapat dalam kalimat pertanyaan berikut ini: ‘ What are you

Kemudian bermunculan superhero yang dimodifikasi menjadi manusia super yang memiliki kekuatan super dan memiliki kualitas intelektualnya cukup baik, seperti