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



Like dokumenter
Oppgave 1 a. INF2220 Algoritmer og datastrukturer. Oppgave 1 b

København 20 Stockholm

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b

Løsningsforslag eksamen INF1020 høsten 2005

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

Algoritmer og datastrukturer Kapittel 11 - Delkapittel 11.2

Algoritmer og Datastrukturer

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00

Informasjon Eksamen i IN1000 høsten 2017

Grunnleggende Grafteori

INF Algoritmer og datastrukturer

Oppgave 1. Sekvenser (20%)

Dagens forelesning. Java 13. Rollefordeling (variant 1) Rollefordeling (variant 2) Design av større programmer : fordeling av roller.

INF Algoritmer og datastrukturer

INF1010. Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene 0, 1 og 2: Sekvensgenerering. Generalisering. n n n! INF1010 INF1010 INF1010

Løsningsforslag til INF110 h2001

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Dagens plan: INF Algoritmer og datastrukturer. Grafer vi har sett allerede. Det første grafteoretiske problem: Broene i Königsberg

Eksamen INF1010 V2009 Del B prøveeksamen V2010 Vekt 60 %

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

Korteste vei i en vektet graf uten negative kanter

Repetisjon: operatorene ++ og -- Java 5. Nøtt. Oppgave 1 (fra forrige gang) 0 udefinert udefinert. Alternativ 1 Prefiks-operator

Faglærerne prøver å besøker eksamenslokalet mellom klokka 15 og 16 for å oppklare eventuelle uklarheter og feil i oppgaveteksten.

INF Algoritmer og datastrukturer

INF1020 Algoritmer og datastrukturer GRAFER

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00

Norsk informatikkolympiade runde

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

GRAF-TRAVERSERING. Hvordan utforske en labyrint uten å gå seg vill. Rekkefølge på kanter: Dybde-Først Søk A B C D E F G H I J K L M N O P

Algoritmer og datastrukturer Eksamen

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

EKSAMEN med løsningsforslag

INF1000 (Uke 15) Eksamen V 04

INF1000 (Uke 15) Eksamen V 04

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

Gjennomgang av eksamen H99

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

UNIVERSITETET I OSLO

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

EKSAMEN. Algoritmer og datastrukturer

OPPGAVE 5b og 8b Java Kode

1 Hver node er enten rød eller sort. 2 Rota er sort. 3 En rød node kan bare ha sorte barn

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Norges Informasjonsteknologiske Høgskole

Oppgave 1. Løsningsforslag til eksamensoppgave. ITF20006 Algoritmer og datastrukturer Postorden traversering:

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

INF Algoritmer og datastrukturer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Kapittel 11 Delkapittel 11.2

HØGSKOLEN I BERGEN Avdeling for ingeniørutdanning

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag

Obligatorisk oppgave 1 INF1020 h2005

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

INF1020 Algoritmer og datastrukturer GRAFER

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

Eksamen iin115, 14. mai 1998 Side 2 Oppgave 1 15 % Du skal skrive en prosedyre lagalle som i en global character array S(1:n) genererer alle sekvenser

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Oppgave 1 LØSNINGSFORSLAG. Eksamen i INF desember Betrakt følgende vektede, urettede graf:

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

GRAFER. Hva er en graf? Det første grafteoretiske problem: Broene i Königsberg. Grafer vi har sett allerede

Litt mer om uttrykk: ++ og -- INF1000 : Forelesning 4. Oppgave. Blokker. 0 udefinert udefinert. Alternativ 2 Postfiks-operator

PG4200 Algoritmer og datastrukturer Forelesning 10

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00

TOD063 Datastrukturer og algoritmer

Grunnleggende Grafalgoritmer II

IN Algoritmer og datastrukturer

Algoritmer og datastrukturer Eksamen 22. februar 2011

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

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

TDT4100 Objektorientert programmering

INF2220: Forelesning 7. Kombinatorisk søking

Innhold. INF1000 Høst Unified Modeling Language (UML) Unified Modeling Language (UML)

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

INF1010 våren januar. Objektorientering i Java

IN2010: Algoritmer og Datastrukturer Series 2

Objektorientert design av kode. Refaktorering.

Sortering med tråder - Quicksort

UNIVERSITETET I OSLO

Algoritmer og Datastrukturer IAI 21899

INF1010 Sortering. Marit Nybakken 1. mars 2004

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013

