INF1010 notat: Binærsøking og quicksort

Størrelse: px
Begynne med side:

Download "INF1010 notat: Binærsøking og quicksort"

Transkript

1 INF1010 notat: Binærsøking og quicksort Ragnhild Kobro Runde Februar 2004 I dette notatet skal vi ta for oss ytterligere to eksempler der rekursjon har en naturlig anvendelse, nemlig binærsøking og quicksort. Som repetisjon(?) skal vi også ta med lineær søking og innstikksortering. 1 Søking Problemstilling: Gitt en array og et element, finnes elementet i arrayen? For enkelhets skyld skal vi i det følgende holde oss til arrayer der elementene er heltall, men de samme strategiene kan selvfølgelig også brukes med andre typer elementer. 1.1 Lineær søking En vanlig strategi for å lete etter et element i en array er denne: 1. Start på begynnelsen av arrayen. 2. Let gjennom arrayen element for element, inntil (a) det søkte elementet er funnet, eller (b) slutten på arrayen er nådd 1

2 I Java kan dette for eksempel programmeres som følger: int linearsok(int[] a, int elem) { boolean funnet = false; int indeks = 0; while (indeks < a.length &&!funnet) { if (a[indeks] == elem) { funnet = true; else { indeks++; if (funnet) { return indeks; else { return -1; Hvis elementet finnes i arrayen, returneres indeksen det ble funnet på. Finnes det flere like elementer i arrayen, vil lineærsøk gi indeksen til det første. Hvis elementet det søkes etter ikke finnes i arrayen i det hele tatt, returneres her -1 for å indikere dette. For å kunne vurdere hvor bra denne søke-strategien er, ser vi på hvor mange elementer vi må lete gjennom før vi eventuelt finner det vi søker etter. Hvis vi er riktig heldige, finnes elementet vi leter etter øverst i arrayen, og vi får bare ett oppslag før vi er ferdige. I verste fall ligger elementet helt sist, og vi må lete gjennom alle de andre elementene før vi finner det vi søker etter. For elementer som finnes i arrayen, må vi i snitt lete gjennom halvparten av elementene. For et element som ikke finnes i arrayen, må vi alltid lete gjennom alle elementene før vi kan si at det ikke finnes. For en array med 1 million elementer, må vi altså i snitt regne med å bruke oppslag, og i verste fall 1 million oppslag på å finne et element som eksisterer i arrayen. For å finne ut at et element ikke eksisterer bruker vi 1 million oppslag. Generelt: Med n elementer i arrayen, må vi i verste fall lete gjennom alle n elementene. Med dobbelt så mange elementer, risikerer vi dobbelt så mange oppslag. Dette kalles lineær tid. 2

3 1.2 Binærsøking For en usortert array, er det generelt ikke mulig å gjøre det bedre enn med lineær søking. Hvis arrayen derimot er sortert, har vi en meget effektiv søkestrategi kalt binærsøk. Ideen her er at vi ved hvert oppslag i arrayen halverer søkerommet, det vil si at vi halverer antall mulige elementer vi må lete gjennom (i motsetning til ved lineær søking, der vi ved hvert oppslag bare kan utelukke ett element). I pseudokode kan denne ideen uttrykkes ved: if < antall elementer det skal søkes gjennom = 0 > return -1; else { midten = < indeksen til det midterste elementet > if (elem == a[midten]) return midten; else if (elem < a[midten]) < let etter elem i første halvdel av arrayen > else // Vet: elem > a[midten] < let etter elem i andre halvdel av arrayen > Det er her naturlig å bruke rekursive kall til de to delene som søker gjennom mindre områder av arrayen. Som parametre til metoden sender vi derfor med første og siste indeks i det array-segmentet vi skal lete i, i tillegg til selve arrayen og elementet det letes etter. Med start-indeks fra og slutt-indeks til, kan vi beregne indeksen midt mellom disse som (fra+til)/2. Hvis elementet på denne midt-indeksen er lik det vi leter etter, er vi ferdige. Hvis derimot dette midt-elementet er større enn det vi leter etter, gjør vi et rekursivt kall for å lete videre i første halvdel av det aktuelle array-segmentet. Siden vi allerede har sjekket midt-elementet, holder det å lete opp til elementet på indeks midten-1. Tilsvarende holder det å lete fra midten+1 hvis elementet vi leter etter er større enn midt-elementet. 3

4 a a fra midten til a fra midten til ' (! " # # $ $ % % & & ' (! " # # $ $ % % & & ' ( ! " 37 # # $ $ 41 % % & & 43 fra til midten Figur 1: Eksempel på binærsøking (leter etter 11) Fullstendig Java-kode for binær-søking blir da: int binarsok(int[] a, int fra, int til, int elem) { int midten; if (fra > til) { return -1; else { midten = (fra + til) / 2; if (elem == a[midten]) { return midten; else if (elem < a[midten]) { return binarsok(a, fra, midten-1, elem); else { // elem > a[midten] return binarsok(a, midten+1, til, elem); Som ellers når vi bruker rekursjon, må vi sørge for at metoden terminerer, og ikke gir uendelig rekursjon. Dette gjøres generelt ved at det må finnes minst ett basistilfelle, som de rekursive kallene må gå i retning av. For binærsøking er basistilfellet når elementet er funnet, eller array-segmentet vi skal søke i inneholder null elementer. Progresjonen sikres ved at størrelsen på arraysegmentet alltid reduseres når det rekursive kallet gjøres. Figur 1 viser et eksempel på hvordan binærsøking fungerer når vi leter etter elementet 11. Skraveringen viser hvilke elementer vi til nå har kunnet utelukke. Etter tre oppslag, finner vi elementet vi søker etter. Figur 2 på neste side viser hva som skjer når vi leter etter elementet 25, som ikke eksisterer. 4

5 a fra a a midten fra fra til midten midten !! " " # $ % % & & ' ' ( (!! " " # $ % % & & ' ' ( ( !! " " 31 # $ 37 % % & & 41 ' ' ( ( 43 a ) ) * * +, : ; ; < < = = > A A B B C C D D ) ) * * +, : ; ; < < = = > A A B B C C D D ) ) * * 1 +, / / : 19 ; ; < < = = > > 37 A A B B 41 C C D D 43 a til fra midten E E F F G H J J L L M N P P Q R S S T T U V W W X X Y Z [ [ \ \ ] ^ _ _ ` ` a a b b E E F F G H J J L L M N P P Q R S S T T U V W W X X Y Z [ [ \ \ ] ^ _ _ ` ` a a b b E E F F 1 G H 2 I I J J 3 K K L L 5 M N 7 O O P P 11 Q R 13 S S T T 17 U V 19 W W X X 23 Y Z 29 [ [ \ \ 31 ] ^ 37 _ _ ` ` 41 a a b b 43 til fra Figur 2: Eksempel på binærsøking som feiler (leter etter 25) til til For en array med 1 million elementer, vil vi ved binærsøking aldri trenge mer enn 20 oppslag, uansett om elementet finnes i arrayen eller ikke. Generelt har vi at siden søkerommet halveres ved hvert oppslag, vil dobbelt så mange elementer i arrayen bare føre til ett oppslag ekstra. Vi sier at binærsøking bruker logaritmisk tid. 1 2 Sortering Problemstilling: Gitt en array med elementer, sorter denne! Også her skal vi for enkelhets skyld holde oss til heltalls-elementer. 2.1 Innstikksortering Hovedprinsippet i innstikksortering kan forklares som følger: Gitt en sortert array og et element, legg ( stikk ) elementet inn i arrayen på en slik måte at 1 Mer om dette i INF1020: Algoritmer og datastrukturer. 5

6 denne forblir sortert. Dette kan gjøres ved å 1. Lete frem til indeksen der elementet skal inn 2. Sette elementet på riktig plass 3. Skyve de resterende elementene ett hakk til høyre. Den vanlige implementasjonen av innstikksortering slår sammen flere av disse ved å: 1. Starte på slutten av arrayen 2. Så lenge array-elementet er større enn elementet som skal legges til, flyttes array-elementet ett hakk til høyre. 3. Plassere det nye elementet på riktig plass. I Java blir dette seende slik ut (der tmp er elementet som skal legges til, og i er initialisert til å være indeksen til det siste elementet i arrayen): while (i >= 0 && a[i] > tmp) { a[i+1] = a[i]; i--; a[i+1] = tmp; For å sortere en hel (usortert) array, vil innstikksortering hele tiden sørge for at arrayen er sortert fra indeks 0 og et stykke utover ett hakk lenger for hver gang. Hvis arrayen er sortert fra 0 til k, vil neste skritt være å sortere inn elementet på indeks k+1, etter beskrivelsen over. Når dette er gjort, vil arrayen være sortert fra 0 til k+1, og sorteringen fortsetter med elementet på indeks k+2 og så videre inntil hele arrayen er sortert. En viktig observasjon som sikrer at dette fungerer, er at array-segmentet fra indeks 0 til indeks 0 alltid er sortert (det inneholder jo bare ett element). Første skritt i innstikksortering blir dermed å sortere elementet på indeks 1 riktig i forhold til dette sorterte segmentet (på ett element). 6

7 Opprinnelig: Etter k = 0: Etter k = 1: Etter k = 2: Etter k = 3: Etter k = 4: Etter k = 5: Figur 3: Eksempel på innstikksortering Den komplette metoden for innstikksortering i Java, ser da slik ut: void innstikksortering(int[] a) { for (int k = 0; k < a.length-1; k++) { if (a[k+1] < a[k]) { // a[k+1] står på feil plass, ta den ut int tmp = a[k+1]; // Skyv array-elementene mot høyre, ett hakk // om gangen til vi finner riktig plass til tmp int i = k; while (i >= 0 && a[i] > tmp) { a[i+1] = a[i]; i--; // Sett tmp inn på riktig plass a[i+1] = tmp; Eksempelet i figur 3 viser hvordan arrayen vil se ut etter hver runde i forløkken. Oppgave: If-testen i koden for innstikksortering er egentlig unødvendig. Forklar hvorfor vi får riktig resultat selv om den droppes (mens resten av koden er uendret). 7

8 2.2 Quicksort Det viser seg at innstikksortering er en grei metode å bruke for å sortere små datamengder (typisk elementer). For større mengder data, vil det stort sett være mer effektivt å bruke quicksort. 2 Selv om det går ganske greit å forstå de grunnleggende ideene i quicksort, har den i praksis vist seg å være forbausende vanskelig å implementere korrekt. Den implementasjonen som gis her er hentet fra [Wei99]. Quicksort fungerer etter følgende prinsipp: Del arrayen i to omtrent like store deler, der alle elementene i den ene delen er mindre enn eller lik alle elementene i den andre delen, og sorter de to delene hver for seg etter samme prinsipp. Analogt med binærsøk, har vi at det å sortere de to delene hver for seg etter samme prinsipp antyder bruk av rekursjon. Det vi må se nærmere på, er hvordan selve delingen kan foretas på en effektiv måte. Ideen er her å finne et egnet element, kalt pivot-elementet, som ferdig sortert skal ligge omtrent midt i arrayen. Selve delingen (gjerne kalt partisjoneringen) vil da si å bytte om på elementene i arrayen slik at alle elementene til venstre for pivot-elementet er mindre enn eller lik dette, og alle elementene til høyre er større enn eller lik. Følgende gir en foreløpig skisse av quicksort: void quicksort(int[] a, int fra, int til) { if (til - fra <= 1) { // Et array-segment på 0 eller 1 element er sortert return; int pivotindeks; int pivot = <et egnet pivot-element> < Partisjoner arrayen slik at: - a[pivotindeks] = pivot - alle elementer før a[pivotindeks] <= pivot - alle elementer etter a[pivotindeks] >= pivot > quicksort(a, fra, pivotindeks-1); quicksort(a, pivotindeks+1, til); 2 For nærmere analyse av innstikksortering og quicksort henvises til INF

9 Hvordan velge pivot-elementet? Det kanskje vanskeligste spørsmålet i quicksort er hvordan velge pivot-elementet. For det første ønsker vi at de to array-segmentene skal bli omtrent like store, for det andre er det viktig at valg av pivot-element ikke tar for lang tid. Et dårlig valg av pivot-element, og quicksort blir ikke særlig effektiv likevel... Det finnes flere mulige strategier, et generelt godt valg er det som kalles midten-av-tre partisjonering. Ideen her er å se på det første, midterste og siste elementet i arrayen, og så velge pivot-elementet lik det mellomste av disse: int midtenavtre(int[] a, int fra, int til) { int midten = (fra + til) / 2; if (a[midten] < a[fra]) { bytt(a, fra, midten); if (a[til] < a[fra]) { bytt(a, fra, til); if (a[til] < a[midten]) { bytt(a, midten, til); // Vet nå: a[fra] <= a[midten] <= a[til], // og vi kan velge pivot = a[midten] // For at resten av partisjoneringen skal bli // mest mulig effektiv, "skjuler" vi pivot-elementet // ved å legge det nest lengst til høyre: bytt(a, midten, til-1); return a[til-1]; // pivot-elementet Vi ser at midtenavtre ikke bare finner et forslag til pivot-element, det sorterer også de tre elementene som vurderes. Siden vi fortsatt ikke vet den nøyaktige indeksen til pivot-elementet, legger vi dette midlertidig i indeksen nest lengst til høyre, det vi si i a[til-1]. Som forklart over består selve partisjoneringen av å flytte alle elementene mindre enn pivot-elementet til begynnelsen av arrayen, og alle elementene 9

10 større enn pivot-elementet til slutten av arrayen. Siden pivot-elementet ikke nødvendigvis er nøyaktig det midterste elementet, vet vi ikke på forhånd hvor skillet mellom de to array-segmentene vil gå. Vi arbeider derfor fra begge ender av arrayen samtidig. Når midtenavtre returnerer, vet vi altså at a[fra] <= a[til-1] <= a[til], det vil si at elementene a[fra] og a[til] allerede ligger i riktig arraysegment. Det som gjenstår er å partisjonere elementene fra og med a[fra+1] til og med a[til-2]. (Når dette er gjort, vil vi også vite den nøyaktige indeksen til pivot-elementet.) Vi lar dermed en hjelpevariabel i starte på indeks fra+1 og hoppe over alle elementer som er mindre enn pivot-elementet. Motsatt vei lar vi hjelpevariabelen j gå nedover fra til-2 og hoppe over alle elementer som er større enn pivot-elementet. Elementet a[i] er nå for stort i forhold til halvdelen det befinner seg i, mens a[j] er for lite i forhold til sin halvdel. Disse to må derfor bytte plass, før i og j leter videre etter feilplasserte elementer. Som et eksempel, anta at arrayen vår i utgangspunktet ser slik ut (med fra lik 0, og til lik 9): a Etter at midtenavtre har sortert elementene a[0], a[4] og a[9], ser arrayen slik ut: a Vi skjuler så pivot-elementet nest lengst til høyre, ved å bytte om a[4] og a[8]: a Dette er altså situasjonen når midtenavtre returnerer. Vi lar så i starte på indeks 1 og gå mot høyre til vi treffer på a[3] som er lik 9, og altså større enn pivot-elementet (6). Tilsvarende vil j starte på indeks 7, og allerede her finner vi 2 som er mindre enn pivot-elementet (6): a Elementene på indeks i og j står feil, og vi bytter dem: i a i 10 j j

11 Letingen etter feilplasserte elementer fortsetter: a Igjen bytter vi om på de feilplasserte elementene: i a Videre leting etter feilplasserte elementer vil gi: i a i og j har nå krysset hverandre, som en indikasjon på at søkingen etter feilplasserte elementer er ferdig. Når partisjoneringen er ferdig, vil i inneholde indeksen til det første elementet som er større enn pivot-elementet. Men dette er egentlig den riktige indeksen til pivot-elementet, og vi bytter dermed denne tilbake fra den skjulte plasseringen nest lengst til høyre: a Videre sortering vil nå skje ved rekursive kall på quicksort, der det første rekursive kallet vil sortere array-segmentet fra 0 (fra) til 5 (pivotindeks-1), mens det andre tar seg av array-segmentet fra 7 (pivotindeks+1) til 9 (til). Selve implementasjonen av quicksort ser da ut som gitt på neste side. j j i i j j 11

12 void quicksort(int[] a, int fra, int til) { if (til - fra <= 1) { // Et array-segment på 0 eller 1 element er sortert return; int pivotindeks; int pivot = midtenavtre(a, fra, til); // Vet: a[fra] <= a[til-1] <= a[til], // der pivot = a[til-1] // Partisjonerer arrayen fra indeks fra+1 // til indeks til-2 int i = fra; int j = til-1; while (true) { while (a[++i] < pivot) { while (a[--j] > pivot) { if (i < j) { bytt(a, i, j); else { break; // a[i] er nå første element i andre halvdel av arrayen // Bytter pivot-elementet tilbake hit pivotindeks = i; bytt(a, pivotindeks, til-1); // Har nå: // - a[pivotindeks] = pivot // - alle elementer før a[pivotindeks] <= pivot // - alle elementer etter a[pivotindeks] >= pivot // Sorterer de to halvdelene hver for seg: quicksort(a, fra, pivotindeks-1); quicksort(a, pivotindeks+1, til); 12

13 Koden som sørger for partisjoneringen kan nok ved første øyekast se temmelig kryptisk ut, men det som skjer er egentlig ikke noe annet enn det som er beskrevet over. Siden midtenavtre har sørget for at a[fra] <= pivot, får vi at j senest vil stoppe på dette elementet. For i har vi at denne senest vil stoppe på a[til-1], det vil si pivot-elementet. Vi slipper derfor å sjekke noen arraygrenser! For små arrayer vil innstikksortering være mer lønnsomt enn quicksort. Det er derfor vanlig å kombinere quicksort og innstikksortering ved å bruke quicksort et stykke på vei, men når array-segmentet er blitt lite nok (typisk 5-20 elementer) brukes innstikksortering istedenfor. (Dette sørger også for at array-segmentet alltid vil bestå av minst tre elementer når midtenavtre kalles!) Hvis vi lar CUTOFF være en konstant som angir hvor mange elementer som heller skal sorteres ved innstikksortering, vil den samlede metoden for quicksort se slik ut: void quicksort(int[] a, int fra, int til) { if (fra + CUTOFF <= til) { < Bruk quicksort som over > else { < Lite array-segment, bruk innstikksortering > Oppgave: I beskrivelsen av quicksort er det ikke sagt så mye om hva som skjer med elementer som er lik pivot-elementet. Sorter 3, 1, 4, 1, 5, 9, 2, 5, 5, 3, 5 ved hjelp av quicksort-metoden over (uten cutoff), og se hva som skjer. Synes du dette virker fornuftig? Hva skjer hvis arrayen består av bare like elementer? Referanser [Bud01] Timothy Budd. Classic data structures in Java. Addison-Wesley, [Hoa62] C.A.R. Hoare. Quicksort. The Computer Journal, 5:10 15, [Mai03] Michael Main. Data Structures & Other Objects Using Java. Addison-Wesley, second edition, [Wei99] Mark Allen Weiss. Data Structures & Algorithm Analysis in Java. Addison-Wesley,

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

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 Hvorfor sortering og søking? Man bør ha orden i dataene umulig å leve uten i informasjonssamfunnet vi blir fort lei av å lete poleksempel internett alt er søking og sortering alternativer til sortering

Detaljer

Quicksort. Fra idé til algoritme.

Quicksort. Fra idé til algoritme. Quicksort Fra idé til algoritme. Quicksortalgoritme algoritmeidé 1. Del arrayen i to deler, slik at alle elementer i den ene delen er mindre enn alle elementer i den andre delen. Q U I C K S O R T A L

Detaljer

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

En implementasjon av binærtre. Dagens tema. Klassestruktur hovedstruktur abstract class BTnode {} En implementasjon av binærtre Dagens tema Eksempel på binærtreimplementasjon Rekursjon: Tårnet i Hanoi Søking Lineær søking Klassestruktur hovedstruktur abstract class { class Person extends { class Binaertre

Detaljer

Rekursjon. Binærsøk. Hanois tårn.

Rekursjon. Binærsøk. Hanois tårn. Rekursjon Binærsøk. Hanois tårn. Hvorfor sortering (og søking) er viktig i programmering «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til

Detaljer

Kap.8 Sortering og søking sist oppdatert 16.03

Kap.8 Sortering og søking sist oppdatert 16.03 Kap.8 Sortering og søking sist oppdatert 16.03 Del 1 Søking - lineær søking m/u sorterte elementer - binærsøking - analyse Del 2 Sortering - gamle sorteringsmetoder fra i høst - nye -analyse Copyright

Detaljer

Logaritmiske sorteringsalgoritmer

Logaritmiske sorteringsalgoritmer Logaritmiske sorteringsalgoritmer Logaritmisk sortering Rekursive og splitt og hersk metoder: Deler verdiene i arrayen i to (helst) omtrent like store deler i henhold til et eller annet delingskriterium

Detaljer

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater

alternativer til sortering og søking binære trær søketrær Ikke-rekursiv algoritme som løser Hanois tårn med n plater Dagens temaer Sortering: 4 metoder Hvorfor sortering (og søking) er viktig i programmering Sortering når objektene som skal sorteres er i et array 1. Sorterering ved bruk av binærtre som «mellomlager»

Detaljer

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn

Dagens temaer. Sortering: 4 metoder Søking: binærsøk Rekursjon: Hanois tårn Dagens temaer Sortering: 4 metoder Hvorfor sortering (og søking) er viktig i programmering Sortering når objektene som skal sorteres er i et array 1. Sorterering ved bruk av binærtre som «mellomlager»

Detaljer

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Dagens tema. Sortering. Fortsettelse om programmering vha tråder. Dagens tema Sortering. Fortsettelse om programmering vha tråder. «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til sortering og søking binære

Detaljer

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre:

Sorteringsproblemet. Gitt en array A med n elementer som kan sammenlignes med hverandre: Sortering Sorteringsproblemet Gitt en array A med n elementer som kan sammenlignes med hverandre: Finn en ordning (eller permutasjon) av elementene i A slik at de står i stigende (evt. avtagende) rekkefølge

Detaljer

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

Ny/utsatt EKSAMEN. Dato: 6. januar 2017 Eksamenstid: 09:00 13:00 Ny/utsatt EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 6. januar 2017 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF2220 Algoritmer og datastrukturer Eksamensdag: 16. desember 2013 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 8 sider.

Detaljer

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

INF2220: Forelesning 1. Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel ) INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) PRAKTISK INFORMASJON 2 Praktisk informasjon Kursansvarlige Ragnhild Kobro Runde (ragnhilk@ifi.uio.no)

Detaljer

Datastrukturer for rask søking

Datastrukturer for rask søking Søking Søkeproblemet Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke? Effektiviteten til søkealgoritmer avhenger av: Om datastrukturen

Detaljer

Dagens tema. Sortering. Fortsettelse om programmering vha tråder.

Dagens tema. Sortering. Fortsettelse om programmering vha tråder. Dagens tema Sortering. Fortsettelse om programmering vha tråder. «orden» i dataene vi blir fort lei av å lete poleksempel internett «alt» er søking og sortering alternativer til sortering og søking binære

Detaljer

Hvor raskt klarer vi å sortere?

Hvor raskt klarer vi å sortere? Sortering Sorteringsproblemet Gitt en array med n elementer som kan sammenlignes med hverandre: Finn en ordning (eller permutasjon) av elementene slik at de står i stigende (evt. avtagende) rekkefølge

Detaljer

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke?

Søkeproblemet. Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke? Søking Søkeproblemet Gitt en datastruktur med n elementer: Finnes et bestemt element (eller en bestemt verdi) x lagret i datastrukturen eller ikke? Effektiviteten til søkealgoritmer avhenger av: Om datastrukturen

Detaljer

INF1010 Sortering. Marit Nybakken 1. mars 2004

INF1010 Sortering. Marit Nybakken 1. mars 2004 INF1010 Sortering Marit Nybakken marnybak@ifi.uio.no 1. mars 2004 Dette dokumentet skal tas med en klype salt og forfatter sier fra seg alt ansvar. Dere bør ikke bruke definisjonene i dette dokumentet

Detaljer

INF2220: Time 12 - Sortering

INF2220: Time 12 - Sortering INF0: Time 1 - Sortering Mathias Lohne mathialo Noen algoritmer Vi skal nå se på noen konkrete sorteringsalgoritmer. Gjennomgående i alle eksempler vil vi sortere tall etter tallverdi, men som diskutert

Detaljer

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

Løsnings forslag i java In115, Våren 1999 Løsnings forslag i java In115, Våren 1999 Oppgave 1a Input sekvensen er: 9, 3, 1, 3, 4, 5, 1, 6, 4, 1, 2 Etter sortering av det første, midterste og siste elementet, har vi følgende: 2, 3, 1, 3, 4, 1,

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Eksamen i UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamensdag: 14. desember 2015 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 6 sider. Vedlegg: Tillatte hjelpemidler: INF2220

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer 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

Detaljer

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

Løsnings forslag i java In115, Våren 1998 Løsnings forslag i java In115, Våren 1998 Oppgave 1 // Inne i en eller annen klasse private char S[]; private int pardybde; private int n; public void lagalle(int i) if (i==n) bruks(); else /* Sjekker

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

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

Oppgave 1 a. INF1020 Algoritmer og datastrukturer. Oppgave 1 b Oppgave 1 1 a INF1020 Algoritmer og datastrukturer Forelesning 14: Gjennomgang av eksamen vår 2001 oppgave 1,2,4 Arild Waaler Institutt for informatikk, Universitetet i Oslo Oppgave 1 a Programmer en ikke-rekursiv

Detaljer

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer

Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer Python: Rekursjon (og programmering av algoritmer) Python-bok: Kapittel 12 + teoribok om Algoritmer TDT4110 IT Grunnkurs Professor Guttorm Sindre Læringsmål og pensum Mål Forstå, og kunne bruke, algoritmer

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 Delkapittel 1.3 Ordnede tabeller Side 1 av 74 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 1.3 Ordnede tabeller 1.3.1 Permutasjoner En samling verdier kan settes opp i en rekkefølge. Hver

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 3. november 2, kl. 9. - 14. Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

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

EKSAMEN. Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 18. mai 2017 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Kalkulator Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

Kapittel 12: Rekursjon

Kapittel 12: Rekursjon Kapittel 12: Rekursjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i IN 115 og IN 110 Algoritmer og datastrukturer Eksamensdag: 14. mai 1996 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 8 sider.

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Eksamen i UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamensdag: 13. desember 2011 Tid for eksamen: 14.30 18.30 Oppgavesettet er på 7 sider. Vedlegg: INF2220 lgoritmer og datastrukturer

Detaljer

Læringsmål og pensum. Algoritmeeffektivitet

Læringsmål og pensum. Algoritmeeffektivitet 1 TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis Professor Alf Inge Wang 2 Læringsmål og pensum Mål Lære å forstå og kunne programmere algoritmer for søk og sortering. Lære å forstå

Detaljer

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang

TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis. Professor Alf Inge Wang 1 TDT4110 Informasjonsteknologi grunnkurs: Tema: Algoritmer i praksis Professor Alf Inge Wang 2 Læringsmål og pensum Mål Lære å forstå og kunne programmere algoritmer for søk og sortering. Lære å forstå

Detaljer

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

Heap* En heap er et komplett binært tre: En heap er også et monotont binært tre: Heap Heap* En heap er et komplett binært tre: Alle nivåene i treet, unntatt (muligens) det nederste, er alltid helt fylt opp med noder Alle noder på nederste nivå ligger til venstre En heap er også et

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer 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 Hjelpemidler: Alle trykte og skrevne hjelpemidler. Kalkulator.

Detaljer

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

Løsnings forslag i java In115, Våren 1996 Løsnings forslag i java In115, Våren 1996 Oppgave 1a For å kunne kjøre Warshall-algoritmen, må man ha grafen på nabomatriseform, altså en boolsk matrise B, slik at B[i][j]=true hvis det går en kant fra

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag Algoritmer og datastrukturer ved Høgskolen i OsloSide 1 av 6 Algoritmer og datastrukturer Løsningsforslag Eksamen 24. februar 2010 Oppgave 1A 1. Komparatoren sammenligner først lengdene til de to strengene.

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF 2220 Algoritmer og datastrukturer Eksamensdag: 8. desember 2016 Tid for eksamen: 09:00 13:00 (4 timer) Oppgavesettet er på:

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Dato: 9. juni 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 7 sider. Vedlegg:

Detaljer

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

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 9. mai 2016 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet består

Detaljer

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

Oppgave 1. Oppgave 2. Høgskolen i Østfold Avdeling for informasjonsteknologi Høgskolen i Østfold Avdeling for informasjonsteknologi Løsningsforslag til ny/utsatt eksamen i ITF20006 Algoritmer og datastrukturer 05.01.2018 Oppgave 1 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19

Detaljer

Oppgave 1. Sekvenser (20%)

Oppgave 1. Sekvenser (20%) Det matematisk-naturvitenskapelige fakultet UNIVERSITETET I BERGEN Eksamen i emnet I 20 - Algoritmer, datastrukturer og programmering Mandag 2.Mai 200, kl. 09-5. Ingen hjelpemidler tillatt. Oppgavesettet

Detaljer

Norsk informatikkolympiade runde

Norsk informatikkolympiade runde Norsk informatikkolympiade 2017 2018 1. runde Sponset av Uke 46, 2017 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

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

NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 2013 NITH PG4200 Algoritmer og datastrukturer Løsningsforslag Eksamen 4.juni 20 ette løsningsforslaget er til tider mer detaljert enn det man vil forvente av en eksamensbesvarelse. et er altså ikke et eksempel

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 Delkapittel 1.3 Ordnede tabeller Side 1 av 70 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.3 1.3 Ordnede tabeller 1.3.1 Permutasjoner En samling verdier kan settes opp i en rekkefølge. Hver

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i: INF2440 Effektiv parallellprogrammering Prøveeksamensdag: 1. juni 2016 Tidspunkter: 09.00 16.00 Oppgavesettet er på: 4 sider

Detaljer

Obligatorisk oppgave 1 INF1020 h2005

Obligatorisk oppgave 1 INF1020 h2005 Obligatorisk oppgave 1 INF1020 h2005 Frist: fredag 7. oktober Oppgaven skal løses individuelt, og må være godkjent for å kunne gå opp til eksamen. Før innlevering må retningslinjene Krav til innleverte

Detaljer

Algoritmer og Datastrukturer IAI 21899

Algoritmer og Datastrukturer IAI 21899 Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Torsdag 30. november 2000, kl. 09.00-14.00 LØSNINGSFORSLAG 1 Del 1, Binære søketrær Totalt

Detaljer

Kapittel 8: Sortering og søking

Kapittel 8: Sortering og søking Kapittel 8: Sortering og søking Forelesningsnotater for: Java som første programmeringsspråk Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk, 2003. ISBN 82-02-23274-0 http://www.ii.uib.no/~khalid/jfps/

Detaljer

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

EKSAMEN. Dato: 28. mai 2018 Eksamenstid: 09:00 13:00 EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 28. mai 2018 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy

Øvingsforelesning 6. Sorteringsalgoritmer. Kristian Veøy Øvingsforelesning 6 Sorteringsalgoritmer Kristian Veøy veoy@stud.ntnu.no 26.09.08 1 Spørsmål fra øvingsgruppene Må jeg kunne python på eksamen? (Nei) Er det lurt å gjøre alle programmeringsøvingene? (Ikke

Detaljer

Algoritmer og Datastrukturer

Algoritmer og Datastrukturer Eksamen i Algoritmer og Datastrukturer IAI 21899 Høgskolen i Østfold Avdeling for informatikk og automatisering Lørdag 15. desember 2001, kl. 09.00-14.00 Hjelpemidler: Alle trykte og skrevne hjelpemidler.

Detaljer

8NH )RUHOHVQLQJ 'HSDUWPHQWÃRIÃ,QIRUPDWLFVÃ8QLYHUVLW\ÃRIÃ2VORÃ1RUZD\,1) ± $OJRULWKPVÃÉÃ'DWDÃ6WUXFWXUHV

8NH )RUHOHVQLQJ 'HSDUWPHQWÃRIÃ,QIRUPDWLFVÃ8QLYHUVLW\ÃRIÃ2VORÃ1RUZD\,1) ± $OJRULWKPVÃÉÃ'DWDÃ6WUXFWXUHV :/ 8NH )RUHOHVQLQJ +86.± +LWWLO«Sortering: Sammenligning-baserte: Baserer seg på sammenligning av elemntene i a[ ] Eksempler: Instikk, boble, utplukk Alle tar kvadratisk tid 1 7(0$6RUWHULQJ )RUWVHWWHUPHG

Detaljer

EKSAMEN med løsningsforslag

EKSAMEN med løsningsforslag EKSAMEN med løsningsforslag Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2009 kl 09.00 til kl 13.00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Kalkulator Faglærer:

Detaljer

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8

Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8 Delkapittel 1.8 Algoritmeanalyse Side 1 av 12 Algoritmer og datastrukturer Kapittel 1 - Delkapittel 1.8 1.8 Algoritmeanalyse 1.8.1 En algoritmes arbeidsmengde I Delkapittel 1.1 ble det definert og diskutert

Detaljer

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

Ny/utsatt EKSAMEN. Dato: 5. januar 2018 Eksamenstid: 09:00 13:00 Ny/utsatt EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: 5. januar 2018 Eksamenstid: 09:00 13:00 Hjelpemidler: Alle trykte og skrevne Faglærer: Jan Høiberg Om eksamensoppgavene: Oppgavesettet

Detaljer

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 Delkapittel 9.1 Generelt om balanserte trær Side 1 av 13 Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.1 9.1 Generelt om balanserte trær 9.1.1 Hva er et balansert tre? Begrepene balansert og

Detaljer

INF2220: Forelesning 1

INF2220: Forelesning 1 INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) Rekursjon (kapittel 1.3) (Binær)trær (kapittel 4.1-4.3 + 4.6) Praktisk informasjon 2 Praktisk informasjon Kursansvarlige Ingrid

Detaljer

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

Binære søketrær. En ordnet datastruktur med raske oppslag. Sigmund Hansen Binære søketrær En ordnet datastruktur med raske oppslag Sigmund Hansen Lister og trær Rekke (array): 1 2 3 4 Lenket liste (dobbelt-lenket): 1 2 3 4 Binært søketre: 3 1 4 2 Binære

Detaljer

Algoritmer - definisjon

Algoritmer - definisjon Algoritmeanalyse Algoritmer - definisjon En algoritme er en beskrivelse av hvordan man løser et veldefinert problem med en presist formulert sekvens av et endelig antall enkle, utvetydige og tidsbegrensede

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1020 Algoritmer og datastrukturer Eksamensdag: 15. desember 2004 Tid for eksamen: 14.30 17.30 Oppgavesettet er på 6 sider.

Detaljer

INF2220: Forelesning 7. Kombinatorisk søking

INF2220: Forelesning 7. Kombinatorisk søking INF2220: Forelesning 7 Kombinatorisk søking Oversikt Rekursjon - oppsummering Generering av permutasjoner Lett: Sekvens-generering Vanskelig: Alle tallene må være forskjellige Eksempel: Finne korteste

Detaljer

Rekursjon som programmeringsteknikk

Rekursjon som programmeringsteknikk Rekursjon Kap.7 Sist oppdatert 15.02.10 Rekursjon som programmeringsteknikk 10-1 Rekursiv tenkning Rekursjon er en programmeringsteknikk der en metode kan kalle seg selv for å løse problemet. En rekursiv

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Eksamen i : Eksamensdag : Torsdag 2. desember 2004 Tid for eksamen : 09.00 12.00 Oppgavesettet er på : Vedlegg : Tillatte hjelpemidler

Detaljer

TDT4105 Informasjonsteknologi, grunnkurs

TDT4105 Informasjonsteknologi, grunnkurs 1 TDT4105 Informasjonsteknologi, grunnkurs Matlab: Sortering og søking Anders Christensen (anders@idi.ntnu.no) Rune Sætre (satre@idi.ntnu.no) TDT4105 IT Grunnkurs 2 Pensum Matlab-boka: 12.3 og 12.5 Stoffet

Detaljer

INF2220: Forelesning 1

INF2220: Forelesning 1 INF2220: Forelesning 1 Praktisk informasjon Analyse av algoritmer (kapittel 2) (Binær)trær (kapittel 4.1-4.3 + 4.6) Praktisk informasjon 2 Praktisk informasjon Kursansvarlige Ingrid Chieh Yu de Vibe (ingridcy@ifi.uio.no)

Detaljer

Kapittel 9: Sortering og søking Kort versjon

Kapittel 9: Sortering og søking Kort versjon Kapittel 9: Sortering og søking Kort versjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen

Detaljer

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2017 Norsk informatikkolympiade 2017 2018 1. runde Sponset av Uke 46, 2017 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

"behrozm" Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009

behrozm Oppsummering - programskisse for traversering av en graf (dybde først) Forelesning i INF februar 2009 Rekursiv programmering BTeksempel Datastruktur I klassen Persontre (rotperson==) Rekursjon Noen oppgaver/problemer er rekursive «av natur» Eksempel på en rekursiv definisjon Fakultetsfunksjonen

Detaljer

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

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL Kandidatnr: Eksamensdato:. desember 00 Varighet: timer (9:00 1:00) Fagnummer: LO117D Fagnavn: Algoritmiske metoder Klasse(r): DA DB

Detaljer

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

EKSAMEN Løsningsforslag. med forbehold om bugs :-) 1 EKSAMEN Løsningsforslag med forbehold om bugs :-) Emnekode: ITF20006 000 Dato: 20. mai 2011 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater

Detaljer

Kapittel 12: Rekursjon

Kapittel 12: Rekursjon Kapittel 12: Rekursjon Redigert av: Khalid Azim Mughal (khalid@ii.uib.no) Kilde: Java som første programmeringsspråk (3. utgave) Khalid Azim Mughal, Torill Hamre, Rolf W. Rasmussen Cappelen Akademisk Forlag,

Detaljer

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2016

Norsk informatikkolympiade runde. Sponset av. Uke 46, 2016 Norsk informatikkolympiade 2016 2017 1. runde Sponset av Uke 46, 2016 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

Norsk informatikkolympiade runde

Norsk informatikkolympiade runde Norsk informatikkolympiade 2015 2016 1. runde Sponset av Uke 46, 2015 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

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

Hva er en algoritme? INF HØSTEN 2006 INF1020. Kursansvarlige Ragnar Normann E-post: Dagens tema va er en algoritme? Vanlig sammenligning: Oppskrift. nput lgoritme NF1020 - ØSTEN 2006 Kursansvarlige Ragnar Normann E-post: ragnarn@ifi.uio.no Output Knuth : tillegg til å være et endelig sett med regler

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO 1 UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : IN 115 Eksamensdag : Lørdag 20 mai, 2000 Tid for eksamen : 09.00-15.00 Oppgavesettet er på : 5 sider Vedlegg : Intet. Tillatte

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen : 09.00

Detaljer

Algoritmer og datastrukturer Eksamen

Algoritmer og datastrukturer Eksamen Eksamen - Algoritmer og datastrukturer - Høgskolen i Oslo og Akershus - 27.11.2012 Side 1 av 6 Algoritmer og datastrukturer Eksamen 27.11.2012 Eksamensoppgaver Råd og tips: Bruk ikke for lang tid på et

Detaljer

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

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene. Høgskoleni Østfold EKSAMEN Emnekode: Emnenavn: ITF20006 Algoritmer og datastrukturer Dato: Eksamenstid: 9. mai 2016 9.00 13.00 Hjelpemidler: Faglærer: Alle trykte og skrevne Jan Høiberg Om eksamensoppgaven

Detaljer

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk

Prøveeksamen INF2440 v Arne Maus PSE, Inst. for informatikk Prøveeksamen INF2440 v 2016 Arne Maus PSE, Inst. for informatikk 1 Oppgave 1 (10 poeng) Forklar hva som skjer ved en synkronisering: a) Når to tråder synkroniserer på samme synkroniseringsobjekt (f.eks

Detaljer

EKSAMEN. Algoritmer og datastrukturer

EKSAMEN. Algoritmer og datastrukturer EKSAMEN Emnekode: ITF20006 Emne: Algoritmer og datastrukturer Dato: Eksamenstid: 20. mai 2009 kl 09.00 til kl 13.00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Kalkulator Faglærer: Gunnar Misund

Detaljer

Løsningsforslag EKSAMEN

Løsningsforslag EKSAMEN 1 Løsningsforslag EKSAMEN Emnekode: ITF20006 000 Dato: 18. mai 2012 Emne: Algoritmer og datastrukturer Eksamenstid: 09:00 til 13:00 Hjelpemidler: 8 A4-sider (4 ark) med egne notater Faglærer: Gunnar Misund

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO FASIT UNIVERSITETET I OSLO BOKMÅL Det matematisk-naturvitenskapelige fakultet Kontinuasjonseksamen i : Eksamensdag : INF1000 Grunnkurs i objektorientert programmering Fredag 7. januar Tid for eksamen :

Detaljer

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

Binære søketrær. Et notat for INF1010 Stein Michael Storleer 16. mai 2013 Binære søketrær Et notat for INF Stein Michael Storleer 6. mai 3 Dette notatet er nyskrevet og inneholder sikkert feil. Disse vil bli fortløpende rettet og datoen over blir oppdatert samtidig. Hvis du

Detaljer

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda

Først litt praktisk info. Sorteringsmetoder. Nordisk mesterskap i programmering (NCPC) Agenda Først litt praktisk info Sorteringsmetoder Gruppeøvinger har startet http://selje.idi.ntnu.no:1234/tdt4120/gru ppeoving.php De som ikke har fått gruppe må velge en av de 4 gruppende og sende mail til algdat@idi.ntnu.no

Detaljer

Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15

Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15 http://www.idi.ntnu.no/~algdat algdat@idi.ntnu.no Pensum: 3. utg av Cormen et al. Øvingstime: I morgen, 14:15 b c g a f d e h The pitch drop experiment. Foreløpig kjørt fra 1927 til nå. Åtte dråper har

Detaljer

Inf 1020 Algoritmer og datastrukturer

Inf 1020 Algoritmer og datastrukturer Inf 1020 Algoritmer og datastrukturer Et av de mest sentrale grunnkursene i informatikkutdanningen... og et av de vanskeligste! De fleste 3000-kursene i informatikk bygger på Inf1020 Kurset hever programmering

Detaljer

Norsk informatikkolympiade runde

Norsk informatikkolympiade runde Norsk informatikkolympiade 2016 2017 1. runde Sponset av Uke 46, 2016 Tid: 90 minutter Tillatte hjelpemidler: Kun skrivesaker. Det er ikke tillatt med kalkulator eller trykte eller håndskrevne hjelpemidler.

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 12. desember 2008 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 7 sider. Vedlegg: Tillatte hjelpemidler: INF2220

Detaljer

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak

INF1010 LISTER. Listeelementer og listeoperasjoner. Foran. Bak LISTER Vanligste datastruktur Mange implementasjonsmåter (objektkjeder, array...) Operasjoner på listen definerer forskjellige typer lister (LIFO, FIFO,...) På norsk bruker vi vanligvis ordet «liste» for

Detaljer

Dagens tema INF1010 INF1010 INF1010 INF1010

Dagens tema INF1010 INF1010 INF1010 INF1010 I eksemplene om lister og binære trær har vi hittil hatt pekerne inne i objektene i strukturen. ( Innbakt struktur ).Eksempel: Dagens tema Implementasjon av strukturer (lister, binære trær) class { ; ;

Detaljer

Vanlige datastrukturer. I dette lysarksettet

Vanlige datastrukturer. I dette lysarksettet Vanlige datastrukturer I dette lysarksettet datastrukturer Datastrukturer i Med datastruktur mener vi måten objektene i et program er strukturert på. Særlig blir det aktuelt å snakke om struktur hvis vi

Detaljer

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO

INF2440 Eksamen 2016 løsningsforslag. Arne Maus, PSE ifi, UiO INF2440 Eksamen 2016 løsningsforslag Arne Maus, PSE ifi, UiO 1 Oppgave 1 (10 poeng) a) Beskriv meget kortfattet de to viktigste egenskapene ved tråder i et Java-program. 1. En tråd er sekvensielt programdel

Detaljer

Løsningsforslag 2017 eksamen

Løsningsforslag 2017 eksamen Løsningsforslag 2017 eksamen Oppgave 1: O-notasjon (maks 8 poeng) 1. (i) O(n) gir 2 poeng, O(100n) gir 1 poeng (ii) O(n^2) gir 1 poeng (iii) O(n log n) gir 2 poeng 2. (i) er mest effektiv i henhold til

Detaljer

Binære trær: Noen algoritmer og anvendelser

Binære trær: Noen algoritmer og anvendelser Binære trær: Noen algoritmer og anvendelser Algoritmer / anvendelser: Søking i usortert binært tre Telling av antall noder og nivåer i treet Traversering av binære trær Binære uttrykkstrær Kunstig intelligens(?):

Detaljer

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

INF110 Algoritmer og datastrukturer TRÆR. Vi skal i denne forelesningen se litt på ulike typer trær: TRÆR Vi skal i denne forelesningen se litt på ulike typer trær: Generelle trær (kap. 4.1) Binærtrær (kap. 4.2) Binære søketrær (kap. 4.3) Den siste typen trær vi skal behandle, B-trær (kap. 4.7) kommer

Detaljer

INF2220: Forelesning 2

INF2220: Forelesning 2 INF2220: Forelesning 2 Mer om analyse av algoritmer Analyse av binære søketrær Balanserte søketrær Rød-svarte trær (kapittel12.2) B-trær (kapittel 4.7) ANALYSE AV ALGORITMER 2 Analyse av tidsforbruk Hvor

Detaljer