KONTINUASJONSEKSAMEN

Like dokumenter
KONTINUASJONSEKSAMEN

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY )

EKSAMEN. Algoritmiske metoder I KLASSE: 97HINDA / 97HINDB ( 2DA / 2DB )

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 00HINDB / 00HINEA ( 2DA / 2DB / 2EA ) TID:

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 11. august 1995 TID:

KONTINUASJONSEKSAMEN

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. 04HBIND* / 04HBINFA / div. andre

E K S A M E N. EKSAMENSDATO: 15. desember 1994 TID: Kladd og oppgavearkene leveres sammen med besvarelsen. Kladd merkes med "KLADD".

KONTINUASJONSEKSAMEN

K O N T I N U A S J O N S E K S A M E N

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 13. desember HINDA / 98HINDB / 98HINEA ( 2DA / 2DB / 2EA ) TID:

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

KONTINUASJONSEKSAMEN

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

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

GJØVIK INGENIØRHØGSKOLE

Definisjon av binært søketre

KONTINUASJONSEKSAMEN

E K S A M E N. Grunnleggende datakunnskap og programmering 02HIND*, 02HINE*, 02HDMU*, 02HING*, 02HGEOMAA, 02HSIV5

Kontinuasjonseksamen

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 7. desember HINDA / 00HINDB / 00HINEA 00HDMUA / 00HDMUB / 00HINGA

KONTINUASJONSEKSAMEN

E K S A M E N. Grunnleggende datakunnskap og programmering 99HINDA / 99HINDB / 99HINEA 99HDMUA / 99HDMUB / 99HINGA

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen

EKSAMEN med løsningsforslag

Definisjon: Et sortert tre

UNIVERSITETET I OSLO

EKSAMEN Løsningsforslag. med forbehold om bugs :-)

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

Definisjon. I et binært tre har hver node enten 0, 1 eller 2 barn

Oppgave 1. Sekvenser (20%)

Høgskolen i Gjøvik Institutt for informatikk og medieteknikk E K S A M E N. Grunnleggende programmering

UNIVERSITETET I OSLO

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

UNIVERSITETET I OSLO

Fra Kap.10 Binære søketre (BS-tre) Sist oppdatert Definere en abstrakt datastruktur binært søketre. Vise hvordan binær søketre kan brukes

Grunnleggende datakunnskap, programmering og datastrukturer 97HINDA / 97HINDB / 97HDMUA

Algoritmer og Datastrukturer

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre

Algoritmer og Datastrukturer

E K S A M E N. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

EKSAMEN. Algoritmer og datastrukturer

E K S A M E N 96HINDA / 96HINDE (1 AA / AE)

UNIVERSITETET I OSLO

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

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

UNIVERSITETET I OSLO

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

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen

INF2220: Forelesning 2

Kap 9 Tre Sist oppdatert 15.03

Kontinuasjonseksamen

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær:

LO118D Forelesning 12 (DM)

Kontinuasjonseksamen

Binære trær: Noen algoritmer og anvendelser

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.

Object [] element. array. int [] tall

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

Notater til INF2220 Eksamen

INF2220: Forelesning 2. Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7)

Høgskolen i Gjøvik E K S A M E N. FAGLÆRER: Frode Haug KLASSE: 1 AA / AE

INF2220: Forelesning 2

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

København 20 Stockholm

UNIVERSITETET I OSLO

Heap og prioritetskø. Marjory the Trash Heap fra Fraggle Rock

Binær heap. En heap er et komplett binært tre:

... Når internminnet blir for lite. Dagens plan: Løsning: Utvidbar hashing. hash(x) katalog. O modellen er ikke lenger gyldig ved

UNIVERSITETET I OSLO

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)!

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

Algoritmer og datastrukturer Løsningsforslag

E K S A M E N. - Kontroller at alle oppgavearkene er tilstede. - Les hele oppgaveteksten nøye, før du begynner å besvare noe som helst.

Eksamen iin115 og IN110, 15. mai 1997 Side 2 Oppgave 1 Trær 55 % Vi skal i denne oppgaven se på en form for søkestrukturer som er spesielt godt egnet

