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

Like dokumenter
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 E K S A M E N. EKSAMENSDATO: 12. desember 1995 TID:

KONTINUASJONSEKSAMEN

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

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:

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:

Grunnleggende datakunnskap og programmering. EKSAMENSDATO: 16. desember 1997

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

Kontinuasjonseksamen

KONTINUASJONSEKSAMEN

KONTINUASJONSEKSAMEN

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

GJØVIK INGENIØRHØGSKOLE

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

KONTINUASJONSEKSAMEN

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

Algoritmer og Datastrukturer

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

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

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. Grunnleggende programmering 03HBIND*, 03HBINFA, 03HBINE*, 03HBMETEA, 03HBMEMAA, 03HBGEOA

Algoritmer og Datastrukturer

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

Kontinuasjonseksamen

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

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

Kontinuasjonseksamen

Kontinuasjonseksamen

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Definisjon av binært søketre

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:

Kontinuasjonseksamen

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

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.

UNIVERSITETET I OSLO

KONTINUASJONSEKSAMEN

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer

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

Oppgave 1. Sekvenser (20%)

KONTINUASJONSEKSAMEN

UNIVERSITETET I OSLO

EKSAMEN med løsningsforslag

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

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

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

Binære trær: Noen algoritmer og anvendelser

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

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

Hjemmeeksamen 1 i INF3110/4110

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

INF2220: Forelesning 2

Algoritmer og Datastrukturer

Definisjon: Et sortert tre

Algoritmer og Datastrukturer

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

GJØVIK INGENIØRHØGSKOLE

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

KONTINUASJONSEKSAMEN

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

København 20 Stockholm

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

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

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

Kontinuasjonseksamen

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

Høgskolen i Gjøvik Avdeling for informatikk og medieteknikk. Eksamen. Objekt-orientert programmering

Algoritmer og datastrukturer Eksamen

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

Norsk informatikkolympiade runde

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

UNIVERSITETET I OSLO

INF1020 Algoritmer og datastrukturer GRAFER

INF2220: Forelesning 1

Kontinuasjonseksamen

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema

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

LO118D Forelesning 12 (DM)

Algoritmer og Datastrukturer

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

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.

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

Kontinuasjonseksamen

Et eksempel: Åtterspillet

Transkript:

Høgskolen i Gjøvik Avdeling for Teknologi E K S A M E N FAGNAVN: FAGNUMMER: Algoritmiske metoder I L 189 A EKSAMENSDATO: 11. desember 2000 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. 4, 11 og 16 i læreboka. a) Såkalt «dobbelorder traversering» av binære trær er en kombinasjon av preorder og postorder traversering. Anta at vi i hver node har to tegn: ch1 (stor bokstav) og ch2 (liten bokstav). Vi kan skrive ut disse verdiene i dobbelorder rekkefølge på følgende måte: void dobbelorder (node* t) { if (t!= z) { cout << t->ch1; dobbelorder(t->l); dobbelorder(t->r); cout << t->ch2; Skriv resultatet om vi anvender denne algoritmen på følgende tre: A a B b C c D d E e F f En spesiell type traverseringsmetode for binære trær produserer sekvensen «ABDFFFDDBEEEBACCCA» ved å anvendes på treet: A B C D E F Beskriv kort algoritmen som utfører denne traverseringen. b) Teksten «P U L T O S T K R E M» (i denne rekkefølge fra venstre til høyre, blanke 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.) 2

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 (3 - (k % 3)); 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 «PULTOSTKREM» 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.) 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: AB AC DE BD AF 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)) 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: 10 20 A K F 13 18 8 D 12 9 I 15 B J C 9 1 5 11 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 begrunnelse for hvorfor kanten EG hører med i grafens minimums spenntre. 4. Tegn opp et minimums spenntre for grafen (du trenger ikke å angi «fringen» underveis). 3