Transkript:

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 i oppgaveteksten Gitt en vektet, sammenhengende urettet graf. Nodene angir byer (flyplasser). En kant K mellom node A og node B angir at det går en direkte flyreise fra A til B og en direkte flyreise fra B til A. Vekten k til en kant mellom A og B angir kostnaden til en direkte flyreise mellom A og B (uansett vei). En reiserute fra A til B er en liste av kanter K 1,...,K m, m 0, slik at man ved å følge kantene i angitt rekkefølge kommer fra A til B uten å besøke noen noder mer enn en gang. Kostnaden til reiseruten er k 1 + + k m,derk i er kostnaden til kant K i. Kostnaden fra en node til seg selv (dvs. en reiserute uten kanter) er 0. Prisen fra A til B bestemmes som kostnaden til den reiseruten fra A til B som har minst kostnad. Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 2 / 20 Oppgave 3 3 a Oppgave 3 3 a løsningsforslag Eksempelgraf Oppgave 3 a Oslo Helsinki 40 40 København 20 Stockholm München 20 Milano 0 Bruk Dijkstras algoritme til å finne prisen fra Oslo til de andre byene. Initielt Oslo blir kjent Stockholm kjent Sluttresultatet Kjent Avstand Kjent Avstand Kjent Avstand Kjent Avstand Oslo 0 0 0 0 Helsinki Stockholm København Munchen Milano 110 0 100 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 3 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 4 / 20