Trær. En datastruktur (og abstrakt datatype ADT)

E K S A M E N. Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 5. desember HIND*, 01HINE*, 01HDMU*, 01HING* TID:

UNIVERSITETET I OSLO

Høgskolen i Gjøvik. Avdeling for elektro- og allmennfag K O N T I N U A S J O N S E K S A M E N. EKSAMENSDATO: 8. august 1995 TID:

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre:

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Algoritmer og Datastrukturer

UNIVERSITETET I OSLO

Balanserte binære søketrær

Eksamen. Objekt-orientert programmering KLASSE(R): 02HIND* 02HDMU* 02HINE* 02HING* 01HINGA 02HSIV5 02HGEOMAA

KONTINUASJONSEKSAMEN

IN Algoritmer og datastrukturer

E K S A M E N. Grunnleggende datakunnskap og programmering 98HINDA / 98HINDB / 98HINEA 98HDMUA / 98HDMUB / 98HINGA

Kontinuasjonseksamen

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

Algoritmer og Datastrukturer

PG4200 Algoritmer og datastrukturer Forelesning 7

Løsningsforslag til INF110 h2001

KONTINUASJONSEKSAMEN

Kontinuasjonseksamen

Transkript:

Høgskolen i Gjøvik KONTINUASJONSEKSAMEN FAGNAVN: FAGNUMMER: Algoritmiske metoder I L 171 A EKSAMENSDATO: 19. august 1999 KLASSE: 97HINDA / 97HINDB ( 2DA / 2DB ) TID: 09.00-14.00 FAGLÆRER: Frode Haug ANT. SIDER UTLEVERT: TILLATTE HJELPEMIDLER: 5 (inkludert denne forside) Alle trykte og skrevne. - Kontroller at alle oppgavearkene er tilstede. - Innføring med penn, evt. trykkblyant som gir gjennomslag. Pass på at du ikke skriver på mer enn ett innføringsark om gangen (da det blir uleselige gjennomslag om flere ark ligger oppå hverandre når du skriver). - Ved innlevering skilles hvit og gul besvarelse og legges i hvert sitt omslag. Oppgavetekst, kladd og blå kopi beholder kandidaten. - Ikke skriv noe av din besvarelse på oppgavearkene. - Husk kandidatnummer på alle ark.

NB: Alle oppgavene teller likt, dvs. 25% vekt på hver av dem! Oppgave 1 (teori) Denne oppgaven inneholder tre uavhengige oppgaver fra kap. 9, 14 og 16 i læreboka. a) Du skal utføre Quicksort på teksten MEGASTOR. Lag en figur tilsvarende fig. 9.3 s.119 i læreboka, der du for hver rekursive sortering skriver de involverte bokstavene og markerer/ uthever hva som er partisjonselementet. b) Følgende binære søketre er gitt : J R A I P V B F M Q T Y E H K O S W Z Du skal nå fjerne ( remove ) noen noder fra dette treet. Tegn opp treet for hver gang og fortell hvilken av if... else if... else -grenene i koden s.210 som er aktuelle når du etter tur fjerner henholdsvis tegnene P, I og V. NB: Du skal for hver fjerning på nytt ta utgangspunkt i treet tegnet ovenfor. Dvs. på intet tidspunkt skal du, fra treet, ha fjernet to eller tre av de ovenfor skrevne bokstavene samtidig. c) Koden s.237 og teksten s.239 i læreboka gir oss følgende kode ved dobbel hashing: const int M = 11; int hash1(int k) { return (k % M); } int hash2(int k) { return (4 - (k % 4)); } void insert(itemtype v, infotype info) { int x = hash1(v); int u = hash2(v); while (a[x].info!= infonil) x = (x+u) % M; a[x].key = v; a[x].info = info; } k står for bokstavens nummer i alfabetet (1-29). Vi har en array som er 11 lang (indeks 0-10). Keyene MEGASTOR skal legges inn i denne arrayen. Skriv opp hver enkelt key's returverdi fra både hash1 og hash2. Tegn også opp arrayen for hver gang en ny key legges inn. ("Info"s innhold trenger du ikke å ta hensyn til.) 2

