KONTINUASJONSEKSAMEN

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

KONTINUASJONSEKSAMEN

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

KONTINUASJONSEKSAMEN

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

KONTINUASJONSEKSAMEN

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:

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".

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

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

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

KONTINUASJONSEKSAMEN

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

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

GJØVIK INGENIØRHØGSKOLE

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

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

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

Algoritmer og Datastrukturer

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

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: 5. januar 2018 Eksamenstid: 09:00 13:00

UNIVERSITETET I OSLO

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

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

UNIVERSITETET I OSLO

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

Algoritmer og Datastrukturer

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:

EKSAMEN med løsningsforslag

Oppgave 1. Sekvenser (20%)

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

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

Kontinuasjonseksamen

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

INF2220: Forelesning 2

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

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

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

Algoritmer og datastrukturer Eksamen 22. februar 2011

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

INF2220: Forelesning 2

Algoritmer og datastrukturer Eksamen

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

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

EKSAMEN. Algoritmer og datastrukturer

Definisjon av binært søketre

Algoritmer og Datastrukturer

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

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

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

Kontinuasjonseksamen

Definisjon: Et sortert tre

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

KONTINUASJONSEKSAMEN

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel )

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

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

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.

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

Obligatorisk oppgave 1 INF1020 h2005

Balanserte binære søketrær

EKSAMENSOPPGAVE. NB! Det er ikke tillatt å levere inn kladd sammen med besvarelsen

Eksamen. Grunnleggende programmering. EKSAMENSDATO: 6.desember 2016 TID: 16:00 20:00. (kalkulator er ikke tillatt)

Selv-balanserende søketrær

Notater til INF2220 Eksamen

Algoritmer og datastrukturer Løsningsforslag

Binære trær: Noen algoritmer og anvendelser

Løsningsforslag til INF110 h2001

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

Kontinuasjonseksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

ALGORITMER OG DATASTRUKTURER

Algoritmer og datastrukturer Eksamen

Transkript:

Høgskolen i Gjøvik Avdeling for Teknologi KONTINUASJONSEKSAMEN FAGNAVN: FAGNUMMER: Algoritmiske metoder I L 189 A EKSAMENSDATO: 13. august 2001 KLASSE: 99HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY ) TID: 09.00-14.00 FAGLÆRER: Frode Haug ANT. SIDER UTLEVERT: 5 (inkludert denne forside) TILLATTE HJELPEMIDLER: 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.

Oppgave 1 (teori, 25%) Denne oppgaven inneholder tre uavhengige oppgaver fra kap. 6 & 7, 11 og 16 i læreboka. a) En funksjon som beregner og returnerer svaret på -1 n kan skrives på følgende måte (5 %) (Vi forutsetter at n er større eller lik 0. -1 0 er definert som 1, hvilket funksjonen ivaretar.): int minus_en_i(int n) { int svar = 1; for (int i = 1; i <= n; i++) svar = -1; return svar; } Hvilken orden er denne funksjonen av? Funksjonens innmat kan også skrives slik at den faktisk blir av O(1)! Gjør dette. b) Teksten T O R S K E T U N G E (i denne rekkefølge fra venstre til høyre, blanke (10 %) regnes ikke med) skal heap-sorteres vha. bottom-up heap konstruksjon. (Se fig.11.8, koden s.156 og fig.11.9 i læreboka.) Tegn opp heapens innhold etterhvert som heapen konstrueres og deretter sorteres etter denne metoden (Dvs. lag en figur etter samme prinsipp som fig.11.9.) c) Koden s.237 og teksten s.239 i læreboka gir oss følgende kode ved dobbel hashing: (10 %) const int M = 11; int hash1(int k) { return (k % M); } int hash2(int k) { return (5 - (k % 5)); } 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 TORSKETUNGE 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. (Innholdet i info trenger du ikke å ta hensyn til.) 2

Oppgave 2 (teori, 25%) Denne oppgaven inneholder tre uavhengige oppgaver fra kap. 30, 29 & 31 i lærebok og om FSM. a) Følgende kanter i en (ikke-retted, ikke-vekted) graf er gitt: BC AE DB BF EC Vi skal nå utføre union-find m/path compression (men ikke weight balancing) på denne grafen. Det er den første bokstaven som skal legges inn under den siste bokstaven i hver kantangivelse. Dvs. den eneste innmaten i if-setningen if (doit && (i!= j)) s.447 i læreboka blir: { dad[j] += dad[i]-1; dad[i] = j; } Tegn opp innholdet i arrayen dad 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). b) Følgende (vekted, ikke-retted) graf er gitt: 7 4 A K F 6 8 D 9 9 I 4 8 B J C 5 6 3 8 H E G 1. Skriv en lovlig rekkefølge av nodene ut fra et Dybde-Først-Søk (DFS) som starter i node F. 2. Skriv en lovlig rekkefølge av nodene ut fra et Bredde-Først-Søk (BFS) som starter i node F. 3. Gi en kort forklaring på hvorfor kanten EG kan (men ikke er nødt til å) høre med i grafens minimums spenntre. 4. Tegn opp et minimums spenntre for grafen (du trenger ikke å angi fringen underveis). 1 c) Følgende deterministiske endelige tilstandsmaskin (FSM) er gitt: M = ( { q0, q1, q2, q3 }, { a, b },, q0, { q0, q1, q2 } ) Transisjonstabellen: ( q0, a ) = q0 ( q0, b ) = q1 ( q1, a ) = q0 ( q1, b ) = q2 ( q2, a ) = q0 ( q2, b ) = q3 ( q3, a ) = q3 ( q3, b ) = q3 Tegn tilstandsmaskinen. Er det mulig, på en deterministisk måte, å tegne FSM en enklere? Hva slags setninger/språk godtar den? I så fall: gjør det. 3

