1 Graafid 1 Sissejuhatus 2 Sissejuhatus
1 Sissejuhatus 3
Orienteeritud graaf matemaatikas
Orienteeritud graaf (ingl directed graph v digraph) on süsteem(V, E, (σ, τ )), kus
– V on nn tippude (ingl vertex) hulk;
– E on nn kaarte (ingl arc) hulk;
– σ, τ : E → V seavad igale kaarele vastavusse tema algustipu(ingl source) ja lõpptipu (ingl target).
1 Sissejuhatus 4
Orienteerimata graaf matemaatikas
Orienteerimata graaf on analoogne süsteem, kus
– hulga E elemendid ei määra algus- ja lõpptippu, vaid otstipud(neid võib olla 1 või 2)
– ja hulga E elemente nimetatakse servadeks (ingl edge).
1 Sissejuhatus 5
Graaf andmestruktuurina
Graafi andmestruktuurina võib vaadelda kui puu üldistust, kus tipudsaavad olla seotud suvaliselt.
– Orienteerimata graafi puhul lisandub tingimus, et seos alati vas-tastikune.
– Võrreldes senivaadeldud andmestruktuuridega on graaf erilineselle poolest, et peale tippude võivad ka kaared-servad kandaomaette infot.
∗ Tippudevahelised seosed (viidad) senivaadeldud andmest-ruktuurides kas tulenevad andmestruktuuri invariandist võikujunevad lihtsalt juhuslikult välja.
1 Sissejuhatus 6
Tee
Tee (ingl walk) graafis on järjend (v0, e1, v1, . . . , el, vl), kus v0, . . . , vl
on tipud ning e1, . . . , el kaared/servad, nii et iga i = 1, . . . , l korral ei
on kaar, mis läheb tipust vi−1 tippu vi.
– Tippu v0 nimetatakse selle tee algustipuks (ingl initial ver-tex) ja tippu vl lõpptipuks (ingl terminal vertex).
– Tee pikkuseks (ingl length) nimetatakse arvu l, st kaar-te/servade arvu (loetuna koos kordustega).
1 Sissejuhatus 7
Ahel, lihtahel, kinnisus, tsükkel, lihttsükkel
Ahel (ingl path) on tee, milles kaared/servad ei kordu.
Lihtahel on ahel, milles ka tipud ei kordu, v.a algus- ja lõpptipp, mistohivad omavahel kokku langeda.
Kinnine (ingl closed) on tee, mille algus- ja lõpptipp langevad kokku.
Tsükkel (ingl cycle) graafis on mittetühi kinnine ahel.
Lihttsükkel on tsükkel, milles tipud, v.a algus- ja lõpptipp omavahel,on erinevad.
1 Sissejuhatus 8
Järglane, eellane, saavutatavus
Orienteeritud graafis tipp v on tipu u järglane (u on v eellane), kuileidub mittetühi tee algustipuga u lõpptipuga v.
Samas tipp v on tipu u vahetu järglane (u on v vahetu eellane),kui leidub kaar algustipuga u lõpptipuga v.
Tipp v on saavutatav (ingl reachable) u-st, kui leidub tee algusti-puga u lõpptipuga v.
– Järglase, eellase mõisted on analoogsed vastavate mõistetegapuul.
1 Sissejuhatus 9
Sisendaste, väljundaste, aste
Orienteeritud graafis
– tipu väljundaste (ingl out-degree) on kaarte arv, mille algus-tipp ta on;
– tipu sisendaste (ingl in-degree) on kaarte arv, mille lõpptippta on.
Orienteerimata graafis
– tipu aste (ingl degree) on servade arv, mille otstipuks ta on,kusjuures servi, millel on ainult üks otstipp (nn silmused), loe-takse kahekordselt.
1 Sissejuhatus 10
Loomulik esitus
Esitame graafi seotud paigutusega, kus tippudes on kirjed ja kaari/servitähistavad vastavate tippude vahel hoitavad viidad.
– Iga tipu vahetuid järglasi võib hoida järjendis.
– Mingid tipud (kui tippe üldse on) peavad olema eraldi andmest-ruktuurist kättesaadavad.
Algoritmid tihti eeldavad, et kõik tipud on eraldi kättesaadavad.
∗ Kõik tipud võivad paikneda omaette järjendis. See vastabtäiendatud graafikontseptsioonile, kus on üks infot mittekandev “juurtipp”, millest läheb kaar igasse teise tippu,kuid kuhu sisse ei tule ühtki kaart.
1 Sissejuhatus 11
Naabrusmaatriks matemaatikas
Graafi naabrusmaatriks (ingl adjacency matrix) on ruutmaatriks,mille
– read ja veerud vastavad graafi tippudele;
– antud rea ja veeru ristumiskoha elemendiks on kaarte arv realevastavast tipust veerule vastavasse tippu (orienteerimata graafisservade arv nende tippude vahel).
1 Sissejuhatus 12
Esitus tabelina
Kui graafi tippude arv ei muutu, siis võib graafi arvuti mälus esitadanaabrusmaatriksi põhimõttel tabelina.
– Nt tipud on kättesaadavad järjekorranumbri järgi ühest massii-vist ja kaarte/servade info järjekorranumbrite paaride järgi tei-sest, kahemõõtmelisest massiivist.
– See esitus tasub ära, kui kaari/servi on suhteliselt palju; muiduon tabel suures osas tühi ja võtab liiga palju ruumi.
2 Läbimine 13
Läbimine
2 Läbimine 14
Üldine läbimisülesanne
Läbida antud graafi kõik teatud tippudest saavutatavad tipud ja teosta-da nende kõigiga antud protseduur.
– Sisend: graaf, tema mingid tipud või nende struktuur, protse-duur.
2 Läbimine 15
Lahendused
Lahendusi on väga palju erinevaid:
– laiuti;
– sügavuti (siin omakorda ees- ja lõppjärjestus);
– topoloogiline järjestus;
– . . .
2 Läbimine 16
Ühine tuumalgoritm: lisaatribuutika
Lisaks põhisisendile on antud:
– iga tipu kohta infoväli töödelduse ülesmärkimiseks;
– kaare/serva töötlusprotseduur (rakendatakse kaartele/servadele,mida pidi liigutakse järgmisse tippu);
– abistruktuur (järjend) Q graafi tippude ja kaarte/servade salves-tamiseks.
2 Läbimine 17
Ühine tuumalgoritm: algseis
Kõik tipud on “töötlemata”.
Abistruktuur Q sisaldab sisendis märgitud tipud.
– Näiteks kõik tipud.
– Kui kasutatakse juurtippu, kust läheb kaar igasse tippu, siis võibQ-s tippe mitte hoida ja alguses on seal juurtipust (sisendtippu-desse) väljuvad kaared.
See lähenemine teeb algoritmid lihtsamini kirjeldatavaks.
2 Läbimine 18
Ühine tuumalgoritm: töö põhikäik (tehakse tsüklis)
Kui Q on tühi, siis lõpetada tsükkel (ja kogu algoritm).
Muidu tõmmata Q-st välja järgmine kaar/serv e; olgu tema lõpp-tipp/otstipp v.
Kui v on “töötlemata”, siis
– töödelda kaar/serv e ning rakendada sisendprotseduur tipule v;
– märkida, et v on “töödeldud”;
– lisada Q-sse kõik tipust v väljuvad kaared/servad (piisab neist,mille lõpptipp/teine otstipp on “töötlemata”).
2 Läbimine 19
Lisakavalus
Kordsete kaarte/servade puhul on tüüpiliselt vajalik ainult üks neist.Ülejäänusid pole mõtet Q-sse kunagi lisadagi. Nii saab läbimisalgorit-mi tööd kiirendada.
Edasistes keerukushinnangutes seda kavalust ei arvestata; keerukus-hinnangute ümbertegemiseks tuleb neis kaarte/servade arvu asemelevõtta nende tipupaaride arv, mille vahel on kaar/serv, ja lisada liideta-vana kaarte/servade koguarv.
– Mh log m asemel võib O-hinnangus lugeda log n (kus n ja mon tippude ja kaarte/servade arv).
2 Läbimine 20
Keerukus
• Iga tipp satub sisendprotseduuri argumendiks ülimalt üks kord.
• Iga kaar/serv satub nimekirja Q ülimalt üks kord.
• Täpne keerukus sõltub struktuuri Q olemusest, mis määrab sinnalisamise ja sealt väljatõmbamise keerukuse.
– Näiteks kui Q on järjestamata lihtahel ja sisendprotseduur on kee-rukusega O(1), siis kogu algoritmi keerukus on O(n + m), kus nja m tähistavad graafi tippude ja kaarte/servade arvu.
2 Läbimine 21
Laiuti ja sügavuti läbimine
Laiuti (ingl breadth-first) läbimisega on tegu, kui Q on järjekord (stFIFO-järjend).
– Laiuti läbimine on ülalkirjeldatud viisil sisuliselt mõttekas ainultjuhul, kui Q sisaldab alguses vaid mõned üksikud tipud (nt igastsidususkomponendist üks esindaja).
Sügavuti (ingl depth-first) läbimisega on tegu, kui Q on magasin (stLIFO-järjend).
2 Läbimine 22
Sügavuti läbimine rekursiivselt: lisaatribuutika, algseis
Ütleme, et sisendiks on kaarte/servade järjend.
– Nt “juurtipust” vajalikesse tippudesse minevad kaared.
Lisaks põhisisendile on ette antud
– iga tipu kohta infoväli külastatuse märkimiseks; algselt kõigiskirjas “külastamata”;
– kaare/serva töötlusprotseduur.
2 Läbimine 23
Sügavuti läbimine rekursiivselt
Läbida sisendiks saadud kaarte/servade järjend, tehes iga kaarega/ser-vaga e järgmist.
Olgu v tema lõpptipp/otstipp. Kui v on “külastamata”, siis
– töödelda kaar/serv e ning rakendada sisendprotseduur tipule v;
– märkida v kui “külastatud”;
– rakendada sama algoritmi, võttes sisendkaarteks tipust v välju-vad kaared/servad (piisab neist, mille lõpptipp/teine otstipp on“külastamata”).
2 Läbimine 24
Eesjärjestus vs lõppjärjestus
Esitatud sügavutiläbimise algoritmid töötlevad graafi tippe eesjärjes-tuses, sest protseduuri rakendatakse tipule enne nende järglasi.
Rekursiivselt on võimalik ka töötlus lõppjärjestuses.
– Selleks tuleb töötlus viia tsükli keha algusest üle lõppu.
3 Minimaalse toese leidmine 25
Minimaalse toese leidmine
3 Minimaalse toese leidmine 26
Kontekst
On antud orienteerimata graaf G, mille servadele on omistatud posi-tiivsed reaalarvulised kaalud.
Kaal kandub üle alamgraafidele.
– G alamgraafi kaal on temasse kuuluvate servade kaalude summa.
3 Minimaalse toese leidmine 27
Toes, alusmets
Graafi G toes ehk alusmets (ingl spanning forest) on mets (graafi-teoreetilises mõttes), mille
– tippude hulk võrdub G tippude hulgaga,
– servad on G mingid servad, kusjuures suvalise G serva lisamiselpoleks enam tegu metsaga (tekiks tsükkel).
3 Minimaalse toese leidmine 28
Minimaalne toes
Minimaalne toes on toes, mille kaal on graafi kõigi toeste seas mi-nimaalne.
Erijuhul, kui kõik servad on võrdse kaaluga, on kõik toesed võrdsekaaluga, sest (graafiteooriast tuntud fakti põhjal) kõigis toestes on ühe-palju servi.
– St sel juhul on kõik toesed võrdselt minimaalsed.
3 Minimaalse toese leidmine 29
Aluspuu
Kui graaf on sidus, siis alusmets koosneb ühest puust, mida nimetatak-se aluspuuks (ingl spanning tree).
3 Minimaalse toese leidmine 30
Ülesanne
Leida antud graafi mingi minimaalne toes.
– Sisend: orienteerimata graaf kaalutud servadega.
– Väljund: graafi alusmets (siin mets tähendab tsükliteta graafi).
3 Minimaalse toese leidmine 31
Erijuht
Kui kaale pole (või on kõik servad võrdse kaaluga), on minimaalsetoese leidmine samaväärne lihtsalt mingi toese leidmisega.
3 Minimaalse toese leidmine 32
Lahendus kaaludeta juhul
Rakendame graafi sügavutiläbimist, kus
– magasinis Q (või argumentjärjendis) on algselt kõik graafi tipud;
– servatöötlusprotseduur lisab serva toesesse (koos tipuga, misseal veel pole); tiputöötlusprotseduur midagi lisaks ei tee.
Keerukus on O(n + m), kus n ja m on graafi tippude ja servade arvud.
3 Minimaalse toese leidmine 33
Primi algoritm
Rakendame graafi läbimist, kus
– Q on eelistusjärjekord kaalu järgi;
– Q-s on algselt kõik graafi tipud, nende kaaluks loetakse ∞;
– servatöötlusprotseduur lisab serva toesesse (koos tipuga, misseal veel pole); tiputöötlusprotseduur midagi lisaks ei tee.
3 Minimaalse toese leidmine 34
Märkus
Primi algoritm on nn ahne (ingl greedy); see tähendab, et algoritmvalib igal sammul hetkel parimana näiva jätku.
– Selline algoritm on tavaliselt lihtne, kuid raskesti põhjendatav.
3 Minimaalse toese leidmine 35
Realisatsioon ja keerukus
Eelistusjärjekorra võib realiseerida kuhjana.
Siis on esitatud variandi keerukus O(n + m log m).
3 Minimaalse toese leidmine 36
Kruskali algoritm: eeltöö
Alguses pannakse tulemusmetsa kõik G tipud.
Koostatakse klassijaotuse struktuur, millesse lisatakse kõik G tipud ük-siku klassina.
Koostatakse ahel, milles on parajasti G kõik servad järjestatuna kaalu-de järgi.
3 Minimaalse toese leidmine 37
Kruskali algoritm: tsükkel
Kuni ahelas on veel servi, korratakse järgmist:
– tõmmatakse ahelast esimene serv välja;
– kui tipud, mida ta ühendab, asuvad erinevates klassides, siis
∗ lisatakse serv metsa;
∗ ühendatakse otstippude klassid.
Ka see algoritm on ahne.
3 Minimaalse toese leidmine 38
Realisatsioon ja keerukus
Klassijaotust võib realiseerida binomiaalmetsadega või Galler-Fische-ri meetodil.
Siis on Kruskali algoritmi keerukus O(n + m log m), kus n ja m ongraafi tippude ja servade arv.
4 Kauguste analüüs 39
Kauguste analüüs
4 Kauguste analüüs 40
Kontekst
On antud orienteeritud graaf G, mille kaartele on omistatud positiivsedreaalarvulised hinnad (kaalud).
Hind kandub üle teedele:
– G suvalise tee hind on temasse kuuluvate kaarte hindade summa.
Interpretatsioon: hind on kaare/tee läbimise maksumus. Huvitavadodavaimad teed.
4 Kauguste analüüs 41
Kaugused
Tipu v kaugus tipust u on
– odavaima u-st v-sse viiva tee hind, kui v on u-st saavutatav;
– ∞ vastasel korral.
4 Kauguste analüüs
4.1 Kauguste puu leidmine
42
Kauguste puu leidmine
4 Kauguste analüüs
4.1 Kauguste puu leidmine
43
Kauguste puu
Kauguste puu (ingl shortest path tree) tipust v on graaf, kus
– tipud on antud graafi need tipud, mis antud graafis on v-st saa-vutatavad;
– kaarte hulk on antud graafi kaarte hulga alamhulk;
– igasse tippu viib v-st täpselt üks tee ja see on antud graafis oda-vaim tee v-st sinna tippu.
4 Kauguste analüüs
4.1 Kauguste puu leidmine
44
Ülesanne
Leida antud graafi tippude kaugused ühest antud tipust ja koostadakauguste puu.
– Sisend: orienteeritud graaf kaalutud kaartega, graafi tipp.
– Tulemus: arvutatud kõigi tippude kaugused sisendtipust ja leitudkaarte alamhulk, mis koos sisendtipust saavutatavate tippudegamoodustab kauguste puu.
4 Kauguste analüüs
4.1 Kauguste puu leidmine
45
Dijkstra algoritm
Sisendtipu kauguseks panna 0, ülejäänute kauguseks algul ∞.
Edasi rakendada graafi läbimist, kus
– alustatakse sisendis antud tipust;
– abistruktuur Q on eelistusjärjekord, kus kaarte võtmeks on kaa-re hinna ja tema algustipu kauguse summa (sisendtipp on ainustipp, mis Q-sse satub, tema võti on 0);
– kaaretöötlusprotseduur kirjutab kaare lõpptipu kauguseks algus-tipu kauguse ja kaare hinna summa (st kaare võtme) ja lisab kaa-re väljaantavasse hulka; tiputöötlusprotseduur midagi ei lisa.
Ka sel algoritmil on ahnuse tunnused.
4 Kauguste analüüs
4.1 Kauguste puu leidmine
46
Realisatsioon ja keerukus
Kui eelistusjärjekord realiseerida kuhjana, on esitatud variandi keeru-kus O(n + m log m), kus n ja m on vastavalt graafi tippude ja kaartearv.
4 Kauguste analüüs
4.2 Kauguste maatriksi leidmine
47
Kauguste maatriksi leidmine
4 Kauguste analüüs
4.2 Kauguste maatriksi leidmine
48
Kõigi tippude vaheliste kauguste leidmiste ülesanne
Leida antud graafi iga tipupaari jaoks kummagi kaugus teisest.
– Sisend: orienteeritud graaf kaalutud kaartega, graafi tipp.
– Väljund: samade tippudega graaf, mis näitab tippudevahelisikaugusi sisendgraafis.
Erinevused eelmise ülesandega:
– leiab kõigi tipupaaride vahelised kaugused;
– ei leia kauguste puid.
4 Kauguste analüüs
4.2 Kauguste maatriksi leidmine
49
Floyd-Warshalli algoritm: algseis
Alguses määratakse iga tipupaari (i, j) jaoks j kauguseks i-st:
– 0, kui i = j;
– tipust i tippu j mineva minimaalse hinnaga kaare hind, kui selli-ne kaar leidub;
– ∞ ülejäänud juhtudel (st kui tipust i ei lähe kaari tippu j).
4 Kauguste analüüs
4.2 Kauguste maatriksi leidmine
50
Floyd-Warshalli algoritm: põhitöö
Läbitakse graafi tipud, iga tipuga t tehakse järgmist:
– vaadatakse läbi kõik tipupaarid; iga paari (i, j) korral:
∗ määratakse j kauguseks i-st t kauguse i-st ja j kauguse t-stsumma, kui see on väiksem senileitud j kaugusest i-st.
4 Kauguste analüüs
4.2 Kauguste maatriksi leidmine
51
Realisatsioon ja keerukus
Floyd-Warshalli algoritmi on mugavaim realiseerida, kui graaf on esi-tatud naabrusmaatriksina.
Keerukus on siis Θ(m + n3), kus n on tippude arv.
5 Topoloogiline järjestamine 52
Topoloogiline järjestamine
5 Topoloogiline järjestamine 53
Kontekst
On antud orienteeritud tsükliteta graaf G.
Vaatame ka rakendusi, kus tippudele on omistatud hinnad (kaalud).
5 Topoloogiline järjestamine 54
Topoloogiline järjestus
Orienteeritud graafi G tippude topoloogiliseks järjestuseks (ingltopological ordering) nimetatakse järjendit, kus
– komponentideks on parajasti G kõik tipud, igaüks üks kord,
– G iga kaare e korral e algustipp paikneb lõpptipust eespool.
5 Topoloogiline järjestamine 55
Tingimus kandub üle teedele
Kui tipp v on tipu u järglane, siis igas topoloogilises järjestuses esinebv pärast u-d.
5 Topoloogiline järjestamine 56
Vaid tsükliteta graafid kvalifitseeruvad
Graafi tippudel leidub topoloogiline järjestus parajasti siis, kui graafon tsükliteta.
5 Topoloogiline järjestamine 57
Fakte tsükliteta graafide kohta
• Tsükliteta graafis on iga tipp saavutatav mõnest tipust, mille sisend-aste on 0.
• Järelikult mittetühjas tsükliteta graafis leidub tipp, mille sisendasteon 0.
5 Topoloogiline järjestamine 58
Topoloogilise järjestamise ülesanne
Järjestada antud tsükliteta graafi tipud topoloogiliselt.
– Sisend: tsükliteta orienteeritud graaf.
– Väljund: graafi tippude topoloogiline järjestus.
5 Topoloogiline järjestamine 59
Kahni algoritm: lisaatribuutika, algseis
• Iga tipu jaoks luuakse lisaväli, mille algväärtus on võrdne tipu si-sendastmega.
• Struktuur Q; algul sisaldab parajasti need tipud, mille lisavälja väär-tus on 0.
5 Topoloogiline järjestamine 60
Kahni algoritm: töö käik
Kui Q on tühi, siis lõpetatakse.
Vastasel korral:
– võetakse Q-st suvaline tipp v;
– lisatakse v tulemusjärjendi lõppu;
– vähendatakse iga v-st väljuva kaare lõpptipu lisavälja väärtust 1võrra; need, millel see saab 0-ks, lisatakse Q-sse.
5 Topoloogiline järjestamine 61
Keerukus
Kahni algoritm on keerukusega Θ(n + m), kus n ja m on vastavalttippude ja kaarte arv.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
62
Eeldusgraafi analüüs
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
63
Eeldusgraaf
Eeldusgraaf (ingl prerequisite graph) on orienteeritud tsüklitetagraaf G, mille tippudele on omistatud positiivsed hinnad (kaalud).
Võimalik tähendus:
– graaf väljendab projekti;
– tipud on tööd;
– tipu hind tähendab temale kuluvat aega;
– kaar tipust teise näitab, et teise alustamise eelduseks on esimeseläbitus.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
64
Eeldusgraafi analüüsimise ülesanne
Leida antud eeldusgraafi kirjeldatud projekti varaseim võimalik lõpu-aeg ning arvutada ühtlasi iga tipu kohta tema varaseim võimalik lõpu-aeg ja hiliseim võimalik algusaeg, mille korral projekti lõpuaeg ei viibi(kõik ajad on kogu projekti algusaja suhtes).
– Sisend: eeldusgraaf.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
65
Domineerivus
Igas tipus kehtib:
– varaseim lõpuaeg pole hilisem kui hiliseima algusaja ja tipulekuluva aja summa.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
66
Kriitiline töö
Kriitiline töö on tipp, kus varaseim lõpuaeg on võrdne hiliseima al-gusaja ja tipule kuluva aja summaga.
– Kriitilised tööd on need, mis ei kannata venitamist. (Kohe, kuisaab tegema hakata, tuleb tegema hakata.)
– Kriitiliste tööde kindlakstegemiks eeldusgraafi analüüsi järel pii-sab lihtsast läbivaatusest.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
67
Kriitiline tee
Kriitiline tee (ingl critical path) on eeldusgraafi ahel, mille
– tipud on kriitilised tööd,
– algustipu hiliseim algusaeg on kogu projekti algusaeg 0 (st kohealgul tuleb tegema hakata),
– lõpptipu varaseim lõpuaeg on kogu projekti varaseim lõpuaeg (stenne kogu projekti lõppu pole lootust valmis saada),
– iga kaare algustipu varaseim lõpuaeg võrdub selle kaare lõpptipuhiliseima algusajaga (st uut tööd peab kohe eeldustöö lõpetamisejärel tegema hakkama).
Iga kriitiline töö asub mingil kriitilisel teel.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
68
Algoritm: varaseimad lõpuajad
Leitakse eeldusgraafi tippude topoloogiline järjestus.
Läbides tipud topoloogilises järjestuses, iga tipu korral:
– määrata tipu varaseim lõpuaeg kui tema vahetute eellaste (ju-ba leitud) varaseimatest lõpuaegadest hiliseima (kui eellasi pole,võetakse selleks kogu projekti alguseg ehk 0) ja jooksva tipuhinna summa.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
69
Algoritmi jätk: hiliseimad algusajad
Leitakse kogu projekti varaseim lõpuaeg kui maksimum tippude vara-seimatest lõpuaegadest.
Läbides tipud ümberpööratud topoloogilises järjestuses, iga tipu kor-ral:
– määrata tipu hiliseim algusaeg kui tema vahetute järglaste (jubaleitud) hiliseimatest algusaegadest varaseima (kui järglasi pole,võetakse selleks kogu projekti eeldatav ehk varaseim lõpuaeg)ja jooksva tipu hinna vahe.
5 Topoloogiline järjestamine
5.1 Eeldusgraafi analüüs
70
Keerukus
Eeldusgraafi analüüs käib sama keerukusega mis topoloogilise järjes-tuse leidmine ehk Θ(n + m).
6 Sidususkomponentide leidmine 71
Sidususkomponentide leidmine
6 Sidususkomponentide leidmine 72
Sidusus
Binaarne relatsioon, mis märgib tippude omavahelist ühendatust, si-dusust, on ekvivalents.
Sidususkomponent (ingl connected component) on selle ekviva-lentsiseose klass.
6 Sidususkomponentide leidmine 73
Variandid
• Sidusus orienteerimata graafis.
• Nõrk sidusus orienteeritud graafis.
• Tugev sidusus orienteeritud graafis.
6 Sidususkomponentide leidmine
6.1 Sidususkomponentide leidmine orienteerimata graafis
74
Sidususkomponentide leidmineorienteerimata graafis
6 Sidususkomponentide leidmine
6.1 Sidususkomponentide leidmine orienteerimata graafis
75
Sidusus
Orienteerimata graafis on tipud u ja v seotud, kui leidub tee ühest tei-se.
– Siis automaatselt leidub tee ka vastassuunas.
– Seotus on (sümmeetrilise) binaarse relatsiooni “tippude vahel onserv” refleksiivne transitiivne sulund.
6 Sidususkomponentide leidmine
6.1 Sidususkomponentide leidmine orienteerimata graafis
76
Ülesanne
Leida antud orienteerimata graafi sidususkomponendid.
– Sisend: orienteerimata graaf.
– Tulemus: tekib tippude klassijaotus vastavuses sidususkompo-nentidega.
6 Sidususkomponentide leidmine
6.1 Sidususkomponentide leidmine orienteerimata graafis
77
Otsene lahendus
Läbida graaf sügavuti, võttes servatöötlusprotseduuriks serva otstippu-de klasside ühendamise klassijaotuses.
– Lugedes, et klassijaotuse manipulatsioonid on topeltoptimeeri-tud Galler-Fischeri meetodi korral praktiliselt konstantse kesk-mise keerukusega, on selle lahenduse keerukus O(n + m), kus non tippude ja m servade arv.
6 Sidususkomponentide leidmine
6.1 Sidususkomponentide leidmine orienteerimata graafis
78
Lahendus: Kruskali algoritmi teisend
Kruskali algoritmis abistruktuuris välja kujunev tippude klassijaotuson parajasti jaotus sidususkomponentideks.
– Seega võib lahenduseks lihtsalt realiseerida Kruskali algoritmilma servade järjestamise (kaale ju pole) ja toese ehitamiseta.
Lugedes, et klassijaotuse iga manipulatsioon on praktiliseltkonstantse keerukusega, on selle lahenduse keerukus O(n + m),kus n on tippude ja m servade arv.
6 Sidususkomponentide leidmine
6.2 Nõrga sidususe komponentide leidmine
79
Nõrga sidususe komponentide leidmine
6 Sidususkomponentide leidmine
6.2 Nõrga sidususe komponentide leidmine
80
Nõrk sidusus
Orienteeritud graafis on tipud u ja v nõrgalt seotud, kui alusgraafis(st kaarte suuna unustamisel, nende asendamisel servadega) leidub teeühest teise.
– Nõrk sidusus on binaarse relatsiooni “tippude vahel on kaaremmas-kummas suunas” (ehk relatsiooni “leidub kaar esimesesttipust teise” ja tema pöördrelatsiooni ühendi) refleksiivne transi-tiivne sulund.
6 Sidususkomponentide leidmine
6.2 Nõrga sidususe komponentide leidmine
81
Ülesanne
Leida antud orienteeritud graafi nõrga sidususe komponendid.
– Sisend: orienteeritud graaf.
– Tulemus: tekib tippude klassijaotus vastavuses nõrga sidususekomponentidega.
6 Sidususkomponentide leidmine
6.2 Nõrga sidususe komponentide leidmine
82
Otsene lahendus
Läbida graaf sügavuti, võttes kaaretöötlusprotseduuriks kaare otstip-pude klasside ühendamise klassijaotuses.
– Kaar tuleb töödelda ka siis, kui tema lõpptipp on juba külastatud!
– Lugedes, et klassijaotuse manipulatsioonid on topeltoptimeeri-tud Galler-Fischeri meetodi korral praktiliselt konstantse kesk-mise keerukusega, on selle lahenduse keerukus O(n + m), kus non tippude ja m kaarte arv.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
83
Tugeva sidususe komponentide leidmine
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
84
Tugev sidusus
Orienteeritud graafis on tipud u ja v tugevalt seotud, kui leidub teekummastki tipust teise.
– Tugev sidusus on binaarse relatsiooni “leidub kaar esimesest ti-pust teise” ja tema pöördrelatsiooni refleksiivsete transitiivsetesulundite lõige.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
85
Tugeva sidususe komponentide graaf
Lugedes tugevalt seotud tipud ekvivalentseks, saame orienteeritudgraafi, milles
– tippudeks on algse graafi tugeva sidususe komponendid,
– kaar ühest komponendist teise leidub parajasti siis, kui leiduvadalgse graafi tipud vastavates komponentides, mille vahel on vas-tavas suunas kaar.
Tugeva sidususe komponentide graaf on orienteeritud tsükliteta.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
86
Ülesanne
Leida antud orienteeritud graafi tugeva sidususe komponendid.
– Sisend: orienteeritud graaf.
– Tulemus: tekib tippude klassijaotus vastavuses tugeva sidususekomponentidega.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
87
Lahendus kauguste maatriksi abil
Tugeva sidususe komponendid on võimalik kätte saada kauguste maat-riksist.
– Tipud, mille kaugused teineteisest on lõplikud, asuvad samas tu-geva sidususe komponendis.
Kuid kauguste maatriksi leidmine on ebaefektiivne.
– Nt Floyd-Warshalli algoritm töötab kuupkeerukusega.
Kauguste maatriks sisaldab palju rohkem infot kui sidususkom-ponendid. Sidususkomponente on võimalik lihtsamalt tuvastada.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
88
Kosaraju algoritm: eeltöö
Läbida graaf lõppjärjestuses, tiputöötluseks lisamine ahela algusse,mis algul on tühi.
– St tekitada tagurpidi lõppjärjestus.
Tekitada iga tipu jaoks omaette klass.
Märkida kõik tipud kui “vaatlemata”.
Tekitada pööratud kaartega graaf.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
89
Kosaraju algoritm: põhitöö
Läbida saadud ahel päripidi, iga tipuga v teha järgmist:
– kui v on “vaatlemata”, siis
∗ läbida pööratud kaartega graaf alustades tipust v, iga läbi-tud tipuga u teha järgmist:
· kui u on “vaatlemata”, siis· märkida u “vaadelduks”,· ühendada tipu u klass tipu v klassiga.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
90
Komponentide avastamise järjestus
Kosaraju algoritm avastab tugeva sidususe komponendid järjestuses,mis vastab tagurpidi lõppjärjestusele tugeva sidususe komponentidegraafis.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
91
Keerukus
Lugedes, et klassijaotuse manipulatsioonid on topeltoptimeeritud Gal-ler-Fischeri meetodi korral praktiliselt konstantse keskmise keeruku-sega, on selle lahenduse keerukus O(n + m), kus n on tippude ja mkaarte arv.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
92
Tarjani algoritm: abiväljad
Abiks kasutatakse:
– välju iga tipu järjekorranumbri hoidmiseks;
– välju iga tipu samma tugeva sidususe komponenti kuuluva eel-lase (eelnevalt külastatud tipu) numbri hoidmiseks;
– magasini külastatud tippude hoidmiseks.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
93
Tarjani algoritm: graafi läbimine
Läbida graaf korraga ees- ja lõppjärjestuses.
– St on töötlusprotseduurid, millest üht rakendatakse tipu esma-kordsel külastusel ja teist tipu juurest lahkumisel.
Rekursiivse algoritmi puhul pole probleem nii teha. Üks protse-duur tehakse enne rekursiivset pöördumist, teine pärast.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
94
Tarjani algoritm: eesjärjestuse protseduur
Eesjärjestuses teostatakse järgmist:
– tipu numbri väärtustamine järjekorranumbriga eesjärjestuses;
– tipu eellasenumbri algväärtustamine sama numbriga;
– tipu lisamine magasini.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
95
Tarjani algoritm: eellasenumbri vähendamine
N-ö “keskjärjestuses” tegevus (pärast iga väljuva kaare töötlust).
– Iga kaar, mis läheb jooksvast tipust sellisesse juba külastatud tip-pu, mis ei kuulu veel ühtegi klassi ja mille number on jooksvatipu omast väiksem, toob kaasa eellasenumbri muutumise selletipu numbriks.
– Iga kaar, mis läheb alles läbimata tippu, toob pärast järglase tööt-luse lõppu kaasa eellasenumbri muutumise võrdseks selle järg-lase eellasenumbriga, kui see on jooksva tipu eellasenumbristväiksem.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
96
Tarjani algoritm: lõppjärjestuse protseduur
Lõppjärjestuses teostatakse järgmist:
– kui tipu eellasenumber pole alanenud (võrdub jätkuvalt tipu endanumbriga), siis luuakse uus klass, mille ainus tipp on jooksevtipp;
– samma klassi pannakse kõik need tipud magasinist, mis on sinnapandud pärast seda tippu;
– kõik uue klassi tipud ühtlasi eemaldatakse magasinist.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
97
Komponentide avastamise järjestus
Tarjani algoritm avastab tugeva sidususe komponendid järjestuses, misvastab lõppjärjestusele tugeva sidususe komponentide graafis.
6 Sidususkomponentide leidmine
6.3 Tugeva sidususe komponentide leidmine
98
Keerukus
Lugedes, et klassijaotuse manipulatsioonid on topeltoptimeeritud Gal-ler-Fischeri meetodi korral praktiliselt konstantse keskmise keeruku-sega, on selle lahenduse keerukus O(n + m), kus n on tippude ja mkaarte arv.
– Tarjani algoritm võib siiski Kosaraju algoritmist mingi kordajajagu kiiremini joosta, sest saab hakkama graafi ühekordse läbi-vaatusega.