Oppgave 2 (teori) Denne oppgaven inneholder tre uavhengige oppgaver fra kap. 29, 30 og 31 i læreboka. a) Vi har grafen : H A D B G E F a1) Skriv opp nabomatrisen for dette tilfellet. a2) Tegn dybde-først søketreet for dette tilfellet (dvs. ved bruk av nabomatrise), når "Search" (s.424) og "Visit" (s.427) fungerer som angitt i læreboka. b) Følgende kanter i en (ikke-retted, ikke-vekted) graf er gitt: AH GH F BG ED AE EG E FB A Vi skal nå utføre union-find m/path compression og weight balancing på denne grafen. Tegn opp arrayen dad s innhold etterhvert som skogen bygges opp (jfr. fig.30.9) vha. find -funksjonen s.447 i læreboka. Ut fra dette: tegn også opp den resulterende union-find skogen (dvs. noe lignende til nedre høyre skog i fig.30.8). c) Følgende vektede (ikke-rettede) graf er gitt: 4 E 3 5 3 B 4 F 3 4 D 5 A Hver nodes naboer er representert i en naboliste. Alle listene er sortert alfabetisk. Tegn opp minimums spenntreet for denne grafen, etter at koden s.455 i læreboka er utført (der "priority" er lik "t->w"). Tegn også opp innholdet i prioritetskøen etterhvert som konstruksjonen av minimums spenntreet pågår (jfr. fig.31.4 i læreboka). NB: Husk at ved lik prioritet så vil noden sist oppdatert (nyinnlagt eller endret) havne først i køen. 3