Oppgave 3 (koding, 30%) Denne oppgaven omhandler binære trær, der hver node i treet er definert på følgende måte: struct node { int id; // Nodens ID/navn. int avstand; // Antall mellomliggende kanter til nærmeste åpning. node left, right; // Pekere til venstre og høyre subtre/barn. node sti; // Retning (node) mot nærmeste åpning. }; Nodene i treet ligger ikke sortert etter noe spesielt kriterie, dvs. treet er ikke noe binært søketre. Når nye noder skal settes inn i treet, er vi interessert i at disse plasseres så nære roten som mulig. Vi skal derfor se på en teknikk som gjør at vi fra hver node lett kan finne nærmeste ledige plass i det subtreet som noden er rot i. Vi skal i det videre kalle noder som har ett eller ingen barn (dvs. at noden har et tomt venstre og/eller høyre subtre) for åpne noder. Noder som har to barn/subtrær, kaller vi for indre noder. For hver indre node, er vi interessert i å finne de åpne nodene i subtrærne som ligger så nære den indre noden som mulig. Disse nodene kaller vi for den indre nodens nærmeste åpninger. Eksempel: I figuren under er a og b indre noder. c, d, e, f, og g er åpne noder. a s nærmeste åpninger er c, mens b s nærmeste åpninger er d og e. Husk at nodenes id er et heltall, og at bokstavene a-g bare brukes for å entydig identifisere nodene på figuren. Dette er spesielt aktuelt om flere har lik id. Vi er interessert i å raskt kunne gå fra en indre node til en av dens nærmeste åpninger. I hver indre node i treet vil derfor variabelen sti angi retningen til en av de nærmeste åpningene, dvs. at den peker til det samme som enten left eller right, avhengig av hvilken vei man må gå for å komme til nærmeste åpne node. Variabelen avstand angir antall mellomliggende kanter fra noden til en av de nærmeste åpningene. Dersom det finnes en likeverdig nærmeste åpning i både venstre og høyre subtre, skal sti være like left. For åpne noder er sti lik NULL og avstand lik 0. Når det skal settes inn en ny node i treet, skal den plasseres rett under den nærmeste åpningen vi kommer til ved å følge sti -pekerne nedover i treet. Om den åpne noden vi da kommer til ikke har noen barn, skal den nye noden settes inn som venstre subtre, ellers skal den settes inn der det er plass. Etter innsettingen må vanligvis variablene sti og avstand justeres i en del av nodene for at de skal stemme med kravene som er beskrevet ovenfor. 4

a) Vi skal sette inn en node (h) med id lik 3 i treet som er tegnet i figuren ovenfor. Tegn hvordan treet ser ut, inklusive variablene sti og avstand i hver node, både før og etter innsetting av en node med id lik 3. b) Anta at vi har et binært tre, der variablene sti og avstand allerede er riktig satt. Lag funksjonen void skriv_indre_og_aapne(node rot) som først skriver ut id ene til alle indre noder i treet, og deretter skriver ut id ene til alle åpne noder. Hint: Funksjonen bør nok benytte seg av rekursive funksjoner som utfører de to oppgavene. c) Anta at vi har et binært tre, der variablene sti og avstand i hver node ikke er satt riktig etter kravene som er beskrevet ovenfor. Lag funksjonen void stifinner(node rot) som rekursivt går gjennom et tre der roten pekes ut av parameteren rot, og sørger for at sti og avstand settes til riktige verdier i alle nodene. d) Lag funksjonen void sett_inn(node rot, int v) som lager en ny node med id lik v og setter den inn i treet med rot i rot, på nærmeste ledige plass slik som angitt ovenfor. Funksjonen skal også oppdatere andre noder i treet, slik at variablene sti og avstand er korrekte i alle noder, også etter innsettingen. Oppgave 4 (koding, 20%) Studer følgende mønster av stjerner og innledende blanke: Skriv et komplett program, bl.a. inneholdende en rekursiv funksjon, som genererer eksakt dette mønsteret. NB 1: Legg merke til de innledende blanke på de fleste av linjene. NB 2: De tilsynelatende blanke tegnene mellom stjernene (på hver linje) teller ikke med. NB 3: Den rekursive funksjonen, som foretar utskriften, får kun lov til å skrive innholdet på en stjernelinje! Lykke til! frode@haug.com 5