c) Følgende deterministiske endelige tilstandsmaskin (FSM) er gitt: M = ( { q0, q1, q2, q3, q4, { a, b, c,, q0, { q3 ) Transisjonstabellen: ( q0, a ) = q1 ( q0, b ) = q4 ( q0, c ) = q3 ( q1, a ) = q0 ( q1, b ) = q2 ( q1, c ) = q3 ( q2, a ) = q1 ( q2, b ) = q2 ( q2, c ) = q3 ( q3, a ) = q3 ( q3, b ) = q3 ( q3, c ) = q3 ( q4, a ) = q0 ( q4, b ) = q4 ( q4, c ) = q3 Tegn tilstandsmaskinen. Er det mulig å tegne denne FSM en enklere? Hva slags setninger/språk godtar den? I så fall: gjør det. Oppgave 3 (koding, 25%) I en vekted, retted graf, kan hver node ha maksimalt 10 naboer. Nodene er representert slik: struct node { int ant_naboer; // Antall naboer, 0 <= ant_naboer <= 10 int nabo[10]; // Nodenummere for alle direkte naboer. int vekt[10]; // Kantvekter. ; Arrayene «nabo» og «vekt» inneholder informasjon om de direkte forbindelsene noden har til andre noder i grafen. Bare de «ant_naboer»-1 første plassene i disse arrayene er i bruk i hver node. Hvis f.eks. «ant_naboer» er lik 1, så vil bare indeks nr.0 i de to arrayene være i bruk. Dersom nabo[0] er lik 2 og vekt[0] er lik 5 i en node, betyr det at det går en kant med vekt 5 fra denne noden til node nummer 2. Alle kanter i grafen har vekter større enn 0 (null). Det finnes i alt N noder i grafen, nummerert fra 0 til N-1. Hver node i grafen er det direkte tilgang til via arrayen «graf»: node* graf[n]; I denne oppgaven skal du lage resten av programmet som legger data om kantene i en graf inn i et binært søketre. Grafen er representert som beskrevet ovenfor. Det binære søketreet skal inneholde en «tre_node» for hver kant i grafen, med informasjon om kantvekt og om hvilke to noder kanten går fra og til. Nederst på hver gren i treet er det z-noder (som i læreboka). En «tre_node» er definert slik: struct tre_node { int vekt; int til, fra; ; tre_node *l,*r; // Kantvekt. // Nodenummere i grafen for de to nodene som // er knyttet til hverandre med denne kanten. // Pekere til venstre og høyre barn i treet. Søketreet skal være sortert på kantvektene, slik at kantvekter som er mindre legges til venstre for en tre_node, og kantvekter som er større eller lik vekten i en tre_node legges til høyre for den. Løsningen din skal bl.a. inneholde funksjonen: tre_node* kant_tre(); som bygger opp et søketre med kant-informasjon som beskrevet ovenfor, og returnerer en peker til roten i dette treet. (Rekursive) funksjon(er) kan selvsagt benytte de globale variablene/deklarasjonene gitt i teksten ovenfor («node», «N», «graf», «z» og «tre_node»). NB: Du skal ikke benytte flere/andre globale variable eller nye verdier inni struct ene enn det som er angitt ovenfor! 4

Oppgave 4 (koding, 25%) En person mottar et gitt antall kronestykker som kalles INITIELT. Vedkommende har så to muligheter: 1. Be om, og motta ytterligere 53 kronestykker eller 2. Dersom vedkommende har et partall kronestykker kan (men er ikke nødt) hun/han levere fra seg halvparten av de kronestykkene vedkommende har. For hver gang vedkommende utfører punkt 1 eller 2 ovenfor, kalles dette et «steg» i spillet. Målet er å ende opp med eksakt 91 kronestykker på N steg eller færre. F.eks: Dersom INITIELT er 99 og N er 4, vil følgende sekvens av steg nå målet: 99 152 76 38 91 Pkt.1 Pkt.2 Pkt.2 Pkt.1 Skriv en rekursiv funksjon bool spill(int ant_kroner, int n) som returnerer true / false til om det er mulig å nå målet på 91 kronestykker med N eller færre steg. Når den (etter evt. å ha funnet et positivt svar) trekker seg tilbake i rekursjonen, skal den skrive det antall kronestykker som er involvert i/på vedkommende steg. Lykke til! frode@haug.com 5