Universitetet i Oslo Institutt for informatikk. Visualisering av grafalgoritmer. Lars Duvaas. Hovedoppgave

Størrelse: px
Begynne med side:

Download "Universitetet i Oslo Institutt for informatikk. Visualisering av grafalgoritmer. Lars Duvaas. Hovedoppgave"

Transkript

1 Universitetet i Oslo Institutt for informatikk Visualisering av grafalgoritmer Lars Duvaas Hovedoppgave Mai 2002

2 ii

3 Forord Denne hovedoppgaven er skrevet som en del av cand.scient graden i Anvendt og Industriell Matematikk ved Institutt for Informatikk, ved Universitetet i Oslo. Det er en fordel om lesere av denne oppgaven er fortrolig med matematisk notasjon og har en grunnleggende matematisk kunnskap fra kombinatorisk optimering. Målet med oppgaven har vært å lage en applikasjon som visualiserer noen utvalgte grafalgoritmer. Jeg vil takke min veileder, Geir Dahl, for råd og vink gjennom utviklingen av applikasjonen og skriving av oppgaven. En stor takk rettes også til Jarle Kasbo og Trude Larssæther for gjennomlesing av oppgaven og min datter Rosita som fikk meg til å innse at det var på tide å avslutte studiene da hun sa: Pappa, du er ikke voksen du, for du går på skole sånn som meg ennå.. Til slutt kan jeg ikke komme utenom hva min lesesal, parken, har betydd for meg. Bedre støtte i gode og vonde dager skal man lete lenge etter. Parken Forever! Oslo, mai 2002, Lars Duvaas

4 iv

5 Innhold Forord iii 1 Innledning Introduksjon Oppbygging av oppgaven Grafteori Hvaerengraf? Teoretisk gjennomgang av algoritmene Minimumspenntre Kruskalsalgoritme PrimsAlgoritme Kortesteveiproblemet Potensialer Ford-BellmansAlgoritme DijkstrasAlgoritme Maksimumstrøminettverk... 21

6 vi INNHOLD Minimumkutt Økendeveialgoritmen Maksimumstrømalgoritmen Minimumkostnadstrøminettverk Brukerveiledning Kortforklaringavapplikasjonen Redigeringavnoderogkanter Settekostnaderpåkanterognoder GUIfunksjonene Menyene Meldingsvinduet Knappenes funksjoner ved kjøring av en algoritme Valgavrettetellerurettetgraf Bakgrunnsbildet Åkjøreapplikasjonensomenapplet Installasjonavapplikasjonen Applikasjonens gjennomgang av algoritmene Forklaringavalgoritmene Kruskalsalgoritme Primsalgoritme Ford-Bellmansalgoritme Dijkstrasalgoritme Maksimumstrøm Minimumkuttalgoritmen Minimumkostnadstrøm... 66

7 INNHOLD vii 6 Til bruk i læring Læring Oppsummering Konklusjon A Kode 77 A.1 Algoritmer.java A.2 ButtonListener.java A.3 CloseListener.java A.4 Dijkstra.java A.5 DijkstraListener.java A.6 DirectedListener.java A.7 Edge.java A.8 EdgeLine.java A.9 Edit.java A.10EditEdges.java A.11EditVertexes.java A.12ExitAlgListener.java A.13GraphMaker.java A.14FinishListener.java A.15Ford.java A.16FordListener.java A.17General.java

8 viii INNHOLD A.18Graph.java A.19GraphApplet.java A.20GraphWindow.java A.21KruskalListener.java A.22Kruskals.java A.23Line.java A.24MaxFlow.java A.25MaxFlowListener.java A.26MenuEditEdgesListener.java A.27MyObject.java A.28MenuEditVertexesListener.java A.29MenuFileExitListener.java A.30MenuFileLoadImgListener.java A.31MenuFileNewGraphListener.java A.32MenuFileOpenListener.java A.33MenuFileRemoveImgListener.java A.34MenuFileSaveAsListener.java A.35MenuFileSaveListener.java A.36MenuGraphListener.java A.37MinCostFlow.java A.38MenuViewCapacityListener.java A.39MenuViewCostListener.java

9 INNHOLD ix A.40MenuViewDemandListener.java A.41MenuViewFlowListener.java A.42MinCostFlowListener.java A.43MyWindowListener.java A.44NextListener.java A.45PrimListener.java A.46Prims.java A.47RunAlgorithm.java A.48RunDijkstra.java A.49RunFord.java A.50RunMaxFlow.java A.51RunPrim.java A.52SaveFile.java A.53StepListener.java A.54TimeDelayListener.java A.55TrashCan.java A.56UpdateListener.java A.57Vertex.java A.58VertexLine.java Bibliografi 171

10 x INNHOLD

11 Kapittel 1 Innledning 1.1 Introduksjon I denne hovedoppgaven har jeg laget en applikasjon for å visualisere grafalgoritmer. Grafalgoritmene som presenteres videre går under fagfeltet kombinatorisk optimering. Visualisering av grafalgoritmer viser hvordan hvert steg i de forskjellige algoritmene ser ut og hvordan disse blir utført. Det er derfor lagt vekt på å gjennomgå grafteori og de forskjellige problemene som algoritmene i applikasjonen kan løse. Jeg har fokusert på fire problemer, minimum spenntre, korteste vei, maksimal strøm i nettverk og minimum kostnad strøm i nettverk. Alle problemene er typiske nettverksproblemer som lar seg løse effektivt. Felles for alle algoritmene er at de bruker strukturen i grafen til å løse problemene, som kan vises grafisk. For å løse minimum spenntre problemet har jeg implementert to algoritmer, Prims og Kruskals algoritme. Dette er også gjort for korteste vei problemet, der de to algoritmene Dijkstras og Ford-Bellmans algoritme blir brukt. I de siste to problemene brukes det kun en algoritme for hvert problem. Formålet med hovedoppgaven er å lage en applikasjon studenter kan benytte til å lære seg de ovennevnte algoritmene som er implementert, ved at de kan få en visuell forståelse av hvordan algoritmene løser de ulike problemene. Studentene skal kunne lage og teste algoritmene på grafer de selv lager på en enkel måte. Applikasjonen er derfor helt og

12 2 Innledning holdent GUI-basert for å gjøre startterskelen så lav som mulig. Når algoritmene kjøres vil man i tillegg til visualisering av grafen få meldinger og spørsmål i henhold til det som skjer underveis. Når det gjelder Ford-Bellmans algoritme har jeg endret på algoritmen som var foreslått i [1], på grunn av at denne ikke var helt korrekt. Forandringen førte til at algoritmen fungerte på en tilfredstillende måte. 1.2 Oppbygging av oppgaven I kapittel 2 gis en kort innføring i de grunnleggende begrepene innen grafteori. Grafteorien blir grundigere presentert med gjennomgang av de ulike algoritmene i kapittel 3. Jeg velger å gå igjennom grafteorien etterhvert som det blir nødvendig for å forklare eller bevise algoritmene. Kapittel 4 er en brukerveiledning til hvordan man skal installere og bruke applikasjonen. I kapittel 5 blir det gjort rede for hvordan algoritmene blir gjennomgått av applikasjonen. Man vil her få en grundig gjennomgang av hva de forskjellig fargene som blir brukt når man kjører en algoritme betyr. I kapittel 6 fremmes noen forslag om hvordan applikasjonen kan brukes i læring. Det er ment at applikasjonen skal brukes av studenter i forbindelse med læring av grafteori, og da spesielt hvis det dreier seg om noen av de algoritmene presentert i denne oppgaven. Til slutt oppsummeres innholdet i oppgaven og de erfaringer som er gjort gjennom arbeidet med denne. Her har jeg også valgt å si noe om hva som kunne ha vært gjort anderledes i forhold til applikasjonen og dens funksjonalitet og innhold.

