Fakultet for naturvitenskap og teknologi EKSAMENSOPPGAVE Eksamen i: Dato: 15.mai 2018 Klokkeslett: 09:00 13:00 Sted: Tillatte hjelpemidler: Adm.bygget, rom K1.04 og B154 Ingen Type innføringsark (rute/linje): Antall sider inkl. forside: Kontaktperson under eksamen: Telefon/mobil: WiseFlow 5 Robert Pettersen 47247552 Vil det bli gått oppklaringsrunde i eksamenslokalet? Svar: JA Hvis JA: ca. kl. 10:30 NB! Det er ikke tillatt å levere inn kladdepapir som del av eksamensbesvarelsen. Hvis det likevel leveres inn, vil kladdepapiret bli holdt tilbake og ikke bli sendt til sensur. Postboks 6050 Langnes, N-9037 Tromsø / 77 64 40 00 / postmottak@uit.no / uit.no
Side 2 av 5 sider Eksamen INF-1101 Datastrukturer og algoritmer Vår 2018 Eksamenssettet består av 4 oppgaver. Les oppgaveteksten grundig og disponer tiden slik at du får tid til å svare på alle oppgavene. I noen oppgaver kan det være nødvendig å tolke oppgaveteksten ved å gjøre noen antagelser - gjør i så fall rede for hvilke antagelser du har gjort, men pass på å ikke gjøre antagelser som trivialiserer oppgaven. Der du skal utvikle eller beskrive en algoritme anbefales det at du først beskriver algoritmen på et høyt abstraksjonsnivå, f.eks. med figurer, før du går videre med detaljer og eventuell pseudokode. Dersom det spørres etter en implementasjon i C kreves det ikke 100% syntaktisk korrekt kode. Dersom det spørres etter pseudokode kan du kan også skrive ren C-kode om du ønsker. Husk også at du kan referere tilbake til funksjoner du tidligere har definert. Oppgave 1-30% a) Forklar hva en Abstrakt Datatype (ADT) er, og hva som er motivasjonen for og formålet med å bruke ADTer. Bruk gjerne eksempler. b) Forklar hva et binært søketre er, og foreslå en konkret datastruktur i C for å representere binære søketrær, hvor nøklene er heltall (ikke lag en ADT). c) Implementer en algoritme i C som bruker datastrukturen du har foreslått, traverserer et binært søketre, og skriver ut alle nøklene i treet, i stigende rekkefølge. Hint: det enkleste er å implementere dette ved hjelp av rekursjon. d) Et balansert søketre er et søketre som har noen ytterlige restriksjoner som direkte eller indirekte begrenser den maksimale dybden til treet. Hva er poenget med dette, og hvordan påvirker det den algoritmiske kompleksiteten til de ulike operasjonene man vanligvis ønsker å gjøre med et søketre (søking, innsetting, sletting)?
Side 3 av 5 sider Oppgave 2-30% Gitt ett array A som inneholder N heltall. a) Beskriv med pseudokode hvordan Quicksort algoritmen fungerer for å sortere A. Forklar spesifikt hva som menes med pivot-element. b) Anta at tallene i A er sortert. Lag en funksjon som finner ut om ett gitt tall finnes i arrayet. Funksjonen skal ha kompleksitet O(log n). c) Anta at tallene i A er sortert. Anta videre at du ønsker å konstruere et balansert binært søketre basert på tallene i A. Skisser i pseudo-kode en algoritme for å konstruere et balansert binært søketre basert på tallene i A. Du kan bruke datastrukturen fra Oppgave 1b for å konstruere det binære søketreet.
Side 4 av 5 sider Oppgave 3-30% a) Hva er en rotasjon i et binært søketre, og hvorfor er det en nyttig byggestein for å lage selvbalanserende trær? Tegn et spesifikt eksempel på en rotasjon; enten en høyre-rotasjon eller en venstre-rotasjon. Hvilken kompleksitet har en enkelt rotasjon, som en funksjon av N, hvor N er det totalle antall noder i treet? b) Hva er et 2-3-4 tre? Forklar hvordan innsetting gjøres i et 2-3-4 tre, og hvorfor treet bestandig er perfekt balansert. c) Forklar hva et rød-svart tre er og hvordan et 2-3-4 tre kan representeres som et rød-svart tre. Hvilke garantier kan man gi når det gjelder høyden på et rød-svart tre i forhold til antall noder N i treet?
Side 5 av 5 sider Oppgave 4-10% Gitt en hashtabell med 7 bøtter ("buckets") og en hashfunksjon h(i) = i mod 7. Anta at du skal sette tallene 23, 48, 35, 4, 11 inn i tabellen. (a) Illustrer den resulterende hashtabellen dersom du bruker lenking ( chaining ). (b) Illustrer den resulterende hashtabellen dersom du bruker åpen addressering ( open addressing ) og lineær probing.