Oppgave 3 3 b Oppgave 3 b. Antagelser i oppgaveteksten Oppgave 3 b Oppgave 3 3 b Anta at prisen fra A til B er n. Det gis av og til flere mulige reiseruter fra A til B med pris n. Hvis N er en node til B og prisen fra A til N er mindre eller lik n, tillater selskapet at man reiser via N uten tillegg i prisen. Man må da velge en reiserute fra A til N som har minimal kostnad, og etterpå reise direkte fra N til B. Vi sier da at ruten fra A til B via N er en valgbar reiserute fra A til B. Hvis C er på en valgbar reiserute fra A til B, kan man gå avicog fortsette reisen senere uten tillegg i prisen. VisierdaatmanreiserfraAtilBmedstoppiC. Hvis C ikke besøkes i en valgbar reiserute fra A til B, kan man ikke reise fra A til B med stopp i C uten å løse ny billett. (i) Hvorfor er en reiserute med minimal kostnad alltid valgbar? a en reiserute fra A til B med minimal kostnad og la N være den siste noden som besøkes før B. Merk at N kan være A. Da er denne ruten en reise fra A til B via N, dvs. at ruten er valgbar. (ii) Hva er prisen fra Oslo til München med stopp i Helsinki? Prisen til München er 0 Helsinki er til München med pris 0. Helsinki er derfor på en valgbar vei fra Oslo til München. Svaret er derfor 0. (iii) Kan man reise fra Oslo til München med stopp i Milano? Nei, for Milano ligger ikke på en valgbar reiserute fra Oslo til München. Dette fordi Milano er til München, men prisen til Milano er større ennprisentilmünchen. Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 5 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 6 / 20 Oppgave 3 c Oppgave 3 3 c Representasjonen av flyselskapets graf skal bruke lister (i en eller annen form). Definer en datastruktur for flyrute-grafen i form av Java-klasser. class By { String navn; VektetKant ; // sortert etter stigende kostnad boolean kjent; int pris; // til Dijkstra // til Dijkstra (avstand) By sti; // brukes i 3-d Kant stiliste; // brukes i 3-e class Kant { Kant neste; By til; Kant( By b, Kant k ) { til = b; neste = k; Oppgave 3 3 c class VektetKant extends Kant { int kostnad; VektetKant( By b, VektetKant k, int n ) { super( b, k ); kostnad = n; Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 7 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 / 20

Oppgave 3 3 c egn så med piler og bokser hvordan en del av eksempelgrafen representeres i din datastruktur. Graf Oslo Helsinki 40 40 Oppgave 3 d Oppgave 3 3 d Programmer Dijkstras algoritme for å finne prisen fra en by til alle andre byer. class Graf { By[] by; int antallukjente; Stockholm 20 0 Kobenhavn 20 40 Munchen 20 40 Milano 20 0 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 9 / 20 void initialiser( By start ) { antallukjente = by.length; for ( int i = 0; i < by.length; i++ ) { by[i].kjent = false; by[i].pris = UENDELIG; by[i].sti = null; // brukes i 3-d by[i].stiliste = null; // brukes i 3-e start.pris = 0; Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 10 / 20 Oppgave 3 3 d Oppgave 3 3 d By minukjent ( ) { int min = 0; for ( int i = 1; i < by.length; i++ ) { if (!by[i].kjent && by[i].pris < by[min].pris ) { min = i; by[min].kjent = true; antallukjente--; return by[min]; boolean flereukjente () { return ( antallukjente > 0 ); void dijkstra( By start ) { By v, w; VektetKant kant; initialiser( start ); while ( flereukjente() ) { v = minukjent(); for ( kant = v.; kant!= null; kant = kant.neste ) { int d = v.pris + kant.kostnad; w = kant.til; if(!w.kjent && d<w.pris ){ w.pris = d; w.sti = v; Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 11 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 12 / 20

Oppgave 3 3 e Oppgave 3 3 e Oppgave 3 e Modifikasjon av Dijkstras algoritme Skisser en algoritme for en metode som tar inn tre byer A, B, C. Metoden skal skrive ut alle valgbare reiseruter fra A til B med stopp i C, samt prisen. Vi tillater at C kan være lik null. Metoden skal da skrive ut alle valgbare reiseruter fra A til B, samt prisen. Merk: Dijkstras algoritme beregner avstandsfeltet pris og lagrer én reiserute til startnoden med minimal kostnad. Vi lagrer nå informasjon om alle valgbare reiseruter Selv om prisen til en node kan leses direkte fra verdien i nodens pris felt, må gjøre bruk av pris verdien til alle nodene for å finne frem til de valgbare reiserutene. Via-noden C hånderer vi under gjennomløpet av de valgbare rutene. I hvert gjennomløp av Dijkstra gjør vi en ny node v kjent og undersøker enhver w til v: Hvis vi får en kortere vei til w via v enn den vi hadde før, endrer vi w sin sti til v. Merk at sti alltid vil referere til kjente noder. or å kunne sporre alle reiserutene med minimal kostnad lar vi hver node har en variabel stiliste. Inn i denne lista legger vi alle noder som man kan komme fra i en valgbar reiserute. Vi legger nå v til w.stiliste dersom prisen til v er mindre enn prisen til w selv om w er kjent. Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 13 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 14 / 20 Oppgave 3 3 e Modifikasjon av Dijkstras algoritme: kode Oppgave 3 3 e Utskrift av alle valgbare reiseruter fra A til B for ( kant = v.; kant!= null; kant = kant.neste ) { int d = v.pris + kant.kostnad; w = kant.til; if( v.pris < w.pris ) w.stiliste = new Kant( v, w.stiliste ); if(!w.kjent && d<w.pris ) w.pris = d; Veien blir ikke en enkel listestruktur, men en trestruktur. Bruk en lenket liste (eller stakk) vei av Kant objekter Hvis den første noden i vei er startnoden A: skriv ut alle nodene i vei og backtrack. or hver node D i B.stiliste, legg D til vei og gå rekursivt dybde-først til D. Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 15 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 16 / 20

Oppgave 3 3 e Oppgave 3 3 f Utskrift av alle valgbare reiseruter via C Oppgave 3 f Kompliserende faktor: Vi skal bare skrive ut en vei dersom den enten inneholder C eller C er satt til null når metoden aktiveres: Sett en variabel flagg til true når vi kommer over noden C La flagg initielt være false dersom C ikke er null, ellers true. Bygg opp vei i de rekursive kallene idet vi traverserer trestrukturen. Skriv ut lista når vi kommer til A og flagget har blitt satt til true. LaKværeenkantfraAtilBmedkostnadk.Kantenerfeilprisetdersom det finnes en annen reiserute fra A til B med kostnad mindre eller lik k. (i) inn alle feilprisede kanter i eksempelgrafen. Kanten fra Stockholm til Milano er feilpriset. Kanten har kostnad 0, mens minste kostnad mellom de to byene er 70. Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 17 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 1 / 20 Oppgave 3 3 f Oppgave 3 3 f (ii) Programmer en metode som finner alle feilprisede kanter i en graf. Strukturen i løsningen er en ytre løkke som kaller opp en (variant av) Dijkstras algoritme for hver node: Kjør Dijkstras algoritme fra N. or hver kant i listen til N, test om kant.til.pris <= kant.kostnad. Iså fall er kanten feilpriset. Avskjæring: Stans algoritmen når kostnaden til minukjent() er større enn kostnaden til alle nodens utkanter. Avskjæring: Sorter utkantene fra en node etter stigende kostnad. Vi kaller opp testpris(n) forhvernoden. void testpris( By start ) { int d; By v,w; VektetKant kant; VektetKant minnabo = start.; initialiser( start ); while ( flereukjente() ) { v = minukjent(); while ( v.pris > minnabo.kostnad ) { // hvis minnabo er feilpriset, kan det oppdages naa: if ( minnabo.til.pris <= minnabo.kostnad ) { rapportereil( start, minnabo ); minnabo = minnabo.neste; if ( minnabo == null ) return; Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 19 / 20 Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 20 / 20

Oppgave 3 3 f for (kant = v.; kant!= null; kant = kant.neste ) { d = v.pris + kant.kostnad; w = kant.til; if ( d < w.pris ) w.pris = d; void rapportereil( By start, VektetKant kant ) { System.out.print( start.navn + " -> " + kant.til.navn + " feil: " ); System.out.println( kant.til.pris + "/" + kant.kostnad ); Institutt for informatikk (UiO) IN1020 Algoritmer og datastrukturer 11.12.2006 21 / 20