Algoritmer og Datastrukturer

Like dokumenter
Algoritmer og Datastrukturer

EKSAMEN med løsningsforslag

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer

EKSAMEN. Algoritmer og datastrukturer

Algoritmer og Datastrukturer IAI 21899

Definisjon av binært søketre

Algoritmer og Datastrukturer

Algoritmer og datastrukturer Eksamen

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

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

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

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

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

Algoritmer og datastrukturer Løsningsforslag

UNIVERSITETET I OSLO

Løsningsforslag. Oppgave 1.1. Oppgave 1.2

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

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

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

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

LO118D Forelesning 12 (DM)

Binære trær: Noen algoritmer og anvendelser

EKSAMEN. Emne: Algoritmer og datastrukturer

Kap 9 Tre Sist oppdatert 15.03

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

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

EKSAMEN. Algoritmer og datastrukturer. Eksamensoppgaven: Oppgavesettet består av 10 sider inklusiv vedlegg og denne forsiden.

Definisjon: Et sortert tre

INF2220: Forelesning 1

Algoritmer og Datastrukturer

Obligatorisk oppgave 1 INF1020 h2005

INF2220: Forelesning 1

Lars Vidar Magnusson

PG4200 Algoritmer og datastrukturer Forelesning 7

København 20 Stockholm

Algoritmer og datastrukturer Løsningsforslag

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

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

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

UNIVERSITETET I OSLO

INF2220: Forelesning 2

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

Løsningsforslag EKSAMEN

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Hvorfor sortering og søking? Søking og sortering. Binære søketrær. Ordnet innsetting forbereder for mer effektiv søking og sortering INF1010 INF1010

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Løsningsforslag

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

EKSAMEN. Emne: Algoritmer og datastrukturer

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

Et eksempel: Åtterspillet

INF1010 notat: Binærsøking og quicksort

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

INF Algoritmer og datastrukturer. Hva er INF2220? Algoritmer og datastrukturer

Dagens plan: INF Algoritmer og datastrukturer. Repetisjon: Binære søketrær. Repetisjon: Binære søketrær

Liste som abstrakt konsept/datatype

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013

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

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

Dagens tema. INF Algoritmer og datastrukturer. Binærtrær. Generelle trær

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

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

UNIVERSITETET I OSLO

Binære Søketre. Egenskap. Egenskap : Grafisk. Egenskap : Kjøretid. Egenskap : Kjøretid. Egenskap : Oppsumering. Binære Søketre

Heap* En heap er et komplett binært tre: En heap er også et monotont 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

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

Eksamensoppgave i TDT4120 Algoritmer og datastrukturer

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

G høgskolen i oslo. Emne: Algoritmer og datastrukturer. Emnekode: 80131A. Faglig veileder: UlfUttersrud. Gruppe(r) : Dato:

Algoritmer og datastrukturer Assignment 11 Side 1 av 5

Notater til INF2220 Eksamen

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

INF2220: Forelesning 2

Oppgave 1. Sekvenser (20%)

Et eksempel: Åtterspillet

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

Algoritmer og datastrukturer Eksamen 22. februar 2011

Eksempel: Uttrykkstrær I uttrykkstrær inneholder bladnodene operander (konstanter, variable,... ), mens de interne nodene inneholder operatorer.

UNIVERSITETET I OSLO

Object [] element. array. int [] tall

Enkle datastrukturer. Lars Greger Nordland Hagen. Introduksjon til øvingsopplegget og gjennomgang av python

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

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

INF Algoritmer og datastrukturer

Kap.8 Sortering og søking sist oppdatert 16.03

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {}

Generelle trær BINÆRTRÆR. Binærtrær

UNIVERSITETET I OSLO

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

Algoritmer og datastrukturer Løsningsforslag

INF Algoritmer og datastrukturer

UNIVERSITETET I OSLO

Løsningsforslag for Obligatorisk Oppgave 3. Algoritmer og Datastrukturer ITF20006

Algoritmer og datastrukturer Eksamen

Emnekode: I-Dato: I ~ Antall oppgaver: I I Aiie -sk:i=rftlige - bme trykte og håndskrevne, samt alle typer

Transkript:

Eksamen i Algoritmer og Datastrukturer IAI 20102 Høgskolen i Østfold Avdeling for informatikk og automatisering Lødag 5. juni 2004, kl. 09.00-13.00 LØSNINGSFORSLAG 1

Del 1 60% Oppgave 1.1-10% Forklar kort (helst ved hjelp av passende figurer) hvordan innsettingssortering virker. Konseptuelt har man to mengder, en som er usortert, Og en som er sortert. Man starter med tom sortert mengde, og i hver iterasjon tar man ett vilkårlig element fra den usorterte mengden og setter inn på rett plass i den sorterte. Angi algoritmens orden med O-notasjon og gi en kort vurdering av metodens brukbarhet. Verste tilfelle kvadratisk. Hvis input er tilnærmet ferdig sortert, vil arbeidsmengden bli tilnærmet lineær. Generelt dårlig ved store datamengder. Bra ved nesten sortert input, eller ved sortering av små mengder pga enkel implementasjon og ikke overhead i form av hjelpestruturer etc. Oppgave 1.2-5% Vis hvert steg i algoritmen (dvs. hvordan tabellen ser ut i hver iterasjon) brukt på sekvensen 45-12 8 13 97 83 -> 45 12 8 13 97 83 -> 45 8 13 97 83 -> 12 45 13 97 83 -> 8-12 45 97 83 -> 8 12-13 45 83 -> 8 12-13 45 97 - -> 8 12-13 45 83-97 Oppgave 1.3-5% Implementerer metoden Del1.skriv(Node liste) som skriver ut verdiene av tallene i en enkeltlenket liste som starter med noden liste. void skriv(node liste) { if (liste == null) return; Node n = liste; while (n!= null) { System.out.println(n.tall+" "); n = n.neste; System.out.println(); Oppgave 1.4-5% 2

Implementerer metoden Del1.tilfeldigListe(int n) som genererer en enkeltlenket liste med n noder med tilfeldige tallverdier mellom 0 og 1 (du kan gjerne bruke Math.random() som returnerer en tilfeldig double verdi mellom 0 og 1). Node tilfeldigliste(int n) { if (n == 0) return null; Node liste = new Node(Math.random()); Node node = liste; for (int i = 1; i < n; i++) { node.neste = new Node(Math.random()); node = node.neste; return liste; Oppgave 1.5-10% Implementer metoden Del1.settInn(Node sortert, Node inn) som plasserer noden inn på rett plass i den lenkede listen som starter med noden sortert, og som vi antar er korrekt sortert på stigende verdi av tall. Metoden returnerer en referanse til den første noden i den nye listen (som da også vil være sortert). Du kan anta at alle verdier er distinkte (ingen duplikater). Node settinn(node sortert, Node inn) { if (sortert == null inn == null) return sortert; if (inn.tall < sortert.tall) { inn.neste = sortert; return inn; Node n = sortert; while (n.neste!= null) { if (n.tall < inn.tall && n.neste.tall > inn.tall) { inn.neste = n.neste; n.neste = inn; return sortert; n = n.neste; inn.neste = null; n.neste = inn; return sortert; Oppgave 1.6-10% 3

Implementer den rekursive metoden Del1. sorterrekursivt (Node usortert, Node sortert), som blir kalt i driverrutinen Del1.sorter(Node liste). Driverrutinen skal returnere en referanse til den første noden i en sortert versjon av listen (med stigende tallverdi). Node sorterrekursivt (Node usortert, Node sortert) { if (usortert == null) return sortert; Node nesteusortert = usortert.neste; sortert = settinn(sortert, usortert); return sorterrekursivt (nesteusortert, sortert); Oppgave 1.7-15% En medstudent forteller deg at han har funnet en måte som han tror kanskje kan gjøre innsettingssortering mer effektiv. Når man skal sette inn et element i den ferdig sorterte delen, mener han det er mulig å bruke prinsippet for binærsøk. Diskuter kort denne ideen, både anvendt på innsettingssortering av tabeller (arrays) og referansestrukturer. Angi kompleksiteten i O-notasjonen i begge tilfellene. Tabeller: Å finne rett plass blir en logaritmisk operasjon men: å flytte elementene krever i verste tilfelle 1 + 2 + 3 + flyttinger altså den samme arbeidsmengden som i originalutgave. Lister: Binærsøk på en lenket liste er i utganspunktet en dårlig ide men hva om vi bruker et binært søketre som jo er å anvende prinsippet om binærsøk så blir oppgaven å sette inn alle elementene inn i et binært søketre og det vet vi er en logaritmisk operasjon, inkludert en eventuell balanseringsoperasjon. Denne metode blir dermed loglineær, og bedre enn vanlig innsettingssortering. Slutt på del 1 4

Del 2-40% Oppgave 2.1-5% A B C / D E F Skriv ut rekkefølgen på nodene slik de blir behandlet i en postorder traversing. D E B F C A Oppgave 2.2-10% Ved en inorder traversering av et tre får vi følgende rekkefølge: D E B F C - A Tegn et binært tre som kan generere denne sekvensen. Flere alternativer, f.eks: Eller f.eks: B E C / D F A F E A / D B C 5

Oppgave 2.3-10% Høyden i et tre er definert som den største av avstandene fra rota til bladnodene. Høyden til et tre som består av kun rota er 0. Et komplett binærtre er kjennetegnet ved at for enhver node i treet, så gjelder det at enten har nodens venstre og høyre subtre lik høyde, eller så er det venstre subtreet ett nivå høyere enn det høyre subtreet. Implementer metoden Del2.komplett(TreNode rot) som sjekker om treet representert ved noden rot er komplett eller ikke. OBS: Det finnes flere formelle definisjoner av et komplett tre. Denne definisjonen avviker noe fra den som er brukt i eksemplene i forelesningene, ved at den tillater at det nederste nivået ikke er er helt fyllt opp fra venstre, dvs. at nodene på dette nivået kan forekomme mer spredt (men ikke vilkårlig spredt!). Her lønner det seg å ha en separat rutine for utregning av høyden i et tre (husk at høyen er lik antall nivåer minus en): int hoyde(node rot) { // Vi benytter oss av at høyden i et tre er lik // nivået vi er på (rota) + antall nivåer i subtreet (venstre/høyre) // med størst høyde // Vi må sørge for at bladnodene får høyde lik 0. if (rot == null) return -1; // Finner høyde i venstre/høyre subtre rekursivt int v = høyde(rot.venstre); int h = høyde(rot.hoyre); //Den totale høyden er da lik 1 pluss høyden til det største subtreet if (v>h) { return v+1; else { return h+1; boolean komplett (TreNode rot) { if (rot == null) return true; int v = hoyde(rot.venstre); int h = hoyde(rot.hoyre); if (h > v v h > 1) return false; return komplett(rot.venstre) && komplett(rot.hoyre); 6

Oppgave 2.4-15% I et komplett binærtre kan nodene indekseres ifølge levelorder traversering, slik at for enhver node med indeks i, vil det venstre barnet ha indeks 2*i +1, og det høyre 2*i +2. Dermed kan et slikt tre representeres i en tabell med referanser til (eller verdier av) innholdet i nodene med korresponderende indeks. Det første elementet i en slik tabell (indeks = 0) representerer altså rota i dette treet. Implementer metoden Del2.skrivUtPreOrder(char[] tabell, int index) som skriver ut subtreet med rot som korresponderer med index (i preorder rekkefølge). // Oppgaven spesifiserer ikke om tabellens lengde tilsvarer et // komplett tre som er fyllt helt opp (perfekt binærtre). // I dette tilfelle må da de tomme plassene i tabellen være fyllt // med et tegn som angir dette. Dette gjelder også hvis man antar at // treet er bygget etter definisjonen gitt i forrige oppgave. // Hvis man ikke har tenkt på denne detaljen, vil metoder som ikke // sjekker på tomme noder bli gitt full uttelling (for eksempel // noe liknende det som er foreslått her. void skrivutpreorder(char[] tabell, int index) { // Skriver ut innholdet av subtreet // med noden som korresponderer med den gitt indeksen i treet // som rot. if (index >= tabell.length) return; // Hvis vi tar utangspunkt i definisjonen gitt i forrige oppgave, // kan System.out.println(tabell[index]); skrivutpreorder(tabell, (2*index)+1); skrivutpreorder(tabell, (2*index)+2); Slutt på del 2 7