Oppgave 3 (koding) Vi skal her arbeide med et binært søketre. Vi skal stadig sette inn nye noder, men aldri ta noen ut. Innimellom innsettingene skal vi gjøre vanlige søk i treet. Poenget her er imidlertid at når en ny node skal settes inn, vil den alltid ha større verdi enn alle tidligere innsatte noder. Om vi hadde satt noder inn på vanlig måte, ville dette gitt et helt skjevt tre (med bare høyrebarn, dvs. en liste). Men, siden vi vet at vi nå vil sette inn nodene i stigende rekkefølge, kan vi utnytte dette til å lage et ganske godt balansert tre. Husk altså at treet hele tiden (mellom innsettinger) må være et binært søketre. Om vi tenker oss at verdiene i de nodene vi skal sette inn er 1, 2, 3, 4, 5 og 6, så vil vi organisere oss slik at trærne vi etter hvert får, er som følger: 4 4 4 2 2 2 2 5 2 6 1 1 1 3 1 3 1 3 1 3 5 Algoritmen vi hele tiden skal følge ved innsetting, er som følger: Vi sier at en node er ubalansert dersom høyden av dens to subtrær er ulike. Ved innsetting av en ny node N (som altså har større verdi enn alle nåværende noder i treet) følger vi først den veien vi ville gått ned gjennom treet om vi lette etter en node med denne verdien, altså hele tiden til høyre. På veien registrerer vi de noder som er ubalanserte, og velger til slutt den siste ubalanserte noden vi fant. Denne kalles U. Vi setter så N inn som ny høyre subnode til U, og lar det gamle høyre subtreet til U bli nytt venstre subtre til N. Hva som skal gjøres dersom man ikke finner noen ubalanserte noder, må du selv finne ut av. a) Anta at vi fortsetter innsettingen angitt ovenfor ved å sette inn noder med verdiene 7, 8, 9, 10, 5% 11 og 12. Tegn opp hvordan treet vil se ut etter at verdiene 8, 10 og 12 er satt inn. Du skal altså tegne opp tre fullstendige og ulike trær. b) I en implementasjon (se koden for node under) ønsker vi i hver node å ha registrert dens 5% høyde i det nåværende treet. Når vi setter inn en ny node, slik som angitt av algoritmen ovenfor, må vi selvfølgelig gi den riktig høyde i treet. Hvilke andre noder i treet kan få forandret sin høyde? Forklart kort (max. 0.5 A4-side). Nodene skal ha følgende struct-deklarasjon: struct node { int id; // Nodens ID/verdi. int hoyde; // Nodens høyde. node* left; // Peker til venstre subtre. node* right; // Peker til høyre subtre. node(int v) { id = v; hoyde = 0; left = right = NULL; } }; c) Lag funksjonen void settinn(node* & rot, int verdi) 15% Husk at verdi er større enn alle andre verdier i treet. Lag en ny node med denne som verdi/id, og sett den inn i treet gitt av roten rot. Funksjonen skal basere seg på algoritmen gitt ovenfor, og den trenger/bør ikke å være rekursiv. Grunnen til at rot er referanseoverført er at du ved enkelte tilfeller også har behov for å endre roten. Det kan hende at du også får behov for å lage en eller flere andre små hjelpefunksjoner. 4

Oppgave 4 (koding) I denne oppgaven skal vi fokusere på noe som kalles et beslutningstre. Hver node i et slikt tre representerer en gitt situasjon og alle de valgmuligheter man har i denne situasjonen. Stien fra rota og ned til en bladnode representerer en løsning på det problemet man ønsker å finne et svar på. For å løse et gitt problem, gjelder det å finne den stien som gir den beste løsningen ift. problemet. I denne eksamensoppgaven skal vi se på det at man kun har to alternative valg i en hver situasjon (node). Dvs. vi har et binært, totalt balansert og fullt tre. To eksempler på en slik problemstilling kan være: 1. En pose diamanter skal fordeles mest mulig likt mellom to personer (A og B). Diamantene er av meget varierende størrelse/vekt. Med likt menes at diamantene skal fordeles slik at A og B hver får en totalvekt av diamanter som er mest mulig lik hverandre. 2. En masse kasser (av meget ulik vekt) med varer skal fordeles på to jernbanevogner. Fordel disse slik at totalvekten i de to vognene er mest mulig lik hverandre. Kassenes volum/størrelse er likegyldig/uinteressant. (Du kan selv sikkert komme på andre lignende eksempler, også der man har mer enn to valgmuligheter i enhver situasjon.. ) En logisk representasjon (og evt. en fysisk representasjon i datamaskinens hukommelse) av et slikt binært beslutningstre vil være som følger: Rota representerer den første gjenstanden. Følger man veien ned til dens venstre subtre, så betyr det at gjenstanden (rota) tildeles A. Følger man veien ned til det høyre subtreet, så betyr det at B blir tildelt den. Uansett hvilken vei man følger, så vil man på nivå to treffe på to noder som kun representerer gjenstand nr.2. Hvem som således tildeles denne, avgjøres på samme måte ved å følge veien til et av deres to subtrær. Nivå tre vil deretter inneholde fire noder som kun representerer gjenstand nr.3. Slik blir det hele veien ned til det siste nivået N, som kun vil inneholde noder som representere gjenstander nr. N. For å gjøre dette helt klart (?): alle gjenstandene/nodene er duplisert flere ganger i treet (unntatt rota). Hvert nivå (nr. i ) inneholder kun identiske noder, som representerer gjenstand nr. i. a) La oss tenke oss at det totalt er N gjenstander som skal deles i to ulike hauger. 5% - Hvor mange noder vil det være på nivå nr. N? - Hvor mange interne noder vil treet totalt inneholde? - Hvor mange eksterne noder (z-noder) vil treet totalt inneholde? - Hvor mange ulike løsninger vil det være på en slik fordeling? b) La oss tenke oss at alle gjenstandenes verdi/vekt er lagt inn i arrayen 20% int verdi[n+1]; (Vi bruker ikke indeks nr.0.) Skriv et program som finner (og skriver ut) den optimale løsningen på hvordan fordele disse gjenstandene mest mulig likt/rettferdig i to hauger. Hint: Du må sikkert lage et lite hovedprogram, definere noen flere (globale) hjelpevariable og lage en eller flere (rekursive) funksjoner som gjør jobben. Lykke til! frode@haug.com 5