Graafid - kodu.ut.eekodu.ut.ee/~nestra/mat/inf/p/aa/09s/s/graafid.pdf · 4 Kauguste analüüs 4.2...

49
1 Graafid 1 Sissejuhatus 2 Sissejuhatus

Transcript of Graafid - kodu.ut.eekodu.ut.ee/~nestra/mat/inf/p/aa/09s/s/graafid.pdf · 4 Kauguste analüüs 4.2...

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.