13 Kapittel 2 Grafteori II dette kapittelet skal jeg gå igjennom endel grunnleggende grafteori. Det vil her bli nevnt begreper som er sentrale i all grafteori. Ikke alle vil bli forklart like godt, så det anbefales å lese [6],[1] og [2]. 2.1 Hva er en graf? Å gi en enkel forklaring på hva en graf er kan være vanskelig. Kort fortalt kan man si at en graf er en tegning med punkter og rette streker eller piler mellom noen av punktene. Forklaringen er ikke direkte uriktig, men den sier heller ikke noe om hva en graf er, eller hva grafer kan brukes til. Jeg vil derfor gå igjennom en del eksempler så man letter kan se hva grafteori og algoritmene som senere blir forklart kan brukes til. En del grunnleggende begreper og definisjoner blir også tatt med for å gjøre lesingen enklere. En graf G beståravetordnetparg=(v, E), derv er en endelig mengde noder og E en mengde kanter. Har man nodemengden V ={v 1,v 2,...,v n så må kantmengden E {{v i,v j v i,v j V.Tallene m, n blir brukt for antall kanter og noder som grafen har. Dersom det ikke blir sagt noe annet vil n være antall noder (n = V )ogmvære antall kanter (m = E )ig.enkante={v,w blir skrevet som e vw eller vw. Vi sier at kanten e = vw har v og w som endenoder. Endenodene til e ligger inntil e. Dersom to noder sies å være naboer så finnes det en kant mellom dem. En graf der alle noder har alle andre noder som naboer kalles en komplett graf. I figur 2.1 ser vi en graf. Vi kaller det en simpel graf siden den ikke har noen løkker eller parallelle kanter. En løkke (figur 2.2) er en kant som har begge endene i samme node, det vil si

14 4 Grafteori s u t v r w Figur 2.1: En graf at e = vv, mens parallelle kanter har de samme endenodene. I de fleste eksempler kan man bruke simple grafer, så i teorien og algoritmene som blir gjennomgått her er det antatt at grafen er simpel. v e=vv Figur 2.2: En løkke Grafen i figur 2.1 er en urettet graf. Det vil si at kantene ikke har noen retning. En kant vw kanbrukestilågåfravtil w og omvendt. Vi definerer en vei P iengrafsomenfølgev 0,e 1,v 1,...,e k,v k hvor hver v i er en node og e i er en kant med endenodene v i 1 og v i. P er en vei fra v 0 til v k, eller en (v 0,v k )-vei. Et spenntre H er en subgraf av G.Medsubgraf mener vi at H = (V (H), E(H)) består av en delmengde av G = (V (G), E(G)), slik at V(H) V(G) og E(H) E(G). Enkante E(H) har de samme endene i H som i G. Det betyr at hvis kanten vw E(H) så må v,w V(H). Lett forklart så får man en subgraf H G ved og fjerne noder og kanter i G. Fjerner man en node må man også fjerne alle kanter som er knyttet til denne noden. Subgrafen H er utspennende når alle nodene i G er med i H, dvsatv(h) = V(G). Er det en vei mellom alle par av noder sier vi at grafen er sammenhengende. Finnes det en vei P ={v 0,e 1,v 1,...,v k,derv 0 =v k og v 0,...,v k 1 er forskjellige sier vi at vi har en sykel (figur 2.3). Et tre er en sammenhengende subgraf uten sykler. Flere trær blir, logisk nok, kalt en skog. Er treet utspennende så blir det kalt et spenntre (figur 2.4). Det er mange strukturer og problemer som kan representeres i form

15 2.1 Hva er en graf? 5 s u t v r w Figur 2.3: Sykel s u t v r w Figur 2.4: Spenntre av en graf. De vanligste er nettverk, med noder som datamaskiner og kantene er forbindelser mellom dem. Når to maskiner skal kommunisere med hverandre er det hensiktsmessig at de bruker den korteste veien mellom seg til dette. Det finnes enkle algoritmer for å løse korteste vei problemet (se kapittel 3.2). Dersom det skal sendes store datastrømmer og det er gitt en maks kapasitet på forbindelsene (kantene), så eksisterer det algoritmer (maks strøm - min kutt, se kapittel 3.3) for å finne ut hvor mye som maksimalt kan sendes, og i hvilke kanter begrensningen ligger. Merknad til notasjon i denne oppgaven I denne oppgaven har jeg brukt notasjon som går utover det som vanligvis brukes. I figurer er ofte nodene merket med en stor bokstav. En node som er merket med A vil bli referert til som v A. Det er derfor naturlig

16 6 Grafteori åsiatenkantmellomv A og v B skal refereres til som v A v B eller e va v B. Jeg har valgt å skrive at e AB er kanten som går mellom v A og v B.

17 Kapittel 3 Teoretisk gjennomgang av algoritmene Idette kapittelet blir de forskjellige algoritmene gjort rede for. Grafteorien som ikke ble nevnt i forrige kapittel som trengs for å forklare eller bevise algoritmene, vil bli forklart etterhvert som man trenger den. 3.1 Minimum spenntre Tenk deg et kabelselskap som skal grave ned kabler mellom mange hus. Det eneste de krever er at det skal være en kontakt mellom alle husene, men den trenger ikke å være direkte. Kabelselskapet vet kostnadene for å grave ned en kabel for de forskjellige par av husene v og w, ogde er gitt ved c vw. Problemet for selskapet er å minimere kostnadene for å grave ned kabelen, slik at alle husene er tilkoblet. En slikt problem kan utformes som en graf der nodene er husene, og kantene mellom nodene er de stedene som det er mulig og bygge ut. Hver kant e har en kostnad c e. Dette problemet blir ofte kalt design problemet for nettverk. I figur 3.1 er det tegnet opp en graf der nodene er husene og kantene er de potensielle kablene man kan legge. Løsningen man søker er det som blir kalt et minimum spenntre, eller mer nøyaktig minimum kostnad spenntre. Det er vanlig å bruke forkortelsen MST. Enkantehar kostnaden c e. Vi sier at kostnaden ved et tre H = (V (H), T ), dert=e(h), er gitt ved c(t) = e T ce.

18 8 Teoretisk gjennomgang av algoritmene Figur 3.1: Design problemet for nettverk Det er denne kostnaden vi vil ha minst mulig i et MST. Derfor ønsker vi å finne en kantmengde T som utgjør et spenntre, slik at c(t) er minst mulig. Før vi se nærmere på hvordan man løser et MST problem bør en vite følgende om spenntrær: Preposisjon 3.1. En kant e vw E(G) er en del av en sykel hvis og bare hvis det er en vei fra v til w i G \{e vw. Det følger at en sammenhengende graf fortsatt er sammenhengende hvis man fjerner en kant i en sykel. Preposisjon 3.2. En utspennende sammenhengende subgraf av G er et spenntre hvis og bare hvis det har eksakt n 1 kanter. At det er akkurat n 1 kanter i et spenntre og at det ikke har sykler, er to av de viktigste egenskapene som MST algoritmene setter som krav. Man bruker preposisjon 3.2 til å finne ut om man har fått et spenntre eller ikke. Algoritmene legger på en og en kant til treet, og når det er lagt til n 1 kanter har man fått et spenntre og algoritmen kan stoppe. For hver kant som blir lagt til er det viktig at den ikke lager en sykel. Dersom kanten e vw lager en sykel, er den overflødig siden det da allerede finnes en vei mellom v og w (preposisjon 3.1). Dette er det eneste man trenger

19 3.1 Minimum spenntre 9 å teste. Det som gjenstår da, er å finne ut hvilke kanter man skal prøve å legge til. Vi skal gå igjennom forskjellige strategier for dette, som vil bringe oss frem til de to mest kjente; Kruskals - og Prims algoritme. Vi skal nå se at det er den strategien som virker som den enkleste også er den som fungerer. Jeg har implementert to algoritmer som begge bygger på det samme prinsippet. Dette prinsippet går ut på at det alltid lønner seg å ta det billigste valget i hvert steg. Kruskals algoritme starter med at den bygger ut en skog til den finner et spenntre. Når man starter består skogen av alle nodene uten noen kanter. Algoritmen tar så den kanten med minst kostnad og legger til en skog så lenge den ikke lager en sykel. Den stopper når den har et funnet spenntre, det vil si n 1 kanter. Litt mer presist finner man dette ifigur3.2. Kruskals Algoritme Begynn med en utspennende skog H = (V, F) av G, med F= For hvert steg legger men til F den kanten e F med minst kostnad slik at H fortsatt er en skog. Stopp når H er blitt et spenntre. Figur 3.2: Kruskals Algoritme Prims algoritme er ikke så veldig forskjellig fra Kruskals algoritme, det er bare en liten forskjell i hvordan den bygger ut spenntreet. Den begynner med et tre istedenfor en skog som Kruskals, og legger til den kanten som har minst kostnad av kantene ut fra treet så lenge det ikke dannes en sykel. Treet den starter med er bare en enkel node. I figur 3.3 er algoritmen forklart bedre. Teorem 1. For enhver sammenhengende graf G med vilkårlig kantkostnader c, vil Kruskals - og Prims algoritme finne et minimum spenntre. Beviset for teorem 1 kan leses i [1] Kruskals algoritme Jeg vil videre gå igjennom hvordan jeg har implementert Kruskals algoritme. I figur 3.4 ser du en grovskisse på hvordan jeg har implemen-

20 10 Teoretisk gjennomgang av algoritmene Prims Algoritme Ha et tre H = (V (H), T ) med V(H) ={rtil å starte med for en r V,ogT=. For hvert steg legger man en kant e T med minst kostnad til T slik at H fortsatt er et tre. Stopp når H er et spenntre. Figur 3.3: Prims Algoritme tert algoritmen. Selve implementasjonen til algoritmen kan leses i tillegg A.22. Denne algoritmen er ikke implementert for at den skal være rask. Man kan heller si at den er ganske treg. Når man skal finne om en kant e skal legges til skogen F sjekkers det om den lager en sykel i F. Dette kan implementeres på forskjellige måter. Jeg har valgt en metode som ikke er særlig effektiv og ikke bruker strukturen til F særlig godt. Metoden som skal finne en sykel prøver å gå til den finner samme kanten som den startet med. Siden det kan være n 1 kanter i grafen når dette sjekkes, og det skal gjøres m ganger, vil vi dette gi en kjøretid på O(mn). Jeg har gjort det på denne måten, fordi metoden også blir brukt i andre algoritmer som ikke har samme struktur som F. Hvisman istedenfor å lete etter sykler sjekker om en kant e har endene i to forskjellige deler av H, så blir algoritmen enda raskere. Dette kan gjøres på log n tid, så etter å ha sortert E kan kantene velges ut ved O(m log n) tid. Det andre som tar tid i en slik algoritme er å sortere alle kantene i E Kruskals Algoritme Sorter E som {e 1,e 2,...,e m,derc e1 c e2 c em ; Sett H = (V, F) med F = ; Sett i = 0ogj=0; Så lenge i<n 1ogj<m j=j+1; Hvis e j ikke lager en sykel i H = (V, F) Legg e j til F; i = i + 1; Figur 3.4: Kruskals Algoritme etter kostnaden c. Jeg har valgt å bruke quicksort til å sortere kantene. Quicksort kjører på en gjennomsnittstid på O(N log N) og O(N 2 ) ivers-

21 3.1 Minimum spenntre 11 te tilfelle. Med N menes her antall elementer i listen som skal sorteres. Kruskals algoritme skal da først sortere m kanter. Etter det er det bare å gå igjennom alle kantene en gang, noe som kan gjøres ved O(m log n) tid. Vi får da en algoritme som kjører på O(m log m) tid. Siden m = n 2 (i en komplett graf) får vi at algoritmen kan kjøre på O(m log n) Prims Algoritme Det kan gjøres noen forenklinger på Prims algoritme ved å innføre et nytt begrep, nemlig kuttet til en mengde. For en graf G = (V, E) og L V, sier vi at kuttet til L, δ(l) er gitt ved {e E : e har en ende i L og en ende i V \ L. I figur 3.5 er L ={v D,v C og kuttet til L blir da δ(l) ={e CE,e CF,e CH,e CB,e DA,e DE. Disse kantene er merket med rødt. Man kan dermed se at algoritmen kan bli som i figur 3.6. Dersom grafen Figur 3.5: Et kutt δ(l), medl={v C,v D er sammenhengende vil Prims algoritme finne MST. Den enkleste måten å sjekke om algoritmen har funnet MST, er å sjekke om den har n 1kanter når den terminerer. Dersom antall kanter i T er mindre enn n 1har vi funnet et tre med minimum kostnad. Kruskals algoritme er kanskje en bedre algoritme hvis grafen ikke er sammenhengende. Den finner ikke bare et minimum-kostnad tre, men alle minimum-kostnad trær i grafen. Algoritmen er implementert med en vektor som holder på alle kantene i δ(v (H)). For hvert steg må vi gå igjennom denne vektoren for å finne den kanten e δ(v (H)) med minimum-kostnad. Siden det kan være m kanter og dette må gjentas n 1 ganger får vi en algoritme som kjører på O(mn) tid. Måten algoritmen er implementert på gjør nok at den får enda litt dårligere kjøretid, siden den for hvert steg viser hvilke kanter

22 12 Teoretisk gjennomgang av algoritmene Prims Algoritme Begynn med et tre H = (V (H), T ), derv(h) ={rog T = ; Så lenge δ(v (H)) Legg til T en minimum-kostnad kant fra δ(v (H)). Figur 3.6: Prims Algoritme som ikke lenger kan være med i spenntreet. Flere forbedringer kan det leses om i [1]. 3.2 Korteste vei problemet Den ideelle taxisjåfør vil fra et bestemt sted alltid vite korteste vei fra dette stedet til alle andre steder. Byen kan tegnes opp som en rettet graf G = (V, E) der V ={v 1,v 2,...,v n og en node v er et sted man kan kjøre til. Kantene E ={e 1,e 2,...,e n er rettede, siden en vei kan være enveiskjørt. En kant e = vw er dermed ikke samme kanten som e = wv. Det er naturlig å tenke at man bare trenger korteste vei fra en sted til et annet. Men som vi snart skal se, så gir korteste vei algoritmene ut korteste vei fra en node til alle andre noder. Jeg velger å kalle dette KVT (Korteste Vei Tre). Når man har funnet korteste vei fra en node til alle andre noder, vil man ha et tre med startnoden som rot. I figur 3.7 ser du et KVT med v A som startnode. Man skulle tro at det er langt mer Figur 3.7: De blå kantene og nodene utgjør et KVT med v A som rot. komplisert å finne korteste vei fra en node til alle andre noder, enn bare

23 3.2 Korteste vei problemet 13 fra en node til en annen. Som vi videre skal få se så tar dette like lang tid. Når man snakker om en rettet graf brukes nesten akkurat de samme definisjonene som i en urettet graf. En kant e E har en hale t(e) V og et hode h(e) V.Kantene=vw har v = t(e) og w = h(e). Dersom kanten e i i veien P : v 0,e 1,v 1,...,e k,v k har t(e i ) = v i 1 og h(e i ) = v i sier vi at det er en forover kant i P. Er den ikke forover, er den en bakover kant. En vei hvor alle kantene er forover kalles en rettet vei. Det samme gjelder for en sykel. Er alle kantene forover er det en rettet sykel. Parallelle kanter har samme hode og samme hale. Kostnadene for en kant e i er gitt ved c ei. En rettet vei fra v 0 til v k,der P={v 0,e 1,v 1,e 2,v 2,...,e k,v k og e i ={v i 1,v i, får da kostnaden c(p) = k i=1 c e i. Vi antar også at G er simpel. Parallelle kanter kan gjøres om til en enkel kant ved å velge den kanten e med minst kostnad c e og en løkke e med kostnad c e 0 vil aldri være med i en korteste vei. Er kostnaden c e < 0 vil det ikke finnes noen løsning på korteste vei problemet da det vil lønne seg og gå rundt løkka uendelig mange ganger. Dette er det samme som skjer når G har negative sykler, som vi skal se nærmere på senere Potensialer Potensialer er den grunnleggende ideen som brukes i alle metoder for å løse korteste vei problemet. Anta at det finnes en rettet vei fra r til v. La kostnaden på denne være y v for alle v V. Hvis vi kan finne en kant vw E slik at y v + c vw <y w ser vi at det finnes en vei til w ved å legge vw til den rettede veien til v. Vi ser da at vi har funnet en rettet vei til w med mindre kostnad, y v + c vw. Det viser seg at hvis y v,derv V, er en minimum kostnad for en rettet vei fra r til v, da tilfredstiller y y v + c vw y w, for alle vw E. (3.1) Dersom y tilfredstiller (3.1) og y r = 0 sier vi at y tilfredstiller et tillatt potensiale. Preposisjon 3.3. La y være et tillatt potensial og la P være en rettet vei fra r til v. Daerc(P) y v.

24 14 Teoretisk gjennomgang av algoritmene Bevis. Anta at P er v 0,e 1,v 1,e 2,...,e k,v k,hvorv 0 =r og v k = v. Daer k k c(p) = c ei (y vi y vi 1 ) = y vk y v0 = y v. i=1 i=1 Legg merke til at man ikke trenger å huske på en rettet vei for hver node v V. Faktisk trenger man bare huske på en kant for hver node v r. Tenk deg at du har funnet korteste vei P fra r til v. Hvis det er en node w som ligger på P, dvs P={r,e 1,v 2,e 2,...,v k,e k,w,e wvk+1,v k+1,e k+1,...,v, kan man splitte opp P i P 1 og P 2,derP 1 er korteste vei fra r til w og P 2 er korteste vei fra w til v. HvisP 1 ikke hadde vært korteste vei kunne vi byttet den ut og fått mindre kostnad på P. Deler man opp P enda mer ser vi at det bare er den kanten med hode i v man trenger og huske. Siden det vil være n 1 slike kanter og den korresponderende subgrafen vil inneholde en vei fra r til alle andre noder, vet vi at disse kantene vil utgjøre et spenntre av G. Vi har nå gått ut fra at det finnes en rettet vei fra r til alle andre noder v V. De nodene som det ikke finnes en rettet vei til kan vi se bort fra, fordi disse ikke har noen innvirkning på potensialene Ford-Bellmans Algoritme Ford-Bellmans algoritme er en utvidelse av Fords algoritme. Fords algoritme skal finne korteste vei fra en node r til alle andre noder v som det går en rettet vei til. Man har en graf G = (V, E), derv er nodene og E er en mengde med rettede kanter. Fords Algoritme og Ford-Bellmans Algoritme bruker potensialer for å finne en optimal løsning. Begge algoritmene leter til de har funnet et tillatt potensiale. Hvis man finner en kant vw som ikke tilfredstiller (3.1), bytter vi ut y w med y v + c vw. For hver node v V \{r trenger vi bare å holde rede på den kanten som har hode i v. Disse blir lagret i en forgjenger p(v) for hver v V.Hviskantenvw ikke tilfredstiller (3.1) så setter man y w = y v + c vw og setter p(w) = v. Vi initiere y og p ved å sette y v = og p(v) = 1forv V\r,og y r =0ogp(r) = 0. Når p(v) = 1betyr dette at det ikke er funnet en minimum-kostnad vei til v. Antar at 0, 1 V.Enkantvw ien

25 3.2 Korteste vei problemet 15 Fords Algoritme Steg 1. Sett y v = og p(v) = 1forv V\r og y r = 0 og p(r) = 0. Steg 2. Så lenge y ikke tilfredstiller et tillatt potensiale, finn en kant vw som ikke tilfredstiller (3.1) og sett y w = y v + c vw og p(w) = v. Figur 3.8: Fords Algoritme minimum-kostnad vei vil tilfredsstille y v + c vw = y w.viseratfordsalgoritme (figur 3.8) vil terminere når den har funnet et tillatt potensiale. Men det er ikke sikkert at dette eksisterer. Figur 3.9: Negativ sykel Figur 3.9 viser at en vei fra r til a har kostnad 1 hvis man går langs kanten e ra. Men går man en runde, det vil si følger veien P ={a, e ab,b,e bd,d,e df,f,e fa,a, vil man ende opp i a. Nå vil kostnaden fra r til a være 0. For hver runde man går vil kostnaden minke med 1. Kostnaden vil gå mot ettersom antall runder går mot. Fords Algoritme vil ikke terminere dersom det finnes en negativ sykel i grafen. En graf der alle kostnader c e 0,e E vil aldri ha en negativ sykel og Fords algoritme vil da alltid terminere. Etter at den har terminert vil det eksistere en korteste vei fra r til v dersom y v. Denvilha

26 16 Teoretisk gjennomgang av algoritmene kostnaden y v.hvisp(v) 1 vily v være den minste kostnaden på en vei fra r til v. Det er bare negative sykler som gjør at Fords algoritme ikke vil terminere. For å løse dette skal vi se nærmere på hvordan Fords algoritme går igjennom kantene. I Fords algoritme er det ikke gitt noen strategi på hvordan man skal gå igjennom kantene som skal sjekkes. Vi kan kalle rekkefølgen som Fords algoritme går igjennom kantene for S. Forskjellige valg av S vil i mange tilfeller føre til dårlig gjennomførelse av algoritmen. Det er derfor vanskelig å si noe om effektiviteten til algoritmen. La P være den rettede veien v 0,e 1,v 2,...,e k,v k fra r = v 0 til v = v k. Hvis Fords algoritme ser på kantene e 1,e 2,...,e k, i den rekkefølgen, vil vi ha at y v c(p). Vi sier at P er inneholdt i S dersom kantene til P forekommer som en delfølge av S. Det betyr at de ligger i rekkefølge, men ikke nødvendigvis etter hverandre. Preposisjon 3.4. Hvis Fords algoritme bruker følgen S, da vil vi for v V og for hver vei P fra r til v inneholdt i S ha at y v c(p). Dersom man kan finne en S slik at alle noder v har en rettet korteste vei inneholdt i S, vil algoritmen terminere. Dette bringer oss inn på Ford - Bellmans algoritme. Legg først merke til at alle enkle rettede veier i G er inneholdt i S = S 1,S 2,...,S n 1,derS i for alle i er en ordnet følge av E. Når det brukes en slik ordnet følge i Fords algoritme snakkes det om hvor mange ganger E gjennomgåes. Siden hver kant blir behandlet med konstant tid vil algoritmen bruke O(mn) tid. Algoritmen blir kalt Ford - Bellmans algoritme siden Bellman var den første som beviste en polynomisk grense for en slik algoritme. Dersom det ikke er noen rettet negativ kostnad sykel, vil det være nok med n 1 gjennomløpinger av E for å finne et tillatt potensial. Det vil igjen si at det eksisterer en rettet negativ kostnad sykel hvis y ikke tilfredstiller et tillatt potensiale etter n 1 gjennomløpninger av E. Teorem 2. Ford - Bellmans algoritme finner den rettede minimum-kostnad vei fra r til v for alle v V (hvis i<nved terminering), eller den påviser at det fins en rettet negativ-kostnad sykel (hvis i = n ved terminering). I begge tilfeller bruker den O(mn) tid. Siden denne algoritmen (figur 3.10) går igjennom alle kantene n ganger hvis det er en rettet negativ-kostnad sykel sier det seg selv at det kan ta lang tid å vise hvert steg i denne algoritmen grafisk. Det betyr at det i praksis blir mn steg. I en graf med 8 noder og 2 kanter per node, dvs 16 kanter, vil da algoritmen bruke 128 steg, noe som er ganske mye

27 3.2 Korteste vei problemet 17 Ford-Bellmans Algoritme Sett y v = og p(v) = 1forv V\r og y r = 0og p(r) = 0; Sett i = 0; Så lenge i<nog y ikke tilfredstiller et tillatt potensiale Sett i = i + 1; For e E Hvis e ikke tilfredstiller et tillatt potensiale Rett på e; Figur 3.10: Ford-Bellman Algoritme for en liten graf som denne. Jeg har derfor lagt inn noen forfininger av algoritmen. Algoritmen vil fortsatt kjøre på tid O(mn), men i praksis vil den bruke mye kortere tid. Metoden er basert på å skanne noder. Mengden L v er alle kanter som har hale i v. Medåskanne v menes følgende : For vw L v Hvis vw ikke tilfredstiller et tillatt potensiale Rett på vw; En naturlig forfining av Ford-Bellmans algoritme er da og bytte ut de siste tre linjene med For v V Skann v; Man bør da legge merke til at man ikke trenger å skanne v hvis y v ikke er forandret siden sist man skannet v. Man lager to køer Q1 ogq2. Hvis manretterpåenkantvw,detvilsiaty w blir forandret, legger man til w i Q2. Begge køene blir laget som FIFO-køer, det vil si at den noden som blir lagt til køen først, er den som først går ut. Forskjellen er at man i hver iterasjon av algoritmen bare skanner de som ble lagt til i Q2 i forrige iterasjon. Dette går i de fleste tilfeller mye fortere enn å skanne alle nodene hver gang. Algoritmen blir da som i figur Det er denne versjonen av algoritmen som er blitt implementert i programmet. Algoritmen i fig 3.11 er en rettelse på forslaget til en forfining som er beskrevet i [1]. Der brukes bare en kø Q, imotsetning til at jeg har brukt

28 18 Teoretisk gjennomgang av algoritmene Ford-Bellmans Algoritme Sett y v = og p(v) = 1forv V\r og y r = 0og p(r) = 0; Sett i = 0ogQ1={r; Så lenge i<nog Q1 Sett i = i + 1; For v Q1 Slett v fra Q1; For vw L v Hvis vw ikke tilfredsstiller et tillatt potensial Rett på vw; Legg w til Q2 hvis w Q1,Q2; Sett Q1 = Q2 ogq2={; Figur 3.11: Ford-Bellmans Algoritme med skanning av noder Ford-Bellmans Algoritme, med en kø Sett y v =, p(v) = 1forv V\r,y r =0og p(r) = 0; Sett Q ={r; For v Q Slett v fra Q; For vw L v Hvis vw ikke tilfredsstiller et tillatt potensial Rett på vw; Legg w til Q hvis w Q; Figur 3.12: Ford-Bellmans Algoritme med en kø og skanning av noder to køer Q1 ogq2. Jeg skal videre vise at det går raskere å bruke en kø på grafer som ikke har negative sykler, men at algoritmen ikke vil terminere dersom det eksisterer en negativ sykel i grafen. Algoritmen som er forklart i [1] legger en node v til Q dersom y v har blitt forandret, og velger neste node til å bli skannet fra Q (og sletter den fra Q). Q er initielt {r og algoritmen stopper når Q blir tom. Men som vi skal se av følgende eksempel vil Q aldri bli tom dersom grafen inneholder en negativ sykel. Det er nok å se på hvordan Q (køen) vil bli med grafen fra

29 3.2 Korteste vei problemet 19 figur 3.9. Node som blir skannet og fjernet fra Q Noder som legges til Q Q (etter at noder er fjernet og lagt til) Steg 1 Steg 2 Steg 3 Steg 4 Steg 5 Steg 6 r a b d f a a b d d a b a b d d a b Tabell 3.1: Q s utvikling på grafen i figur 3.9 I tabell 3.1 ser vi hvordan køen Q vil bli seende ut etter 6 steg. Vi ser at steg 2 og steg 6 er helt like. Siden det ikke er andre stoppkriterier enn at Q skal være tom, noe den aldri blir, vil ikke algoritmen terminere. I [1] refereres det til [4]. Selv om det i [4] tillates negative kostnader c på kantene, så sies det også at det ikke kan være negative sykler i grafen, og at det er negative sykler som gjør at ikke algoritmen terminerer. Å holde orden på to køer krever litt mer testing og operasjoner i hver iterasjon, så algoritmen i [4] vil være raskere enn min implementasjon for grafer som ikke inneholder negative sykler. Ettersom vi vet fra teorem 2 at Ford-Bellmans algoritme finner den rettede veien med minimum kostnad fra r til v for alle v V, eller påviser at det finnes en rettet sykel med negativ kostnad, trenger jeg bare å vise at algoritmen i figur 3.11 går igjennom alle kantene som trengs i hvert steg. Eller sagt på en annen måte; det må vises at de kantene som ikke blir gjennomgått ikke trenger å bli sjekket. Ford-Bellmans algoritme, slik den er beskrevet i figur 3.10, går igjennom alle kantene i hvert steg. Hvis man heller bruker skanning av noder, så skal alle nodene skannes hver gang. Men siden man bare trenger å skanne en node v dersom y v har blitt senket siden sist gang det ble skannet noder er dette litt tungvint. Derfor legges alle noder som skal bli skannet neste gang i køen Q2. Så hver gang man skulle gått igjennom alle nodene i V trenger man bare å gå igjennom nodene som ble lagt til Q2. Ettersom man bare trenger å gå igjennom n 1 ganger for å finne et tillatt potensiale, skal det ikke bli gjort noen forandringer på y når vi går igjennom for n te gang. Dermed skal det ikke legges noen noder til Q2. Hvis det er noder som fortsatt må skannes når i = n må det derfor finnes en negativ sykel. Av dette kan det formuleres følgende teorem :

30 20 Teoretisk gjennomgang av algoritmene Teorem 3. Ford-Bellmans algoritme med skanning av noder, som i figur 3.11, finner den rettede veien med minimum kostnad fra r til v for alle v V (hvis i<nved terminering), eller den påviser at det finnes en rettet sykel med negativ kostnad (hvis i = n ved terminering) Dijkstras Algoritme Et spesialtilfelle av korteste vei problemet er når alle kostnadene c e 0. Mange problemer som har med korteste vei å gjøre kan beskrives med kostnader som er større eller lik 0. Det viser seg at det er nok å skanne alle nodene en gang, men at det er rekkefølgen man skanner nodene i som har noe å si her. Dersom v 1,v 2,...,v i har blitt skannet, skal den neste noden v i+1 som blir valgt være den noden v, som ikke er skannet og har den minste y v. Alle nodene legges fra starten av i S = V,og etterhvert som en node blir skannet blir den fjernet fra S. Man skal legge merke til følgende når noden som blir skannet er valgt på denne måten. Preposisjon 3.5. For hver w V,lay w være verdien til y w når w skal bli skannet. Hvis u er skannet før v, daery u y v. Bevis. Anta at y v<y uog la v være den noden som tidligst ble skannet som dette er sant. Når u ble valgt til å bli skannet var y u = y u y v, så y v ble senket til en verdi mindre enn y u etter at u ble valgt til å bli skannet, men før v ble valgt. Så y v ble senket når en node w ble skannet, og den ble satt til y w + c wv.nårvble valgt var y w y u og siden c wv 0formanaty v y u,enmotsigelse. Videre kan man se at en kant vw tilfredstiller et tillatt potensiale hvis w har blitt skannet allerede. Når v blir skannet og w har blitt skannet før, vet vi fra preposisjon 3.5 at y v y w. Dermed trenges det bare å sjekke om y v + c vw y w når w S. Algoritmenblirdasomifigur3.13. Mengden L v,derv V, er alle kanter med hale i v. Det viser seg at algoritmen bare går igjennom kantene en gang, og man skulle tro at det ikke ble mer enn m steg. Men for hver gang det skal skannes en node må man finne den noden v S som har y v minimum. Det viser seg at dette ikke er så enkelt som først antatt. Når S =kmå man gjøre k 1 sammenlikninger og n 1+n 2+ +1=O(n 2 ) sammenlikninger i alt. Så kjøretiden blir O(n 2 ). Dette er ganske mye bedre enn Ford-Bellmans algoritme som har en kjøretid på O(mn). Merkatmsom regel er mye større enn n. I en komplett graf er m = n 2.

31 3.3 Maksimum strøm i nettverk 21 Dijkstras Algoritme Sett y v = og p(v) = 1forv V\r og y r = 0og p(r) = 0; Sett S = V ; Så lenge S Velg v S med y v minimum; Slett v fra S; For vw L v og w S Hvis vw ikke tilfredstiller et tillatt potensial Rett på y w ; Figur 3.13: Dijkstras Algoritme 3.3 Maksimum strøm i nettverk Anta at det skal kjøre så mange lastebiler som mulig fra et sted r ietgatenettverk til et annet sted s. Forhvergateeer det en øvre grense u e på hvor mange lastebiler som kan bruke e. Dette problemet kan formuleres i en rettet graf G. Målet er da å prøve å finne en familie (P 1,...,P k ),derp i er en rettet (r, s)-vei. Disse veiene trenger ikke være forskjellige. To eller flere lastebiler kan kjøre samme vei hvis det ikke bryter med kapasiteten på noen av kantene. Ønsket er derfor å maksimere k. Begrensingen, eller kapasiteten u e vil i dette eksemplet være heltallig. Algoritmen tilpasset kapasiteter u som er heltallige. En årsak til dette er at i praktiske problemer finnes ofte tall som kan gjøres om til heltallige ved å justere de litt. Vi kan anta at G er simpel, siden strømmen i en løkke er 0 og to parallelle kanter e 1 og e 2 kan skrives som en kant e med u e = u e1 + u e2. Som regel kalles noden r for kilde og s for sluk. Det renner en strøm fra kilden til sluket. Det er klart at det som blir sendt fra kilden skal komme til sluket. Det kreves derfor at strømmen x inn til nodene skal være lik strømmen ut av nodene for alle v V \{r,s. Med strømmen x menes at hver kant e sender strømmen x e. Man sier derfor at vi har en (r, s)-strøm med verdi k. Vi definerer funksjonen f x (v) = wv E x wv vw E x vw, (3.2) som strømmen inn til v. Man sier derfor at f x (s) er verdien til x. Det er også klart at f x (r ) = f x (s), siden alt som sendes ut av r skal inn til s.

32 22 Teoretisk gjennomgang av algoritmene Å maksimere strømmen x er derfor det samme som å maksimere f x (s). Faktisk så kan en heltallig strøm x deles opp i en familie av veier. Preposisjon 3.6. Det eksisterer en familie (P 1,...,P k ) av rettede (r, s)- veier slik at {i : P i bruker e u e for alle e E hvis og bare hvis det eksisterer en heltallig tillatt (r, s)-strøm med verdi k. Bevis. Bevis kan leses i [1] Det vil være mest naturlig å tenke at en (r, s)-strøm x er optimal hvis man ikke kan finne en vei P der x e <u e for alle e P. Dette er derimot ikke tilstrekkelig. I figur 3.14 ser du en tillatt strøm med verdi 2. Der er v A = r og v F = s. Her kan man ikke finne en rettet vei P fra r til s med x e <u e for alle e P, men strømmen er allikevel ikke optimal. Istedenfor å lete etter en rettet vei hvor strømmen er mindre en Figur 3.14: Lovlig strøm med verdi 2. kapasiteten ser vi heller etter en vei P hvor x kan økes. Vi leter etter en (r, s)-vei P der x e <u e hvis e er forover i P og x e > 0hviseer bakover i P. EnslikveiPblir kalt en x-økende eller en strøm-økende vei.hvisvi kan finne en slik vei P kan strømmen x økes med ɛ på kantene som er forover i P og minkes med ɛ på kantene som er bakover i P. ɛ er her gitt ved ɛ = min(ɛ 1,ɛ 2 ),der ɛ 1 = min(u e x e : e forover i P) og (3.3) ɛ 2 = min(x e : e bakover i P). Det viser seg faktisk at strømmen x er optimal dersom det ikke eksisterer noen x-økende (r, s)-vei. Jeg skal nå gå nærmere inn på hvor begrensningen i en (r, s)-strøm ligger.

33 3.3 Maksimum strøm i nettverk Minimum kutt Begrensningen til x ligger i u. Påenkantemå x e u e. På noen kanter e E så må x e = u e, hvis ikke så kunne man øke strømmen til dette skjedde. Vi kaller en mengde δ(r) ={vw : vw E,v R, w R for en R V for et kutt. Legg merke til at δ og kutt blir definert på en litt forskjellig måte for rettede grafer enn det blir for en en urettet graf som på side 11. I figur 3.15 ser vi en strøm med f x (v I ) = 7. v I er sluket, mensv B er kilden. Begrensingen til x ligger i de røde kantene som utgjør minimum kutt. R er her lik {v B,v A,v C,v F,v D,v E og δ(r) = {e FH,e DH,e EG. Legg merke til at e GD δ(r). Mengden R er gitt ved V \R der R V. Det betyr at δ(r) er alle kanter som går inn til R. I figur 3.15 er δ(r) ={e GD. Figur 3.15: Minimum kutt i rettet graf. Her er R ={v B,v A,v C,v F,v D,v E og δ(r) er da de røde kantene Et (r, s)-kutt er et kutt hvor r R og s R. Det er klart at strømmen fra r til s ikke kan overstige kapasiteten til et (r, s)-kutt. Utfra dette kan vi formulere følgende preposisjon: Preposisjon 3.7. For enhver lovlig (r, s)-strøm x og ethvert (r, s)-kutt δ(r) har vi at f x (s) u e. e δ(r) Dersom man kan finne et (r, s)-kutt med samme verdi som en (r, s)- strøm, vet vi at vi har maksimum strøm og minmum kutt. Det viser seg at for enhver lovlig maksimum (r, s)-strøm eksisterer det et tilsvarende (r, s)-kutt med samme verdi. Dette fører oss fram til maksimum strøm minimum kutt teoremet.

34 24 Teoretisk gjennomgang av algoritmene Teorem 4. (Maksimum strøm Minimum kutt teoremet) Hvis det er en maksimum (r, s)-strøm, da er maks{f x (s) : x en lovlig (r, s) strøm = min{u(δ(r)) : δ(r) et (r, s) kutt. Bevis. Bevis kan leses i [1] og [2]. Preposisjon 3.8. Hvis x er en lovlig (r, s)-strøm og δ(r) er et (r, s)-kutt, da er x maksimum og δ(r) er minimum hvis og bare hvis x e = u e, for alle e δ(r) og x e = 0, for alle e δ(r). (3.4) Bevis. Bevis kan leses i [1]. side Økende vei algoritmen Å finne x-økende veier i G vil vise seg å være nok til å finne en algoritme som løser maksimum strøm minimum kutt problemet effektivt. Man begynner med en tillatt strøm x (x = 0 er en tillatt strøm) og leter etter x-økende veier. Finner man en x-økende vei P øker man x med ɛ, gitt ved (3.3). Vi kaller ɛ for x-bredden til P. Dersomx-bredden til en vei er finnes det ingen maksimal strøm, eller vi sier at den er ubegrenset. Strømmen x er maksimal hvis det ikke finnes noen x-økende vei P fra r til s og mengden R ={v: det eksisterer en x-økende vei fra r til v lager et minimum kutt. Vi trenger her en metode på hvordan vi skal finne en x-økende veier. Definerer en rettet hjelpegraf G(x), som avhenger av G, u, og nåværende strøm x, somfølgende;lav(g(x)) = V og putt vw E(G(x)) hvis og bare hvis vw E og x vw < u vw eller wv E og x wv > 0. Begge disse tilfellene kan oppstå, og det blir derfor nødvendig å legge inn to parallelle kanter vw til E(G(x)). Siden det kan være parallelle kanter i hjelpegrafen G(x) er det vanskelig å tegne den. Jeg vil heller vise den x-økende veien i G. I figur 3.16 ser vi en hjelpegraf G(x), lagetutfra strømmen i figur Dersom det finnes en rettet (r, s)-vei P i G(x) finnes det også en x-økende vei P i G. Vi kan i figur 3.16 se at det finnes en rettet (r, s)-vei P. Veien P går igjennom nodene i denne rekkefølgen: {A, C, D, B, E, F. Vi kan øke strømmen x langs P med 1. Som man kan se på figur 3.16, så er det noen kanter som står med negativ strøm og at

35 3.3 Maksimum strøm i nettverk 25 Figur 3.16: Hjelpegraf kapasiteten er 0 (kanten DB har x DB = 1ogu DB = 0). Dette er fordi den kanten DB G(x) tilsvarer er en kant BD G som har x BD > 0. Så at strømmen x DB G(x) er negativ, betyr at strømmen x BD på BD G kan minkes. Effektiviteten til algoritmen vil nå være avhengig av hvor mange ganger vi må lete etter x-økende veier. Uheldige valg av x-økende veier kan gjøre at algoritmen bruker veldig lang tid og at den ikke terminerer hvis strømmen kan være ubegrenset. Det viser seg derimot at det ikke skal store beregninger til for å unngå dette. Hvis man alltid velger den korteste x-økende veien P, det vil si den veien som bruker færrest kanter, vil man unngå disse problemene. Så ved å bruke korteste x-økende vei algoritmen, kan det bevises at maksimum strøm problemet kan løses på O(nm 2 ) tid. Det vil lønne seg å bruke et bredde først søk når man skal finne en korteste x-økende vei. Siden det i dette programmet ikke er hastighet som er viktigst, har jeg valgt Dijkstras algoritme isteden. Grunnen til dette er for å gjøre implementeringen av algoritmen enklere. I hjelpegrafen G(x) setter jeg alle kostnadene til 1, og bruker Dijkstras algoritme til å finne den korteste veien fra r til s. Det viser seg at problemet også lar seg løse dersom kapasitetene er rasjonelle tall og det finnes en maksimal strøm. Er det derimot irrasjonelle kapasiteter, kan det være at algoritmen ikke terminerer, eller som det ble vist i [3] kan den konvergere mot en strøm forskjellig fra maksimum.

36 26 Teoretisk gjennomgang av algoritmene Maksimum strøm algoritmen Algoritmen slik jeg har implementert den blir som i figur Jeg lager først en hjelpegraf,g(x), og bruker så Dijkstras algoritme til å finne korteste vei i G(x), før jeg øker strømmen langs denne veien i G. Maksimum strøm algoritmen Sett x e = 0 for alle e E; Så lenge det eksisterer en x-økende vei P fra r til s Øk strømmen langs kantene på P med min(ɛ 1,ɛ 2 ), der ɛ 1 = min(u e x e : e forover i P) og ɛ 2 = min(x e : e bakover i P); Figur 3.17: Maksimum strøm algoritmen Hvordan finne minimum kutt? Hvordan skal man finne minimum kuttet? Ettersom jeg bare er interessert i dette etter at jeg har funnet en maksimal (r, s)-strøm er ikke dette så vanskelig. Jeg velger å bygge ut R til alle kanter i e δ(r) har x e = u e og alle kanter e δ(r) har x e = 0. Det er det samme som og sette R lik {v V : det eksisterer en x-økende vei fra r til v. Vi har dermed en mengde δ(r) som utgjør et (r, s)-kutt. Fra preposisjon 3.8 vet man at dette er et minimum kutt. For å finne kantene i δ(r) kan man gå igjennom alle kantene vw E med v R. Dekantenevw E som da har x vw = u vw og w R utgjør δ(r). Algoritmen for å finne minimum kutt blir da som i figur Istedenfor å gå igjennom alle kantene vw E med v R går jeg bare gjennom de som har v R og x vw = u vw. Disse er lagret i C og jeg trenger da bare å sjekke at w R. 3.4 Minimum kostnad strøm i nettverk Minimum kostnad strøm i nettverk er en liten utvidelse av maksimum strøm problemet. Alle nodene har et behov b v.ennodev V med behov b v < 0 kan ses på som en node som produserer strøm. Tilsvarende

37 3.4 Minimum kostnad strøm i nettverk 27 Minimum kutt algoritme Legg r til R og Q; Så lenge Q Ta ut v fra Q; For alle vw, w E Hvis u vw = x vw Legg vw til C; Ellers Hvis w R Legg w til R og Q; For alle wv, w E Hvis x wv > 0ogw R Legg w til R og Q; For alle vw C Hvis w R Fjern vw fra C; Figur 3.18: Minimum kutt algoritme kan de nodene v V med b v > 0 ses på som noder som trenger strøm. For at regnestykket skal gå opp kreves det at summen av behovene skal være null, v V b v = 0. Jeg vil, som i de andre algoritmene jeg har gått igjennom, bare ta for meg heltallsproblemet. Anta at man har kraftstasjoner k K, derk V og b k < 0 som produserer strøm og enheter f F, derf V og b f > 0 som bruker strøm. For hver kraftlinje e har man en kostnad c e som sier noe om hvor mye det koster å sende strøm over denne kraftlinjen. Man har også en kapasitet u e på hver kraftlinje. Man ønsker å minimere kostnaden e E c e x e,der x e er strømmen som blir sendt gjennom kraftlinje e. Dette problemet blir et minimum kostnad strøm i nettverk problem. Det kan formuleres på følgende måte: Minimer e E c e x e (3.5) Slik at f x (v) = b v, for alle v V 0 x e u e for alle e E. I tillegg kan man merke seg at summen av behovene må bli 0, v V b v = 0, for at det skal kunne eksistere en lovlig strøm x.

38 28 Teoretisk gjennomgang av algoritmene Vi skal nå se på hvordan man kan finne en lovlig strøm x. Dette kan gjøres ved å bruke maksimum strøm algoritmen og ved at man endrer litt på grafen G. Forandringen går ut på å legge til to noder r og s. Til hver node v V som har b v < 0 legger man til en kant rv med kapasitet u rv = b v og til hver node w V som har b w 0 legger man til en kant ws med kapasitet u ws = b v. I figur 3.21 har vi lagt til to slike noder. Noden r er i den figuren blitt kalt G, mensser blitt kalt H. I den nye grafen man har fått ved å legge til to noder og tilhørende kanter bruker, man en maksimum strøm algoritme med r som kilde og s som sluk. Dersom maksimum strøm algoritmen finner en strøm med verdi f x (s) = u vs (3.6) vs E har man funnet en tillatt strøm for minimum kostnad strøm problemet. Dette illustreres i figur 3.22 og figur Videre for å finne en optimal strøm skal vi se på en algoritme ikke ulik den vi gikk igjennom for maksimum strøm. Istedenfor å snakke om en x-økende vei prøver man å finne en x-økende sykel. Målet er å finne en sykel S som minker den totale kostnaden e E c e x e ved at man øker strømmen i S. For at dette skal skje må S ha negativ c-kostnad. Til dette defineres en hjelpevariabel c e. { c ce hvis e er forover i S e = c e hvis e er bakover i S (3.7) S har negativ c-kostnad hvis c e < 0. (3.8) e S Hvis det finnes en slik sykel S kan strømmen økes med ɛ langs S. Her er ɛ gitt ved ɛ = min(ɛ 1,ɛ 2 ),der ɛ 1 = min(u e x e : e forover i S) og (3.9) ɛ 2 = min(x e : e bakover i S). Detvisiatmanøkerstrømmenx e til vi når kapasiteten u e i kantene som er forover i S eller til strømmen x e er 0 i kantene som er bakover i S. Men hvordan skal man finne slike sykler S? Svaret er å bruke nesten samme teknikk som vi brukte i maksimum strøm problemet. Vi lager en hjelpegraf G(x) (figur 3.24) på samme måte som det ble gjort i maksimum strøm algoritmen. La V(G(x)) = V og putt vw E(G(x)) med kostnad c vw = c vw hvis og bare hvis vw E og x vw <u vw.leggogsåvw til E(G(x)) med kostnad c vw = c wv for hver wv E med x wv > 0. I

39 3.4 Minimum kostnad strøm i nettverk 29 hjelpegrafen G(x) kan man så lete etter negative sykler. En negativ sykel i G(x) tilsvarer en sykel med negativ c-kostnad i G med ɛ>0. Vi har allerede sett på en algoritme som finner ut om det er en sykel med negativ kostnad i en graf, Ford-Bellmans Algoritme (se kap ). Ved å bruke Ford-Bellman vil man da finne en strømøkende sykel S med negativ kostnad i G. Vi kan da øke strømmen i S med ɛ, og få lavere kostnad. Dersom det ikke eksisterer noen strømøkende sykel S med negativ kostnad, og vi har en lovlig strøm, er det funnet optimal løsning x som gir oss minimum. Teorem 5. En lovlig løsning x av (3.5) er optimal hvis og bare hvis det ikke er noen x-økende sykel med negativ c-kostnad. Siden jeg bare ser på heltallige verdier i applikasjonen taes følgende teorem om heltallighet med. Teorem 6. Hvis b og u er heltallig og (3.5) har en optimal løsning, da har det en løsning som er heltallig. Bevis på teorem 5 og teorem 6 kan leses i [1]. Et problem med å finne x-økende sykler med negativ c-kostnad er at syklene som blir funnet er ugunstige. Det kan være at kostnaden synker lite per sykel som blir funnet, noe som teoretisk kan gjøre at man må finne mange sykler for å komme frem til optimal løsning. Når man leter etter x-økende sykler med negative c-kostnad kan man være uheldig i hvilke man plukker ut. I visse eksempler vil dette føre til at man må finne så mange at algoritmen vil være uakseptabelt treg. Det finnes strategier på hvordan man kan løse dette problemet. Jeg har ikke tatt hensyn til dette, da problemene som løses her er så små at det ikke vil være noe problem. Måter å løse dette problemet på er å lete etter x-økende sykler med negativ c-kostnad som har gjennomsnittlig kantkostnaden lav. Mer om dette og bevis finnes i [5]. Selv om man finner effektive måter å finne x-økende sykler med negativ c-kostnad er dette ikke en algoritme som blir brukt i praksis. Den mest brukte er Simplex Metoden for Nettverk. Vi skal ikke gå igjennom den her, men det kan leses om denne i [1] og [2]. Algoritmen slik den er implementert her, blir da som i figur Det blir brukt maksimum strøm i nettverk til å finne en lovlig strøm x, ogford- Bellmans algoritme blir brukt til å finne x-økende sykler med negativ c-kostnad.

40 30 Teoretisk gjennomgang av algoritmene Minimum kostnad strøm algoritme Finn en lovlig strøm x; Så lenge det eksisterer en x-økende sykel S med negativ kostnad Øk strømmen i S med min(ɛ 1,ɛ 2 ); der ɛ 1 = min(u e x e : e forover i S) og ɛ 2 = min(x e : e bakover i S); Figur 3.19: Minimum kostnad strøm algoritme Figur 3.20: Et minimum kostnad strøm problem. Her kan man lese av behovet til nodene og kostnad, strøm og kapasitet til kantene. Figur 3.21: Problemet i figur 3.20 gjort om til et maks strøm problem for å finne en lovlig strøm.

41 3.4 Minimum kostnad strøm i nettverk 31 Figur 3.22: De røde kantene viser minimum kutt. Legg merke til at strømmen i alle kantene som ble lagt til grafen har strøm som er lik kapasiteten. Figur 3.23: Slik blir den lovlige strømmen når vi ser på minimum kostnad problemet. Figur 3.24: Lager hjelpegraf av figur Her finner vi en negativ sykel.

42 32 Teoretisk gjennomgang av algoritmene Figur 3.25: Øker strømmen med 1 i sykelen med negativ c-kostnad som er funnet og finner optimal løsning på minimum kostnad strøm problemet.

43 Kapittel 4 Brukerveiledning Dette kapittelet går igjennom hvordan man skal bruke og installere applikasjonen. Først vil det være en kort forklaring for de som ikke vil lese hele kapittelet. Deretter kommer en mer grundig gjennomgang av de forskjellige funksjonene applikasjonen har. Til slutt kommer det en forklaring på hvordan man installerer og kjører applikasjonen. 4.1 Kort forklaring av applikasjonen Når applikasjonen er startet kan man begynne å lage grafer. Dersom det er lest en graf fra fil når applikasjonen er startet, og man vil lage sin egen graf går man på menyen og velger File New Graph. Vinduet vil da bli blankt, og man kan begynne å lage en graf. De andre grafene vil ikke bli borte av dette, men kan hentes tilbake ved å gå til menyen Graph. Å lage nye noder gjøres ved å klikke der man vi ha dem. For å lage en kant mellom to noder kikker du først på den noden du vil at kanten skal ha som hale, deretter på noden du vil ha som hode. Kanten vil da bli laget med avstanden mellom nodene i piksler som kostnad. Når man lager en ny graf er denne i utgangspunktet rettet. Dersom man vil endre denne grafen slik at den blir urettet, klikker man på Undirected -knappen. Å flytte på noder er enkelt. Man klikker på en node og hold museknappen nede. Noden vil da følge muse-markørens bevegelser og bli plassert der man slipper museknappen. På samme måten som man flytter en node

44 34 Brukerveiledning kan man slette den. Flytt den bare til søppelkassa, og den vil bli slettet. Alle kantene som er inntil noden vil også bli slettet. Det samme gjøres med kanter, men disse følger ikke muse-markørens bevegelser. Under View menyen kan man velge hva som skal vises av informasjon om grafen. Merk av ved de variablene man vil se, og disse vil komme opp ved siden av nodene og kantene. For å redigere de forskjellige verdien som kantene og noden har, går man på menyen Edit. Her vil man få opp et eget vindu til å redigere variablene til kantene og nodene. Å starte en algoritme gjøres ved å velge den man vil kjøre fra menyen Algorithms. Hvis Step -knappen da er aktiv skal man klikke på den for å gå et steg vider i algoritmen. På noen algoritmer må man velge en startnode, men da vil man få beskjed om dette i meldingsvinduet. Når dette er gjort vil Step -knappen være aktiv. Dersom man ikke ønsker å se hele algoritmen kjøre trinnvis, kan man klikke på Finish. Dette tilsvarer og klikke på Step med en pause gitt ved scrollbaren. Står den på 0 kjører algoritmen på maksimal fart. 4.2 Redigering av noder og kanter Applikasjonen er laget for at det skal være lett å redigere grafer. Det finnes ingen vanskelige kommandoer, og alt kan gjøres ved å bruke musa. Venstre knapp på musa styrer alt, så det ikke er nødvendig å bruke noen av de andre knappene. Lage nye noder og kanter Noder lages ved at man klikker der man vil ha noden plassert. Det vil da lages en ny node med et unikt navn. Den første noden som opprettes vil få navnet A. Neste node vil få navnet B. Når man kommer til Z vil den neste noden få navnet AA og deretter AB. Slik fortsetter det til ZZ. Høyeste antall navn som kan genereres er 26 2 = 676. Grunnen til dette er at applikasjonen ikke er ment til å løse store problemer. Alle algoritmene er programmert med hensyn på at de skal være lette å forstå, og at man skal kunne lære av de. Ikke først og fremst for at de skal være raske. Nå er ikke 676 noder mye hvis man begynner og se på

45 4.2 Redigering av noder og kanter 35 problemer som dukker opp i vanlige grafproblemer. Men applikasjonen vil på grunn av at den tegner hele grafen hver gang man rører på noe, eller går et steg i en algoritme, da gå sakte og ha problemer med å tegne opp grafen uten at det flimrer mye. På den annen side er det ikke så mye som skal til for å unngå dette problemet. Navnet til noden blir lagret som en tekst streng. Hvis man genererer filen fra et annet problem man har liggende, så lar man bare være å navngi nodene som er lik de som applikasjonen lager. Hvis man vil sette andre navn enn de som blir gitt, er det viktig at man ikke bruker -. Dette vil gi feil når applikasjonen skal lese fra fil. Tegnet - brukes som skilletegn mellom navnene på noder som en kant går mellom. En kant med hale i A og hode i B vil skrives som A-B (Se også fig. 4.5). For å lage en ny kant klikker man på den noden man vil at kanten skal ha hale i så denne blir merket av med et gult omriss som i figur 4.2. Deretter klikker man på den noden som kanten skal ha hode i. Kanten vil da bli opprettet, og kostnaden på kanten vil bli satt euklidsk. Begrensning og strøm i kanten vil bli satt til null. Hvordan man endrer disse verdiene står beskrevet i kapittel Figur 4.1: En merket kant Figur 4.2: En merket node Sletting av noder og kanter Å fjerne noder og kanter gjøres også ved å klikke og dra med venstre muse knapp. Klikk på noden/kanten du vil ha fjernet og dra denne over til søppelbøtta. Alle kantene som er inntil en node som blir fjernet vil da

46 36 Brukerveiledning også bli fjernet. Nodene vil alltid følge musemarkøren når du drar den rundt. En kant derimot vil ikke røre seg selv om man prøver å dra den over til søppelbøtta. Den vil bare vises som markert (fig. 4.1), men den vil bli borte når du slipper museknappen over søppelbøtta (fig. 4.3). Figur 4.3: Søppelbøtta man drar en kant eller node over til for å slette Sette kostnader på kanter og noder For at applikasjonen skal kunne brukes til læring, er det viktig at det skal være lett å endre de forskjellige variablene til en kant/node. Når man lager en node får den automatisk et behov på 0, mens kantene får 0 i strøm, 0 i kapasitet og kostnaden settes euklidsk utfra avstanden mellom nodene. Denne regnes ut fra hvor mange piksler det er imellom sentrum av nodene som ligger inntil kanten. Alle verdiene til både kanter og noder er lagret som heltall. For å forandre på verdiene kan man gjøre dette ved å gå til Edit på menyen og så velge Edges eller Vertexes. Man vil da få opp et nytt vindu som i figur 4.4, hvor kantene eller nodene står listet opp med sine verdier. Det er bare plass til 10 noder/kanter på et vindu, men ved å trykke på knappen next vil de 10 neste komme opp. Hvordan definere en graf i en fil Å redigere eller lage nye grafer kan også gjøres ved å definere noder og kanter i en fil med en teksteditor. Dersom man velger å gjøre det på denne måten må man være svært nøyaktig med tanke på syntaks. Særlig hvis man skal lage nye grafer er ikke dette å anbefale. Det vil da være lett å få feil i filen. Testene som blir generert når applikasjonen leser fra fil vil ikke være nok til å sjekke om det er gjort noen feil. I de fleste tilfellene hvor applikasjonen finner feil vil den avslutte. Dersom man ønsker å redigere rett i filen så er formatet som vist i figur 4.5. Her er alle blanke tegn byttet ut med. Dersom det finnes et bakgrunnsbilde til grafen vil det stå IMAGE: og deretter hvor bildet ligger. Nodene ligger

47 4.3 GUI funksjonene 37 Figur 4.4: Vinduene for å redigere verdiene til kantene og nodene under ordet VERTEXES: med en node per linje. Først kommer navn, så x- koordinat, y koordinat og til slutt behovet til noden. Under EDGES: skal alle kantene ligge. Som nodene er det en kant per linje. Først står hvilke noder kanten går mellom, så kostnad, kapasitet og til slutt strømmen i kanten. 4.3 GUI funksjonene Applikasjonen bruker GUI (Graphical User Interface) til interaksjon med bruker. Det blir brukt menyer til å velge mellom de forskjellige funksjonene som finnes. Videre følger en grundigere forklaring av de forskjellige delene av applikasjonens GUI.

48 38 Brukerveiledning IMAGE:/hom/larsd/www_docs/graf/byen.gif VERTEXES: A B C D F EDGES: B-A A-D D-F F-C B-C Figur 4.5: Filen man redigerer i Menyene Applikasjonen bruker menyer til å velge blant de forskjellige funksjonene den har å tilby. Under File (figur 4.6) finnes funksjonene som tar for seg lesing fra og skriving til fil, oppretting av nye grafer, å legge til bakgrunnsbilde og muligheten til å fjerne dette bildet om ønskelig. Det er verdt å legge merke til at en graf som blir lagret med bakgrunnsbilde blir lagret med en peker til dette bildet. Når filen blir åpnet neste gang vil bakgrunnsbildet automatisk legge seg på. Bildet blir ikke lagret for seg selv, så dette forutsetter at bakgrunnsbildet ikke er flyttet på i mellomtiden. Hvis applikasjonen blir kjørt som en applet så medfører dette Figur 4.6: File -menyen at noen av funksjonene under File ikke kan kjøres. Å skrive til, og lese lokalt på maskinen er ikke tillatt 1. De funksjonene som er fjernet fra appleten er: 1 Mer om sikkerhet om applets kan lese på

49 4.3 GUI funksjonene 39 Open File Load background image Save Save as Dette fører til at File -menyen blir som i figur 4.7. Legg merke til at det går an å fjerne bakgrunnsbilder, men ikke legge nye til. Dersom en graf som er lastet inn har bakgrunnsbilde og dette blir fjernet, kan man ikke hente det inn igjen uten å starte appleten på nytt. Figur 4.7: File -menyen i en applet Menyen Graph (se figur 4.8) er laget så man lettere kan navigere mellom de forskjellige grafene man har lest fra fil eller opprettet. Når man velger File New Graph på menyen vil det bli laget ett nytt menyelement under Graph. Dette vil få navnet untitled-1, dersom dette ikke eksistere fra før av. Da vil grafen få navnet untitled-2. Slik vil applikasjonen telle oppover hver gang man velger File New Graph fra menyen. Meningen med denne funksjonen er at applikasjonen skal tillate bruker å ha så mange grafer oppe som ønskelig. Man kan gå på Graph og velge den grafen man vil skal være aktiv. For å forandre navnet fra untitled-1 må man lagre grafen. Ved å gå til File Save as på menyen, vil navnet skifte fra untitled-1 til det navnet man lagrer grafen under. Hvis applikasjonen er en applet kan det legges ut noen grafer som vil leses hver gang. Det vil stå mer om applets i kapittel 4.5. Algoritmene som applikasjonen kan kjøre ligger under menyen Algorithms (se figur 4.9). Disse er delt opp i henhold til de problemene de løser. For å finne minimum spenntre kan man velge mellom to algoritmer, Prims og Kruskals. For å finne korteste vei finnes Dijkstras og Ford-Bellmans algoritmer til dette. Hvor mye informasjon man vil se om grafen velges fra View -menyen (se figur 4.10). Denne er laget slik at man merker av informasjonen man

50 40 Brukerveiledning Figur 4.8: Graph -menyen Figur 4.9: Algorithms -menyen Figur 4.10: View -menyen vil se. For å fjerne denne informasjonen går man tilbake til menyen igjen og tar bort merkene man har satt. Under menyen Edit (se figur 4.11) kan man gå for å få frem redigeringsboksene for nodene og kantene. Disse kan det leses mer om i kapittel Figur 4.11: Edit -menyen

51 4.3 GUI funksjonene Meldingsvinduet Meldingsvinduet viser informasjon om hva som skjer underveis når en algoritme kjøres. Figur 4.12 viser et skjermbilde av applikasjonen. Det nederste grå feltet er meldingsvinduet. Istedenfor at det skal poppe opp bokser man må klikke OK på hele tiden, blir informasjonen her vist i meldingsvinduet. Når en fil blir lagret eller det blir lest fra fil, kommer det informasjon om dette i meldingsvinduet. Figur 4.12: Skjermbilde av applikasjonen

52 42 Brukerveiledning Knappenes funksjoner ved kjøring av en algoritme Knappene som brukes når en algoritme kjøres er Step og Finish. Step -knappen gjør slik at algoritmen går et steg videre i algoritmen og viser hva som skjer. Man får samtidig informasjon om det som skjer i meldingsvinduet. Finish velges dersom man vil at algoritmen skal kjøre trinnvis av seg selv til den avsluttes. Resultatet vil bli det samme som å klikke på Step, og man har en scrollbar hvor man kan velge hvor fort algoritmen skal traversere grafen. I figur 4.13 er tiden mellom hvert steg en algoritme kan ta 1000 millisekunder eller ett sekund. Ved å flytte på scrollbaren vil man kunne velge hvor lang tid algoritmen skal bruke på hvert steg. Maksimal tid er 5 sekunder og minimal tid er 0 sekunder. Når man setter på 0 sekunder og klikker på Finish vil algoritmen kjøre igjennom så fort den kan. Dette vil ikke være spesielt raskt, da den i hvert steg skriver ut meldinger til meldingsvinduet og tegner opp grafen hver gang. At grafen blir tegnet opp hver gang når forsinkelsen er satt til 0 fører til at grafen flimrer litt. Ettersom størrelsen på problemene er små, så går dette likevel så fort at det ikke kan sees på som noe problem. Legg merke til at i figur 4.13 er menyene Graph, Algorithm og Edit satt ut av funksjon, samt Directed knappen. Dette er gjort for at bruker ikke skal kunne redigere grafen når den kjører en algoritme. Applikasjonen blir dermed mer stabil. Å flytte noder rundt er fortsatt mulig, men det går ikke an å lage nye kanter og noder underveis når en algoritme kjøres Valg av rettet eller urettet graf Directed/Undirected knappen er laget slik at bruker kan velge om grafen skal være rettet eller urettet. Når det står Directed på knappen er grafen urettet, men et klikk vil gjøre den rettet. Teksten på knappen forandrer seg da til Undirected. Hvis en rettet graf har både kanten e AB og kanten e BA så vil man ved å klikke på Undirected seenkant.dette vil da være kanten e BA. Hvilken kant som skal vises avgjøres ved å sjekke navnet på nodene leksikografisk opp mot hverandre. Kanten som blir vist er den som går fra noden som kommer sist leksikografisk til den som kommer først. Den kanten som ikke blir vist blir ikke slettet fra grafen. Ved å trykke på Directed vil den komme frem igjen. Et lite problem med dette er når bruker ser på grafen urettet og sletter en kant. Dersom det ligger en skjult kant der vil denne komme frem og det vil se ut som om kanten ikke ble slettet.

53 4.4 Bakgrunnsbildet 43 Figur 4.13: Skjermbilde av applikasjonen når en algoritme kjøres. 4.4 Bakgrunnsbildet Bakgrunnsbildet er en funksjon som gjør det lettere å se hvordan noen av algoritmene kan brukes praktisk. Det siktes da spesielt til korteste vei algoritmene. Ved å legge inn et kart som bakgrunnsbilde, vil man kunne lage noder og kanter oppå kartet. Dersom man legger inn noder i kryssene og kanter langs veiene mellom nodene (kryssene), vil man kunne bruke korteste vei algoritmene til å finne korteste vei fra et sted på kartet til alle andre steder. I figur 4.14 har jeg gjort nettopp dette. En graf er lagt oppå et kartutsnitt av Oslo. Kostnaden til kantene blir generert euklidsk når de blir opprettet, slik at kostnadene på kantene skal være riktige i forhold til hverandre. Det er kjørt en korteste vei algoritme på grafen, med v J som startnode. Dette viser en av måtene

54 44 Brukerveiledning Figur 4.14: Graf med bakgrunnbildet. Viser korteste vei fra v J til alle de andre nodene. korteste vei algoritmen kan brukes i praksis. Legg merke til at dette er en rettet graf. Hvis en gate er enveiskjørt kan man derfor enkelt fjerne kanten som tilsvarer denne gaten på kartet. Et eksempel er mellom v L og v A, der det går en kant hvor gata er enveiskjørt. En graf med bakgrunnsbilde som blir lagret, vil når du henter frem filen igjen også ta med bakgrunnsbildet. Merk at det kun blir lagret en link til bildet. Dersom bildet blir flyttet på eller slettet, vil man ikke få noen

55 4.5 Å kjøre applikasjonen som en applet 45 feilmeldinger om dette når man åpner filen på nytt, og bildet vil heller ikke bli vist. I figur 4.5 på side 38 kan du se hvordan dette er gjort i filen som blir lagret. 4.5 Å kjøre applikasjonen som en applet Applikasjonen kan kjøres som en applet på en nettleser som har java installert. Dersom du vil lese mer om applets, er et besøk til å anbefale. Selv om dette fører til at applikasjonen mister noen av funksjonene sine, er dette en enkel måte å få testet den på. Funksjonene som den mister har med lesing og skriving til fil å gjøre. En applet har blant annet ikke tilgang på klientens harddisk, dermed får man ikke lagret eller hentet opp grafer man lager. En applet som er lagt ut kan godt lese grafer fra serveren som er definert på forhånd. Følgende eksempel viser hvordan applikasjonen kan lese inn noen filer når den kjøre som en applet. Koden under må legges inn på web-siden som skal starte applikasjonen som en applet. <applet code="graphapplet.class" archive="graf.jar" width=120 height=30> <param name="oslo" value=" <param name="oslo-bilde" value=" <param name="max-flow" value=" </applet> Her er alle class filene pakket i et JAR 2 arkiv. Dette fordi det skal ta mindre tid å laste ned appleten. I eksemplet over er det lagt inn to grafer, hvorav en med bakgrunnsbilde. Appleten leser taggene 3 param 2 Les mer om JAR på 3 Les mer om om HTML tagger på

56 46 Brukerveiledning med følgene kall som er gjort i konstruktøren 4 public GraphWindow (GraphApplet e): newgraph(new GraphMaker(this).readFromWeb("Oslo",e)); newgraph(new GraphMaker(this).readFromWeb("max-flow",e)); Når applikasjonen får beskjed om å lese en parameter, som Oslo ovenfor, prøver den å se om det også er en parameter som er lik, men med -bilde i tillegg. Slik blir parameteren Oslo-bilde lest, og den grafen får bakgrunnsbilde. 4.6 Installasjon av applikasjonen For å kjøre applikasjonen trenger man JRE 5 (Java Runtime Environment) versjon 1.1.x. Dette er den eldste versjonen som støtter applikasjonen. Nyere versjoner av JRE skal også være mulig å benytte siden Java skal være fullt bakoverkompatibelt. Denne er testet helt opp til J2RE 6 (Java 2 Runtime Environment) versjon Hvis man har dette installert kan man laste ned applikasjonen 7 ferdig kompilert, pakket i en JAR fil. Man må da starte appliksjonen ved kommandoen: >java -classpath graph.jar GraphWindow Dersom man vil kompilere opp applikasjonen selv, eller gjøre forandringer i koden, kan man laste ned alle java-filene og kompilere disse opp selv. Disse vil ligge pakket på larsd/graph/.du kan da velge mellom en zip fil eller tar gzip fil. Filen pakkes opp, og det vil da bli laget en mappe graph. Det er da bare og gå inn i den mappa å kompilere. Det gjøres ved kommandoen: >javac GraphWindow.java 4 Se tillegg A.20 for koden til GraphWindow. 5 Se mere info på 6 Se mere info på 7 Applikasjonen kan lastes ned på larsd/graph/.

57 4.6 Installasjon av applikasjonen 47 For å få kompilert må man minst ha JDK (Java Development Kit) versjon 1.1.x. Nyere versjoner fungerer også, og applikasjonen er kompilert opp til Java 2 SDK (Standard Development Kit) versjon Hvis kompileringen har gått bra starter man applikasjonen med: >java GraphWindow Dersom man er interessert i å gjøre forandringer eller legge til kode kan det være en fordel å bruke API en (Application Programming Interface) (se figur 4.15) til å lese hvordan applikasjonen er kodet. Mer om dette finnes på larsd/graph/api/.

58 48 Brukerveiledning Figur 4.15: Api

59 Kapittel 5 Applikasjonens gjennomgang av algoritmene Hvordan går applikasjonen igjennom algoritmene og hva blir visualisert? For å svare på dette blir stegene som hver algoritme tar forklart og vist ved hjelp av figurer. 5.1 Forklaring av algoritmene Under kjøring av algoritmene brukes det både farger og tekst for at bruker skal forstå hva som skjer. Det er fem grunnleggende farger som brukes. Grå er satt av til kanter og noder det ikke er gjort noe spesielt med. Før en algoritme starter skal alle kantene og nodene være grå. Denne fargen viser at algoritmen ikke har gjort noe med noden/kanten. Under kjøring av algoritmene har fargene som regel disse betydningene. Grå standard farge, det er ikke gjort noe med noden/kanten Gul denne kanten/noden er ikke en del av løsningen Rød denne kanten/noden er under testing Blå denne kanten/noden er med i løsningen Oransje har ulik betydning i de forskjellige algoritmene For å få en bedre forståelse av fargene blir det videre forklart hva fargene står for i hver enkelt algoritme.

60 50 Applikasjonens gjennomgang av algoritmene 5.2 Kruskals algoritme Kruskals algoritme finner MST hvis det finnes. Den bygger trinnvis ut en skog S til den har funnet et spenntre T (se kap for nærmere beskrivelse av Kruskals algoritme). Når man starter algoritmen vil først en kant bli rød. Dette er den kanten e E som har minst kostnad, det vil si c e c vw for alle vw E.Kanten evil deretter bli blå hvis den skal være med i skogen S. Hvis kanten gjør at S ikke lenger er en skog eller et spenntre, det vil si at den lager en sykel, så skal kanten bli gul for å markere at den ikke skal være med i spenntreet. Kort forklaring av fargene følger: Grå standard farge, det er ikke gjort noe med noden/kanten. Rød denne noden er under testing. Hvis den ikke lager en sykel skal den legges til MST. Gul denne kanten er ikke med i MST, da den ville ha laget en sykel. Blå denne kanten/noden er med i MST. Figur 5.1 viser at Kruskals algoritmen velger ut den første kanten som skal testes. Denne blir derfor rød så bruker kan se hvilken kant er. Det vil da komme opp et spørsmål i meldingsvinduet, som sier Will the edge E-C create a cycle?. Bruker kan da se hva som blir testet, og kan finne svaret. Et klikk på Step og man vil få svaret generert. I figur 5.2 ser man at kanten som ble testet i figur 5.1 er blitt blå, noe som tyder på at den skal være med i MST. Etter å ha gjentatt denne prosessen noen ganger har man fått bygd ut en skog som i figur 5.3. I figur 5.4 tester man om kanten e BD skal være med i skogen. Siden kanten blir gul i figur 5.5 ser man at den ville forårsaket en sykel, og kan dermed ikke være med i skogen. Når algoritmen er ferdig, som i figur 5.6, er de kantene som er med i spenntreet blå. De som ble testet og hadde laget en sykel er gule, og de som ikke ble testet er grå. Hvis det ikke finnes noe spenntre i grafen vil de blå kantene vise en skog der alle trærne i skogen har minimum kostnad. Det er ofte kalt en minimum kostnad skog. Den eneste grunnen til at det ikke finnes et spenntre er at grafen ikke er sammenhengende.

61 5.2 Kruskals algoritme 51 Figur 5.1: Kruskals algoritme velger ut en kant. Figur 5.2: Kanten skal være med i skogen og blir blå. Figur 5.3: Slik ser det ut når skogen har vokst.

62 52 Applikasjonens gjennomgang av algoritmene Figur 5.4: Tester om den røde kanten fortsatt gjør at dette er en skog. Figur 5.5: Kanten lager en sykel og blir markert med gult. Figur 5.6: Algoritmen har terminert og skogen har blitt til et tre. Den er blitt til et minimum spenntre.

63 5.3 Prims algoritme Prims algoritme Prims algoritme bygger ut et tre med en og en node til den har et spenntre. Den begynner med en node som bruker velger ut ved å klikke på den. En node er også et tre, så algoritmen har nå et startpunkt. Her er en kort forklaring av fargene som brukes. Grå standard farge, det er ikke gjort noe med noden/kanten Røde kanter er med i kuttet til treet. Oransje kant har minst kostnad av de som er i kuttet til treet. Gul kant er ikke med i MST, da den ville ha laget en sykel. Blå denne kanten/noden er med i MST. Treet T bygges ut til T har blitt et spenntre. En og en node legges til ved åsepådenkantene δ(t ) med minst kostnad, dvs c e c k, for alle k δ(t ). I figur 5.7 ser vi hvordan treet ser ut etter at 2 noder er lagt til. Nodene og kantene i treet T er markert med blått, mens kuttet δ(t ) er vist med rødt. Neste steg blir da å finne ut hvilken av kantene i δ(t ) som har minst kostnad. Denne kanten vises med oransje i figur 5.8. Noden v F blir dermed lagt til T og δ(t ) blir oppdatert i figur 5.9. Kanter som blir gule når algoritmen kjører skal skal ikke være med i treet T, og kommer ikke til å bli sett på mer. Figurene 5.10 og 5.11 viser at kanten e DG ikke kan være med i T siden c EG c DG. Hvis grafen er sammenhengende har T blitt et spenntre når algoritmen er ferdig. Da skal de kantene som ikke er med i T være gule, som i figur Ford-Bellmans algoritme Ford-Bellmans s algoritme finner korteste vei fra en node til alle andre noder, slik som de fleste korteste vei algoritmene gjør. Her velger man ut hvilken node man vil ha som startpunkt ved å klikke på noden. Etter dettte vil man se hvordan algoritmen utvikler seg. Fargene som er brukt har denne betyr følgende: Grå node det er ikke funnet noen vei til denne noden ennå.

64 54 Applikasjonens gjennomgang av algoritmene Figur 5.7: Prims algoritme etter at treet har 2 noder, her markert med blått. Kuttet til disse er merket med rødt. Figur 5.8: Algoritmen velger ut den kanten med minst kostnad fra kuttet og viser den i oransje. Figur 5.9: Har lagt til E og oppdatert kuttet.

65 5.4 Ford-Bellmans algoritme 55 Figur 5.10: Finner kanten i kuttet med minst kostnad. Figur 5.11: Har lagt til noden G og oppdatert kuttet. Den gule kantet skal ikke være med i MST. Figur 5.12: MST er funnet. De gule kantene er ikke med i MST, mens de i blått utgjør MST.

66 56 Applikasjonens gjennomgang av algoritmene Grå kant er ikke sett på (testet) ennå. Rød node skannes nå. Rød kant testesnå. Gul kant skal foreløpig ikke være med i korteste vei treet, men kan bli det senere. Blå node det er funnet en vei til denne noden. Blå kant er med i korteste vei til en eller flere noder. Algoritmen er implementert med skanning av noder (se kap , side 17) hvor den noden som blir skannet alltid er merket med rødt. I figur 5.15 er det v E som akkurat er begynt å bli skannet. Den kanten som potensialet blir sjekket på er rød, som kanten e BG i figur Dersom e BG tilfredstiller et tillatt potensiale skal det ikke gjøres noe med kanten, og den skal da ha fargen den hadde før den ble sjekket, hvis dette var gul eller blå. Var den grå, vil den bli blå hvis den er med i KVT, gul hvis den ikke er med. I figur 5.16 ser vi at e BG er blitt blå. Det betyr at denne er med i KVT nå. Ser vi på figur 5.17 så blir potensialet i kanten e ED sjekket. Siden den ikke tilfredstiller et tillatt potensiale blir dette oppdatert og e ED blir lagt til KVT som forgjengeren til v D. Da skal også den kanten som utgjorde forgjengeren til v D,kantene BD, bli gul siden den ikke er med i KVT mer. Etter at dette er gjort vil grafen se ut som i figur I figur 5.19 er algoritmen ferdig, og vi ser KVT markert med blått. Ford-Bellman s algoritme fungerer selv om det ikke eksistere en vei fra noden du starter med til alle andre noder. Den finner da korteste veien til alle de nodene det finnes en vei til. De nodene det finnes en vei til vil da være blå, mens de nodene det ikke eksisterer en vei til fra startnoden vil være grå. I figur 5.13 har man kjørt Ford-Bellman s algoritme med noden v A som startnode. Applikasjonen vil gi beskjed om at det ikke finnes en vei fra v A til alle nodene ved at den kommer med følgnede melding når den er ferdig : There exsists no path from A to all vertexses, but shortest path from A to all blue vertexes is found.. Dersom det eksisterer en negativ sykel i grafen vil Ford-Bellmans algoritme oppdage dette. Den vil da markere den negative sykelen med blått, mens resten av grafen er grå, som i figur Man vil da få beskjeden The graph has a negative cycle, and have no feasible solution! Showing negative cycle! i meldingsvinduet.

67 5.5 Dijkstras algoritme 57 Figur 5.13: Det eksistere ingen vei fra v A til v C,mendetfinnesenveifra v A til alle de blå nodene. Figur 5.14: Ford-Bellmans algoritem har funnet en negativ sykel. 5.5 Dijkstras algoritme Akkurat som Ford-Bellmans algoritme finner Dijkstras algoritme korteste vei fra en node til alle andre noder. Bruker velger først ut den noden som det skal finnes korteste vei fra ved å klikke på den. Det vil da komme opp et tall ved siden av denne hvor det står 0. Ved de andre nodene vil det stå inf. Inf står her for. Dette skal gjenspeile hvor langt det er fra startnoden til de forskjellige nodene. Eller rettere sagt, hvor langt algoritmen har funnet ut at det er. Når den starter har den bare funnet veien til seg selv, ergo er den 0, og de andre er det ikke funnet noen vei dermed er det uendelig langt. Dette vises i figur 5.20 der bare startnoden er merket. Fargene som blir brukt under kjøring av algoritmen har omtrent samme betydning som i Ford-Bellmans algoritme. De er listet opp her:

68 58 Applikasjonens gjennomgang av algoritmene Figur 5.15: Noden B blir skannet, og det sjekkes om potensialet i kanten e BG er tillatt. Figur 5.16: Potensialet i kanten e BG var ikke tillatt, det er nå oppdatert og kanten er med i korteste vei treet. Figur 5.17: Kanten e ED sjekkes om den tilfredstiller et tillatt potensiale.

69 5.5 Dijkstras algoritme 59 Figur 5.18: Siden kanten e ED er blitt med i korteste vei treet må forgjengeren kanten til noden D oppdateres. Det var e BD og den er her blitt gul. Figur 5.19: Slik ser KVT ut når Ford-Bellman s algoritme er ferdig. De blå kantene viser korteste vei fra v A til alle andre noder.

70 60 Applikasjonens gjennomgang av algoritmene Grå node det er ikke funnet noen vei til denne noden ennå. Grå kant er ikke sett på (testet). Rød node denne skannes nå. Rød kant denne testes nå. Gul kant har vært testet, og skal ikke være med i KVT. Blå node det er funnet en vei til denne noden. Blå kant er med i korteste vei til en eller flere noder. Noden er rød når den blir skannet. Da sjekkes det om alle utkantene fra noden tilfredstiller et tillatt potensiale. I figur 5.21 er det v D som skal bli skannet. Nodene v A,v B og v C er skannet fra før av. Når en ny node skal skannes får bruker beskjed om dette i meldingsvinduet. Der får man beskjeden: The vertex with the lowest potensial, who has not been scanned is D. The cost to get from A to D is Man vet også at når en node blir skannet, så vil ikke kostnaden til denne noden bli noe mindre. Man har dermed funnet korteste vei til denne noden. Imotsetning til Ford-Bellmans algoritme, vil en kant som er blitt tatt ut fra KVT (blitt gul) aldri bli tatt med i KVT (bli blå) igjen. En kant som er med i KVT under kjøring kan senere bli tatt vekk hvis det finnes en kortere vei til noden enn den som er foreløpig er funnet. I figur 5.22 ser vi at kanten e DG er med i KVT. Dette er før potensialet i kanten e EG er sjekket. Etter at dette er sjekket ser vi i figur 5.23 at e EG er med i KVT, mens e DG er blitt fjernet fra KVT. Som Ford-Bellmans algoritme finner Dijkstras algoritme den korteste veien til alle noder det finnes en vei til. Dersom det ikke eksisterer en vei til alle nodene vil man få beskjed om det ved denne meldingen: There exsists no path from A to all vertexses, but shortest path from A to all blue vertexes is found.. Siden fargene har samme betydning i Dijkstras og Ford-Bellmans algoritme vil grafen se likedan ut som i figur 5.13, men det vil i tillegg stå hvor langt det er til de nodene som man har funnet korteste vei til. 5.6 Maksimum strøm Minimum kutt algoritmen Maksimum strøm algoritmen skal finne maksimal strøm fra kildenoden til noden som er definert som sluket. Algoritmen begynner ved at bruker

71 5.6 Maksimum strøm Minimum kutt algoritmen 61 Figur 5.20: Startnoden v A er merket og avstanden til denne er 0. Til de andre nodene er det ikke funnet noen vei og det er dermed uendelig langt dit. Derfor står det inf ved siden. Figur 5.21: Noden v D blir skannet. Det er den som har lavest kostnad av de som ikke har blitt skannet. Figur 5.22: Kanten e DG er med i KVT. Dette er før potensialet i e EG er sjekket.

72 62 Applikasjonens gjennomgang av algoritmene Figur 5.23: Det er nå funnet en ny korteste vei til v G,oge EG er dens forgjenger. Dermed er e DG tatt vekk som forgjenger. Figur 5.24: Dijkstras algoritme er ferdig og har funnet korteste vei fra v A til alle de andre nodene.

73 5.6 Maksimum strøm Minimum kutt algoritmen 63 først klikker på den noden som skal være kilde og deretter på den som skal være sluk. Disse vil da bli merket med blått som i figur Fargene som brukes i maksimum strøm algoritmen er listet opp her: Grå kant strømmen i denne kanten er 0. Oransje kanter viser en strømøkende vei. Rød kant denne kanten viser begrensingen i en strømøkende vei Blå kant det går en strøm i denne kanten. Blå noder kilde og sluk. Etter å ha valgt kilde og sluk er strømmen nå satt til 0 på alle kanter. Dette er en lovlig strøm, og det er da bare å lete etter strømøkende veier. I figur 5.26 ser vi en strømøkende vei markert med oransje. Man får beskjeden The flow has increased with 1. The flow from A to B is now 1. i meldingsvinduet så man kan se hvor mye strømmen har øket langs denne veien. Ved neste klikk på step får man se hvilken kant som utgjør begrensingen i den strømøkende veien. Denne blir markert med rødt som i figur Dersom det er flere kanter som utgjør begrensingen, dvs at det er flere kanter hvor x e = u e, vil bare en av disse vises. Dette er den som er nærmest sluket. Her ser jeg i ettertid at denne burde ha markert alle kantene som utgjør begrensingen eller valgt den som ligger nærmest kilden. Intuitivt tenker man at strømmen går fra kilden til sluket, og at den dermed stopper i den første kanten man kommer til som har begrensing lik strøm. I figur 5.28 er det to kanter som har x e = u e. Men det er bare en av de som er oppgitt som begrensing. Strømøkende veier trenger ikke å være rettet. I figur 5.29 er en kant i veien fra v A til v B bakover. Strømmen blir økt i denne veien og man får den optimale løsningen som er vist i figur Beskjeden The flow is optimal! Maximum flow from A to B is 5. kommer også opp i meldingsvinduet for å informere bruker. Legg merke til at kanten e CE er blitt grå igjen i figur 5.30 etter at den var blå i figur Det er fordi strømmen i denne kanten er 0. Ettersom maksimal strøm er funnet vil nå et klikk på step vise minimum kutt. I figur 5.31 ser vi at minimum kutt er markert med røde kanter.

74 64 Applikasjonens gjennomgang av algoritmene Figur 5.25: Kilden og sluket er markert med blått. Strømmen er 0 fra v A til v B. Figur 5.26: Det er funnet en strømøkende vei fra v A til v B. Strømmen er økt med 1. Figur 5.27: Begrensingen i den strømøkende veien blir markert med rødt.

75 5.6 Maksimum strøm Minimum kutt algoritmen 65 Figur 5.28: En strømøkende vei der begrensingen ligger i to kanter, men det er bare en som er markert. Figur 5.29: En strømøkende vei fra v A til v B der kanten e CE er bakover. Figur 5.30: Maksimal strøm fra v A til v B. Legg merke til at kanten e CE nå er blitt grå, siden strømmen i den er blitt 0. gjort

76 66 Applikasjonens gjennomgang av algoritmene 5.7 Minimum kostnad strøm I minimum kost strøm algoritmen er det ganske mye som skjer mellom hver gang bruker klikker på step. For å finne en lovlig strøm oppretter den en hjelpegraf (se kap. 3.4) og bruker maksimum strøm algoritmen til å løse dette problemet. Dette skjer uten at bruker får se noe. Man får kun opp den lovlige strømmen som blir funnet dersom det eksisterer en. Når det så er funnet en lovlig strøm og man skal finne en strømøkende sykel med negativ kostnad, blir det laget en hjelpegraf som man kjører Ford-Bellmans algoritme på. Alt dette skjer i bakgrunnen, det vi si at bruker ikke får se hva som skjer. Bruker får bare se sykelen. Dette er fordi bruker først og fremst skal fokusere på hovedtrekkene i algoritmen. Etter at man har startet algoritmen blir strømmen x e satt til 0 i alle kantene. Dette skjer automatisk. Når man kjører minimum kost strøm algoritmen lønner det seg vise kostnad, strøm og kapasitet på kantene og behov på nodene. Det er fordi alle disse variablene blir brukt i algoritmen. De forskjellige fargene som blir brukt er grå, blå og oransje. Grå kant strømmen i denne kanten er 0. Blå kant det går en strøm i denne kanten. Oransje kanter viser en strømøkende sykel. Ved første klikk på step vil algoritmen prøve å finne en tillatt strøm. Dersom denne eksisterer får man beskjed om om dette i meldingsvinduet med beskjeden: We have found a feasible flow! The cost of the flow is 45.. Eksisterer det derimot ikke en lovlig strøm får man beskjed om dette. Summen av behovene til nodene må være 0, v V b v = 0, hvis det skal eksistere en tillatt strøm, og man får beskjed om dette ikke er tilfellet med meldingen There is no feasible flow in this graph because the demands does not add to 0!. Figur 5.32 viser et minimum kostnad strøm problem. Tallene som står ved siden av nodene viser behovet til denne noden, mens tallene som står ved en kant står for kostnad, strøm og kapasitet. Ved kanten e AG står det 1, 0, 4 som betyr at den har en kostnad c e = 1, strøm x e = 0og kapasiteten u e = 4. Når det er funnet en tillatt strøm får man i meldingsvinduet vite hva kostnaden på denne er. I figur 5.33 er det funnet en lovlig strøm til

77 5.7 Minimum kostnad strøm 67 minimum kostnad problemet i figur Verdien av denne er 45. Ved å klikke på step vil man få se en sykel med negativ kostnad markert med oransje som i figur Bruker får da beskjed i meldingsvinduet om hvor mye kostnaden er redusert og hva den nye kostnaden er. Kostnaden er redusert med 3 i figur Man får ikke noen beskjed om retningen sykelen har, så dette kan være vanskelig å se umiddelbart. Ved å legge sammen kostnadene på kantene i sykelen kan man finne ut hvilken vei den går. Man begynner en vei og legger til de kostnadene der kanten er forover og trekker fra de kostnadene på de kantene som er bakover. Dersom man kommer fram til et positivt tall har man gått feil vei, da er retningen motsatt av det du ar gått. I figur 5.34 er retningen mot klokka, det vil si at nodene kommer i rekkefølgen v A,v G,v H,v B. Begrensingen til sykelen ligger i kanten e GV, der har strømmen x GV økt til den har blitt lik kapasiteten u GV. Når algoritmen er ferdig vil alle kanter som har x e > 0 være blå, og de som har x e = 0 vil være grå som i figur 5.35.

78 68 Applikasjonens gjennomgang av algoritmene Figur 5.31: Minimum kutt vises på de røde kantene. Figur 5.32: Minimum kost strøm problem før det er begynt å sende noe strøm. Figur 5.33: Det er funnet en lovlig strøm på minimum-kost-strøm problemet.

IN Algoritmer og datastrukturer

IN Algoritmer og datastrukturer IN00 - Algoritmer og datastrukturer HØSTEN 08 Institutt for informatikk, Universitetet i Oslo Forelesning 5: Grafer II Ingrid Chieh Yu (Ifi, UiO) IN00 8.09.08 / Dagens plan: Korteste vei en-til-alle vektet

Detaljer

LP. Leksjon 9: Kapittel 13: Nettverk strøm problemer, forts.2

LP. Leksjon 9: Kapittel 13: Nettverk strøm problemer, forts.2 LP. Leksjon 9: Kapittel 13: Nettverk strøm problemer, forts.2 Vi tar siste runde om (MKS): minimum kost nettverk strøm problemet. Skal oppsummere algoritmen. Se på noen detaljer. Noen kombinatorisk anvendelser

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2016 Institutt for informatikk, Universitetet i Oslo Forelesning 6: Grafer II Ingrid Chieh Yu (Ifi, UiO) INF2220 28.09.2016 1 / 30 Dagens plan: Dijkstra fort.

Detaljer

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6

GRAFER. Noen grafdefinisjoner. Korteste vei i en uvektet graf V 2 V 1 V 5 V 3 V 4 V 6 IN Algoritmer og datastrukturer GRAER Dagens plan: Kort repetisjon om grafer Korteste, en-til-alle, for: uektede grafer (repetisjon) ektede rettede grafer uten negatie kanter (Dijkstra, kapittel 9..) ektede

Detaljer

Korteste vei i en vektet graf uten negative kanter

Korteste vei i en vektet graf uten negative kanter Dagens plan: IN - Algoritmer og datastrukturer HØSTEN 7 Institutt for informatikk, Universitetet i Oslo IN, forelesning 7: Grafer II Korteste vei, en-til-alle, for: Vektet rettet graf uten negative kanter

Detaljer

LP. Leksjon 7. Kapittel 13: Nettverk strøm problemer

LP. Leksjon 7. Kapittel 13: Nettverk strøm problemer LP. Leksjon 7. Kapittel 13: Nettverk strøm problemer Skal studere matematiske modeller for strøm i nettverk. Dette har anvendelser av typen fysiske nettverk: internet, vei, jernbane, fly, telekommunikasjon,

Detaljer

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen

Introduksjon. MAT1030 Diskret Matematikk. Introduksjon. En graf. Forelesning 22: Grafteori. Roger Antonsen MAT1030 Diskret Matematikk Forelesning 22: Grafteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo Introduksjon 21. april 2009 (Sist oppdatert: 2009-04-21 15:13) MAT1030 Diskret Matematikk

Detaljer

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf

Introduksjon. MAT1030 Diskret matematikk. Søkealgoritmer for grafer. En graf Introduksjon MAT13 Diskret matematikk Forelesning 21: Grafteori Roger Antonsen Matematisk Institutt, Universitetet i Oslo 9. april 28 Vi skal nå over til kapittel 1 & grafteori. Grafer fins overalt rundt

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 21: Grafteori Roger Antonsen Matematisk Institutt, Universitetet i Oslo 9. april 2008 Introduksjon Vi skal nå over til kapittel 10 & grafteori. Grafer fins overalt

Detaljer

MAT1030 Forelesning 22

MAT1030 Forelesning 22 MAT1030 Forelesning 22 Grafteori Roger Antonsen - 21. april 2009 (Sist oppdatert: 2009-04-21 15:13) Introduksjon Introduksjon Vi skal nå over til kapittel 10 & grafteori. Grafer fins overalt rundt oss!

Detaljer

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær IN Algoritmer og datastrukturer GRAER IN Algoritmer og datastrukturer Dagens plan: orteste vei, en-til-alle, for: ektet rettet graf uten negative kanter (apittel 9..) (Dijkstras algoritme) ektet rettet

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 25: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo 27. april 2010 (Sist oppdatert: 2010-04-27 14:15) Forelesning 25 MAT1030 Diskret Matematikk 27. april

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 29: Kompleksitetsteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo 13. mai 2009 (Sist oppdatert: 2009-05-17 22:38) Forelesning 29: Kompleksitetsteori

Detaljer

Forelesning 29: Kompleksitetsteori

Forelesning 29: Kompleksitetsteori MAT1030 Diskret Matematikk Forelesning 29: Kompleksitetsteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo Forelesning 29: Kompleksitetsteori 13. mai 2009 (Sist oppdatert: 2009-05-17

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2016 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 5: Grafer I Ingrid Chieh Yu (Ifi, UiO) INF2220 H2016, forelesning 5 1 / 49

Detaljer

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland

Teoriøving 7 + litt om Ford-Fulkerson. Magnus Lie Hetland Teoriøving 7 + litt om Ford-Fulkerson Magnus Lie Hetland Oppgave 1 a s 7 t 3 x 4 2 2 8 2 u 6 v 3 w Bruk DIJKSTRA eller BELLMAN-FORD og finn minste avstand fra s til de andre nodene. Svar/utregning (DIJKSTRA):

Detaljer

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper

Kombinatorikk. MAT1030 Diskret Matematikk. Oppsummering av regneprinsipper MAT1030 Diskret Matematikk Forelesning 22: Grafteori Dag Normann Matematisk Institutt, Universitetet i Oslo Kombinatorikk 14. april 2010 (Sist oppdatert: 2010-04-14 12:43) MAT1030 Diskret Matematikk 14.

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 22: Grafteori Dag Normann Matematisk Institutt, Universitetet i Oslo 14. april 2010 (Sist oppdatert: 2010-04-14 12:42) Kombinatorikk MAT1030 Diskret Matematikk 14.

Detaljer

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Dag Normann MAT1030 Diskret Matematikk Forelesning 25: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo Forelesning 25 27. april 2010 (Sist oppdatert: 2010-04-27 14:16) MAT1030 Diskret Matematikk 27. april

Detaljer

Grunnleggende Grafteori

Grunnleggende Grafteori Grunnleggende Grafteori 2. September, 2019 Institutt for Informatikk 1 Dagens plan Terminologi og definisjoner Hvordan representere grafer i datamaskinen Traversering Dybde-først-søk Bredde-først-søk Topologisk

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 23: Grafteori Dag Normann Matematisk Institutt, Universitetet i Oslo 16. april 2008 Oppsummering En graf består av noder og kanter Kanter ligger inntil noder, og

Detaljer

MAT1030 Forelesning 25

MAT1030 Forelesning 25 MAT1030 Forelesning 25 Trær Dag Normann - 27. april 2010 (Sist oppdatert: 2010-04-27 14:16) Forelesning 25 Litt repetisjon Vi har snakket om grafer og trær. Av begreper vi så på var følgende: Eulerstier

Detaljer

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Forelesning 23: Grafteori

Oppsummering. MAT1030 Diskret matematikk. Oppsummering. Oppsummering. Forelesning 23: Grafteori Oppsummering MAT1030 Diskret matematikk Forelesning 23: Grafteori Dag Normann Matematisk Institutt, Universitetet i Oslo 16. april 2008 En graf består av noder og kanter Kanter ligger inntil noder, og

Detaljer

INF1020 Algoritmer og datastrukturer GRAFER

INF1020 Algoritmer og datastrukturer GRAFER GRAFER Dagens plan: Minimale spenntrær Prim Kapittel 9.5.1 Kruskal Kapittel 9.5.2 Dybde-først søk Kapittel 9.6.1 Løkkeleting Dobbeltsammenhengende grafer Kapittel 9.6.2 Å finne ledd-noder articulation

Detaljer

TMA4140 Diskret Matematikk Høst 2016

TMA4140 Diskret Matematikk Høst 2016 Norges teknisk naturvitenskapelige universitet Institutt for matematiske fag TMA4140 Diskret Matematikk Høst 2016 Seksjon 10.2 18 La G = (V,E) være en enkel graf med V 2. Ettersom G er enkel er de mulige

Detaljer

MAT1030 Forelesning 22

MAT1030 Forelesning 22 MAT1030 Forelesning 22 Grafteori Dag Normann - 14. april 2010 (Sist oppdatert: 2010-04-14 12:45) Kombinatorikk Oppsummering av regneprinsipper Ordnet utvalg med repetisjon: n r Ordnet utvalg uten repetisjon:

Detaljer

Løsningsforslag for utvalgte oppgaver fra kapittel 9

Løsningsforslag for utvalgte oppgaver fra kapittel 9 Løsningsforslag for utvalgte oppgaver fra kapittel 9 9.2 1 Grafer og minne.......................... 1 9.2 4 Omvendt graf, G T......................... 2 9.2 5 Kompleksitet............................

Detaljer

MAT1140: Kort sammendrag av grafteorien

MAT1140: Kort sammendrag av grafteorien MAT1140, H-15 MAT1140: Kort sammendrag av grafteorien Dette notatet gir en kort oppsummering av grafteorien i MAT1140. Vekten er på den logiske oppbygningen, og jeg har utelatt all motivasjon og (nesten)

Detaljer

Forelesning 23. Grafteori. Dag Normann april Oppsummering. Oppsummering. Oppsummering. Digresjon: Firefarveproblemet

Forelesning 23. Grafteori. Dag Normann april Oppsummering. Oppsummering. Oppsummering. Digresjon: Firefarveproblemet Forelesning 23 Grafteori Dag Normann - 16. april 2008 Oppsummering En graf består av noder og kanter Kanter ligger inntil noder, og noder kan være naboer. Vi bør kjenne til begrepene om sammenhengende

Detaljer

LO118D Forelesning 9 (DM)

LO118D Forelesning 9 (DM) LO118D Forelesning 9 (DM) Grafteori 26.09.2007 1 Introduksjon 2 Veier og sykler 3 Hamiltonsykler og omreisende handelsmenn Graf, urettet Definisjon En graf (eller urettet graf) G består av en mengde V

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2015 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 5: Grafer I Ingrid Chieh Yu (Ifi, UiO) INF2220 H2015, forelesning 5 1 / 55

Detaljer

Grunnleggende Grafalgoritmer

Grunnleggende Grafalgoritmer Grunnleggende Grafalgoritmer Lars Vidar Magnusson 19.3.2014 Kapittel 22 Representere en graf Bredde-først søk Grafer i Informatikken Problem med grafer går ofte igjen i informatikkens verden, så det å

Detaljer

45011 Algoritmer og datastrukturer Løsningsforslag eksamen 13. januar 1992

45011 Algoritmer og datastrukturer Løsningsforslag eksamen 13. januar 1992 45011 Algoritmer og datastrukturer Løsningsforslag eksamen 13. januar 12 Oppgave 1 Idé til algoritme Benytter S n som betegn på en tallmengde med n elementer. For at et tall m skal være et majoritetstall

Detaljer

Minimum spenntrær. Lars Vidar Magnusson Kapittel 23. Kruskal Prim

Minimum spenntrær. Lars Vidar Magnusson Kapittel 23. Kruskal Prim Minimum Spenntrær Lars Vidar Magnusson 2.4.2014 Kapittel 23 Minimum spenntrær Kruskal Prim Minimum Spenntrær Et spenntre er et tre som spenner over alle nodene i en graf G = (V, E). Et minimum spenntre

Detaljer

Forelesning 23. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

Forelesning 23. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori. MAT030 Diskret Matematikk Forelesning 23: Grafteori Roger Antonsen Institutt for informatikk, Universitetet i Oslo Forelesning 23 22. april 2009 (Sist oppdatert: 2009-04-22 2:37) MAT030 Diskret Matematikk

Detaljer

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon

Repetisjon og mer motivasjon. MAT1030 Diskret matematikk. Repetisjon og mer motivasjon Repetisjon og mer motivasjon MAT030 Diskret matematikk Forelesning 22: Grafteori Roger Antonsen Matematisk Institutt, Universitetet i Oslo 4. april 2008 Først litt repetisjon En graf består av noder og

Detaljer

Innhold. Innledning 1

Innhold. Innledning 1 Innhold Innledning 1 1 Kompleksitetsanalyse 7 1.1 Innledning.............................. 8 1.2 Hva vi beregner........................... 8 1.2.1 Enkle operasjoner...................... 8 1.2.2 Kompleksitet........................

Detaljer

Eksamen i tdt4120 Algoritmer og datastrukturer

Eksamen i tdt4120 Algoritmer og datastrukturer Norges teknisk naturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap Side 1 av 5 Oppgavestillere: Magnus Lie Hetland Jon Marius Venstad Kvalitetskontroll: Magnar Nedland Faglig

Detaljer

Matchinger i ikke-bipartite grafer

Matchinger i ikke-bipartite grafer Matchinger i ikke-bipartite grafer Stein Krogdahl, Notat til INF 3/4130 Sist revidert september 2006 Vi skal i dette notatet se på det å finne matchinger i generelle grafer, uten noe krav om at grafen

Detaljer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Institutt for datateknikk og informasjonsvitenskap Eksamensoppgave i TDT0 Algoritmer og datastrukturer Faglig kontakt under eksamen Magnus Lie Hetland Telefon 98 5 99 Eksamensdato 9. august, 07 Eksamenstid

Detaljer

Korteste vei problemet (seksjon 15.3)

Korteste vei problemet (seksjon 15.3) Korteste vei problemet (seksjon 15.3) Skal studere et grunnleggende kombinatorisk problem, men først: En (rettet) vandring i en rettet graf D = (V, E) er en følge P = (v 0, e 1, v 1, e 2,..., e k, v k

Detaljer

MAT1030 Forelesning 24

MAT1030 Forelesning 24 MAT1030 Forelesning 24 Grafteori og trær Roger Antonsen - 28. april 2009 (Sist oppdatert: 2009-04-28 22:32) Forelesning 24 Oppsummering En graf består av noder og kanter Kanter ligger inntil noder, og

Detaljer

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner

Dagens plan: INF Algoritmer og datastrukturer. Eksempel. Binære Relasjoner Dagens plan: INF2220 - Algoritmer og datastrukturer HØSTEN 2009 Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 10: Disjunkte Mengder Definisjon av binær relasjon Definisjon av ekvivalens

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2009 Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 10: Disjunkte Mengder Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 10 1 / 27

Detaljer

LP. Leksjon 8: Kapittel 13: Nettverk strøm problemer, forts.1

LP. Leksjon 8: Kapittel 13: Nettverk strøm problemer, forts.1 LP. Leksjon 8: Kapittel 13: Nettverk strøm problemer, forts.1 Vi fortsetter studiet av (MKS): minimum kost nettverk strøm problemet. Har nå en algoritme for beregning av x for gitt spenntre T Skal forklare

Detaljer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer Eksamensdato 14. desember 2011 Eksamenstid 1500 1900 Sensurdato 14. januar Språk/målform Bokmål Kontakt under eksamen Magnus Lie Hetland (tlf.

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF0 - Algoritmer og datastrukturer HØSTEN 05 Institutt for informatikk, Universitetet i Oslo Forelesning 6: Grafer II Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8 Dagens plan: Minimale spenntrær Prim Kruskal

Detaljer

Grafteori. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori.

Grafteori. MAT1030 Diskret Matematikk. Repetisjon og mer motivasjon. Repetisjon og mer motivasjon. Forelesning 23: Grafteori. MAT030 Diskret Matematikk Forelesning 23: Grafteori Dag Normann Matematisk Institutt, Universitetet i Oslo Grafteori 20. april 200 (Sist oppdatert: 200-04-20 4:8) MAT030 Diskret Matematikk 20. april 200

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 11: Huffman-koding & Dynamisk programmering (Ifi, UiO) INF2220 H2015, forelesning 11 1 / 32 Dagens

Detaljer

Øvingsforelesning 4. Topologisk sortering, Strongly Connected Components og Minimale spenntrær. Magnus Botnan

Øvingsforelesning 4. Topologisk sortering, Strongly Connected Components og Minimale spenntrær. Magnus Botnan Øvingsforelesning 4 Topologisk sortering, Strongly Connected Components og Minimale spenntrær Magnus Botnan botnan@stud.ntnu.no 09/10/09 1 I dag Topologisk Sortering Sterke Komponenter Minimale Spenntrær

Detaljer

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt.

Ekstra ark kan legges ved om nødvendig, men det er meningen at svarene skal få plass i rutene på oppgavearkene. Lange svar teller ikke positivt. Side 1 av 5 Noen viktige punkter: (i) (ii) (iii) (iv) Les hele eksamenssettet nøye før du begynner! Faglærer går normalt én runde gjennom lokalet. Ha evt. spørsmål klare! Skriv svarene dine i svarrutene

Detaljer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Faglig kontakt under eksamen Magnus Lie Hetland Tlf. 91851949 Eksamensdato 11. august 2014 Eksamenstid (fra til) 0900 1300 Hjelpemiddelkode D. Ingen

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 23: Grafteori Dag Normann Matematisk Institutt, Universitetet i Oslo 20. april 2010 (Sist oppdatert: 2010-04-20 14:17) Grafteori MAT1030 Diskret Matematikk 20. april

Detaljer

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Roger Antonsen

Forelesning 25. MAT1030 Diskret Matematikk. Litt repetisjon. Litt repetisjon. Forelesning 25: Trær. Roger Antonsen MAT1030 Diskret Matematikk Forelesning 25: Trær Roger Antonsen Institutt for informatikk, Universitetet i Oslo Forelesning 25 29. april 2009 (Sist oppdatert: 2009-04-29 00:28) MAT1030 Diskret Matematikk

Detaljer

Disjunkte mengder ADT

Disjunkte mengder ADT Binære relasjoner A A = {(x, y) x, y A}: mengden av ordnede par over A. Disjunkte mengder ADT Weiss kap. 8.1 8.5 Løser ekvivalensproblemet Lett og rask implementasjon Vanskelig tidsforbrukanalyse Ark 1

Detaljer

Minimum Spenntrær - Kruskal & Prim

Minimum Spenntrær - Kruskal & Prim Minimum Spenntrær - Kruskal & Prim Lars Vidar Magnusson 4.4.2014 Kapittel 23 Kruskal algoritmen Prim algoritmen Kruskal Algoritmen Kruskal algoritmen kan beskrives med følgende punkter. Vi har en en sammenkoblet

Detaljer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Faglig kontakt under eksamen Magnus Lie Hetland Tlf.!! 91851949 Eksamensdato! 15. august 2013 Eksamenstid (fra til)! 0900 1300 Hjelpemiddelkode D.

Detaljer

MAT1030 Diskret Matematikk

MAT1030 Diskret Matematikk MAT1030 Diskret Matematikk Forelesning 26: Trær Roger Antonsen Institutt for informatikk, Universitetet i Oslo 5. mai 2009 (Sist oppdatert: 2009-05-06 22:27) Forelesning 26 MAT1030 Diskret Matematikk 5.

Detaljer

MAT1030 Forelesning 23

MAT1030 Forelesning 23 MAT030 Forelesning 23 Grafteori Roger Antonsen - 22. april 2009 (Sist oppdatert: 2009-04-22 2:36) Forelesning 23 Repetisjon og mer motivasjon Først litt repetisjon En graf består av noder og kanter Kanter

Detaljer

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding

Dagens plan. INF Algoritmer og datastrukturer. Koding av tegn. Huffman-koding Grafer Dagens plan INF2220 - Algoritmer og datastrukturer HØSTEN 2007 Institutt for informatikk, Universitetet i Oslo Avsluttende om grådige algoritmer (kap. 10.1.2) Dynamisk programmering Floyds algoritme

Detaljer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Faglig kontakt under eksamen Magnus Lie Hetland Tlf.!! 91851949 Eksamensdato! 15. august 2013 Eksamenstid (fra til)! 0900 1300 Hjelpemiddelkode D.

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 13: Dynamisk programmering (Ifi, UiO) INF2220 H2017, forelesning 13 1 / 30 Dagens plan Dynamisk

Detaljer

Korteste Vei II. Lars Vidar Magnusson 11.4.2014. Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen

Korteste Vei II. Lars Vidar Magnusson 11.4.2014. Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen Korteste Vei II Lars Vidar Magnusson 11.4.2014 Kapittel 24 Bellman-Ford algoritmen Dijkstra algoritmen Bellman-Ford Algoritmen Bellman-Ford er en single-source korteste vei algoritme. Den tillater negative

Detaljer

Vektede grafer. MAT1030 Diskret matematikk. En kommunegraf. En kommunegraf. Oppgave

Vektede grafer. MAT1030 Diskret matematikk. En kommunegraf. En kommunegraf. Oppgave MAT1030 Diskret matematikk Forelesning 24: Grafer og trær Dag Normann Matematisk Institutt, Universitetet i Oslo 21. april 2008 Vi har snakket om grafer og trær. Av begreper vi så på var Eulerkretser og

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 33: Repetisjon Dag Normann Matematisk Institutt, Universitetet i Oslo 26. mai 2008 Innledning Onsdag 21/5 gjorde vi oss ferdige med det meste av den systematiske

Detaljer

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005

Studentnummer: Side 1 av 1. Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005 Studentnummer: Side 1 av 1 Løsningsforslag, Eksamen i TDT4120 Algoritmer og datastrukturer August 2005 Faglige kontakter under eksamen: Magnus Lie Hetland, Arne Halaas Tillatte hjelpemidler: Bestemt enkel

Detaljer

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon

Innledning. MAT1030 Diskret matematikk. Kapittel 11. Kapittel 11. Forelesning 33: Repetisjon Innledning MAT1030 Diskret matematikk Forelesning 33: Repetisjon Dag Normann Matematisk Institutt, Universitetet i Oslo 26. mai 2008 Onsdag 21/5 gjorde vi oss ferdige med det meste av den systematiske

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2017 Ingrid Chieh Yu Institutt for informatikk, Universitetet i Oslo Forelesning 5: Grafer I Ingrid Chieh Yu (Ifi, UiO) INF2220 H2017, forelesning 5 1 / 53

Detaljer

Lineære ligningssystemer og gausseliminasjon

Lineære ligningssystemer og gausseliminasjon Kapittel Lineære ligningssystemer og gausseliminasjon Vi skal lære en metode for å finne og beskrive alle løsninger av systemer av m lineære ligninger med n ukjente. Oppvarming Her er et eksempel på et

Detaljer

Algdat - Øvingsforelesning. Maks flyt

Algdat - Øvingsforelesning. Maks flyt Algdat - Øvingsforelesning Maks flyt Dagens plan 1. LF teoriøving 7 2. Maks flyt 3. Ford-Fulkerson 4. Maksimal bipartitt matching 5. Presentasjon av øving 9 2 Øving 7 4b) I hvilken rekkefølge velges noder

Detaljer

Oppgave 1. Sekvenser (20%)

Oppgave 1. Sekvenser (20%) Det matematisk-naturvitenskapelige fakultet UNIVERSITETET I BERGEN Eksamen i emnet I 20 - Algoritmer, datastrukturer og programmering Mandag 2.Mai 200, kl. 09-5. Ingen hjelpemidler tillatt. Oppgavesettet

Detaljer

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF2220 - Algoritmer og datastrukturer HØSTEN 2009 Institutt for informatikk, Universitetet i Oslo INF2220, forelesning 6: Grafer Bjarne Holen (Ifi, UiO) INF2220 H2009, forelesning 6 1 / 31 Dagens plan:

Detaljer

Grafteori. MAT1030 Diskret Matematikk. Oppsummering. Oppsummering. Forelesning 24: Grafer og trær. Dag Normann

Grafteori. MAT1030 Diskret Matematikk. Oppsummering. Oppsummering. Forelesning 24: Grafer og trær. Dag Normann MAT1030 Diskret Matematikk Forelesning 24: Grafer og trær Dag Normann Matematisk Institutt, Universitetet i Oslo Grafteori 21. april 2010 (Sist oppdatert: 2010-04-21 12:55) MAT1030 Diskret Matematikk 21.

Detaljer

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar

Uretta grafar (1) Mengde nodar Mengde kantar som er eit uordna par av nodar Kapittel 13, Grafar Uretta grafar (1) Ein uretta graf Mengde nodar Mengde kantar som er eit uordna par av nodar To nodar er naboar dersom dei er knytta saman med einkant Ein node kan ha kant til seg sjølv.

Detaljer

Kompleksitet og Beregnbarhet

Kompleksitet og Beregnbarhet Kompleksitet og Beregnbarhet 16. September, 2019 Institutt for Informatikk 1 Dagens plan Avgjørelsesproblemer. P EXPTIME NP Reduksjoner NP-kompletthet Uavgjørbarhet UNDECIDABLE DECIDABLE PSPACE NPC NP

Detaljer

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert.

Dijkstras algoritme. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert. Her finnes det også (minst) en riktig rekkefølge for Relax, men den må vi oppdage litt etter hvert. Tenk vann som sprer seg i rør: Vi behandler krysningspunktene i den rekkefølgen de fylles. Det må gi

Detaljer

ALGORITMER OG DATASTRUKTURER

ALGORITMER OG DATASTRUKTURER Stud. nr: Side 1 av 6 NTNU Norges teknisk-naturvitenskapelige universitet BOKMÅL Fakultet for informasjonsteknologi, matematikk og elektroteknikk Institutt for datateknikk og informasjonsvitenskap AVSLUTTENDE

Detaljer

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder.

Alle mot alle. Åttende forelesning. (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder. Enkel alle-til-allealgoritme: Kjør Dijkstra (eller eller Bellman-Ford, eller BFS, alt ettersom) fra alle noder. Kan fungere for spinkle grafer blir dyrt ellers. Alle mot alle Åttende forelesning 1 Dijkstra

Detaljer

Uke 5 Disjunkte mengder

Uke 5 Disjunkte mengder Uke 5 Disjunkte mengder MAW, kap.. 8 September 19, 2005 Page 1 Hittil Forutsetninger for og essensen i faget Metodekall, rekursjon, permutasjoner Analyse av algoritmer Introduksjon til ADT er Den første

Detaljer

SIF8010 ALGORITMER OG DATASTRUKTURER

SIF8010 ALGORITMER OG DATASTRUKTURER SIF8010 ALGORITMER OG DATASTRUKTURER KONTINUASJONSEKSAMEN, 1999; LØSNINGSFORSLAG Oppgave 1 (12%) Anta at du skal lage et støtteprogram som umiddelbart skal varsle om at et ord blir skrevet feil under inntasting

Detaljer

Avanserte flytalgoritmer

Avanserte flytalgoritmer Avanserte flytalgoritmer Magnus Lie Hetland, mars 2008 Stoff hentet fra: Network Flows av Ahua m.fl. (Prentice-Hall, 1993) Graphs, Networks and Algorithms, 2. utg., av Jungnickel (Springer, 2005) Repetisjon

Detaljer

Vann i rør Ford Fulkerson method

Vann i rør Ford Fulkerson method Vann i rør Ford Fulkerson method Problemet Forestill deg at du har et nettverk av rør som kan transportere vann, og hvor rørene møtes i sammensveisede knytepunkter. Vannet pumpes inn i nettverket ved hjelp

Detaljer

Løsnings forslag i java In115, Våren 1998

Løsnings forslag i java In115, Våren 1998 Løsnings forslag i java In115, Våren 1998 Oppgave 1 // Inne i en eller annen klasse private char S[]; private int pardybde; private int n; public void lagalle(int i) if (i==n) bruks(); else /* Sjekker

Detaljer

Lineære ligningssystemer og gausseliminasjon

Lineære ligningssystemer og gausseliminasjon Kapittel Lineære ligningssystemer og gausseliminasjon Vi skal lære en metode for å finne og beskrive alle løsninger av systemer av m lineære ligninger med n ukjente Oppvarming Her er et eksempel på et

Detaljer

MAT1030 Forelesning 25

MAT1030 Forelesning 25 MAT1030 Forelesning 25 Trær Roger Antonsen - 29. april 2009 (Sist oppdatert: 2009-04-29 00:28) Forelesning 25 Litt repetisjon Vi har snakket om grafer og trær. Av begreper vi så på var følgende. Eulerstier

Detaljer

INF1020 Algoritmer og datastrukturer GRAFER

INF1020 Algoritmer og datastrukturer GRAFER GRAFER Dagens plan: Definisjon av en graf (kapittel 9.1) Grafvarianter Intern representasjon av grafer (kapittel 9.1.1) Topologisk sortering (kapittel 9.2) Korteste vei, en-til-alle, for: uvektet graf

Detaljer

MAT1140: Kort sammendrag av grafteorien

MAT1140: Kort sammendrag av grafteorien MAT1140: Kort sammendrag av grafteorien Dette notatet gir en kort oversikt over den delen av grafteorien som er gjennomgått i MAT1140 høsten 2013. Vekten er på den logiske oppbygningen, og jeg har utelatt

Detaljer

Dijkstras algoritme Spørsmål

Dijkstras algoritme Spørsmål :: Forside s algoritme Åsmund Eldhuset asmunde *at* stud.ntnu.no folk.ntnu.no/asmunde/algdat/dijkstra.pdf :: Vi er ofte interessert i å finne korteste, raskeste eller billigste vei mellom to punkter Gods-

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 26: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo 28. april 2008 Oppsummering Sist forelesning snakket vi i hovedsak om trær med rot, og om praktisk

Detaljer

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl

Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl Student nr.: Side 1 av 7 Eksamen i fag SIF8010 Algoritmer og Datastrukturer Tirsdag 14. Desember 1999, kl 0900-1500 Faglig kontakt under eksamen: Arne Halaas, tlf. 73 593442. Hjelpemidler: Alle kalkulatortyper

Detaljer

Vi skal se på grafalgoritmer for:

Vi skal se på grafalgoritmer for: Grafalgoritmer Vi skal se på grafalgoritmer for: Traversering: Oppsøk alle nodene i grafen en og bare en gang, på en eller annen systematisk måte Nåbarhet: Finnes det en vei fra en node til en annen node?

Detaljer

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk MAT1030 Diskret matematikk Forelesning 27: Trær Dag Normann Matematisk Institutt, Universitetet i Oslo 30. april 2008 Oppsummering Mandag så vi på hvordan vi kan finne uttrykk og termer på infiks form,

Detaljer

Spenntrær, oppsummert: Kruskal: Traverserer ikke. Plukker kanter i hytt og vær Prim: Legger alltid til den noden som er nærmest treet

Spenntrær, oppsummert: Kruskal: Traverserer ikke. Plukker kanter i hytt og vær Prim: Legger alltid til den noden som er nærmest treet Spenntrær, oppsummert: Kruskal: Traverserer ikke. Plukker kanter i hytt og vær Prim: Legger alltid til den noden som er nærmest treet 1 A B D C Prim: Kruskal: AB, BD, DC DC, AB, BD 2 0 + 1 + + n 1; antall

Detaljer

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl

Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl Student nr.: Side 1 av 5 Kontinuasjonseksamen i fag SIF8010 Algoritmer og Datastrukturer Torsdag 9. August 2001, kl 0900-1500 Faglig kontakt under eksamen: Arne Halaas, tlf. 73 593442. Hjelpemidler: Alle

Detaljer

Svarforslag til ukeoppgaver til INF 4130

Svarforslag til ukeoppgaver til INF 4130 Svarforslag til ukeoppgaver til INF 4130 15. november 2011 Oppgave 1: Løs 14.4 (hvori innbakt svaret på oppgave 14.5) Vi skal altså vise at Hungarian-algoritmen kan implementeres i tid O(n 3 ), der n er

Detaljer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer

Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer Avsluttende eksamen i TDT4120 Algoritmer og datastrukturer Eksamensdato 3. desember 2012 Eksamenstid 0900 1300 Sensurdato 3. januar 2013 Språk/målform Bokmål Kontakt under eksamen Magnus Lie Hetland (tlf.

Detaljer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Eksamensoppgave i TDT4120 Algoritmer og datastrukturer Faglig kontakt under eksamen Magnus Lie Hetland Tlf. 91851949 Eksamensdato 7. desember 2013 Eksamenstid (fra til) 0900 1300 Hjelpemiddelkode Målform/språk

Detaljer

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf Oppgave 3 3 a IN1020 Algoritmer og datastrukturer orelesning 15: Gjennomgang av eksamen vår 2001 oppgave 3 Arild Waaler Institutt for informatikk, Universitetet i Oslo 11. desember 2006 Oppgave 3 a. Antagelser

Detaljer

PG4200 Algoritmer og datastrukturer Forelesning 10

PG4200 Algoritmer og datastrukturer Forelesning 10 PG4200 Algoritmer og datastrukturer Forelesning 10 Lars Sydnes, NITH 9. april 2014 NOE Å STUSSE PÅ? Quadratic probing i Hash-tabell: ( ) 2 i + 1 p = p + ( 1) i+1 2 Underforstått forutsetning: Heltallsaritmetikk

Detaljer