INF1010 notat: Binærsøking og quicksort
|
|
- Randi Marthinsen
- 7 år siden
- Visninger:
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? 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
DetaljerQuicksort. 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
DetaljerEn 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
DetaljerRekursjon. 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
DetaljerKap.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
DetaljerLogaritmiske 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
Detaljeralternativer 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»
DetaljerDagens 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»
DetaljerDagens 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
DetaljerSorteringsproblemet. 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
DetaljerNy/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
DetaljerUNIVERSITETET 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.
DetaljerINF2220: 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)
DetaljerDatastrukturer 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
DetaljerDagens 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
DetaljerHvor 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
DetaljerSø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
DetaljerINF1010 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
DetaljerINF2220: 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
DetaljerLø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,
DetaljerUNIVERSITETET 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
DetaljerAlgoritmer 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
DetaljerLø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
DetaljerKapittel 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
DetaljerOppgave 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
DetaljerPython: 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
DetaljerAlgoritmer 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
DetaljerAlgoritmer 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.
DetaljerEKSAMEN. 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
DetaljerKapittel 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,
DetaljerUNIVERSITETET 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.
DetaljerUNIVERSITETET 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
DetaljerLæ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å
DetaljerTDT4110 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å
DetaljerHeap* 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
DetaljerKapittel 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
DetaljerAlgoritmer 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.
DetaljerLø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
DetaljerAlgoritmer 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.
DetaljerUNIVERSITETET 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å:
DetaljerUNIVERSITETET 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:
DetaljerEKSAMEN. 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
DetaljerOppgave 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
DetaljerOppgave 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
DetaljerNorsk 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.
DetaljerNITH 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
DetaljerAlgoritmer 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
DetaljerKapittel 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
DetaljerUNIVERSITETET 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
DetaljerObligatorisk 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
DetaljerAlgoritmer 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
DetaljerKapittel 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/
DetaljerEKSAMEN. 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 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
DetaljerAlgoritmer 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.
Detaljer8NH )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
DetaljerEKSAMEN 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:
DetaljerAlgoritmer 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
DetaljerNy/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
DetaljerAlgoritmer 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
DetaljerINF2220: 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
DetaljerBinæ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
DetaljerAlgoritmer - 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
DetaljerUNIVERSITETET 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.
DetaljerINF2220: 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
DetaljerRekursjon 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
DetaljerUNIVERSITETET 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
DetaljerTDT4105 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
DetaljerINF2220: 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)
DetaljerKapittel 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
DetaljerNorsk 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
Rekursiv programmering BTeksempel Datastruktur I klassen Persontre (rotperson==) Rekursjon Noen oppgaver/problemer er rekursive «av natur» Eksempel på en rekursiv definisjon Fakultetsfunksjonen
DetaljerHØ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
DetaljerEKSAMEN 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
DetaljerKapittel 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,
DetaljerNorsk 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.
DetaljerNorsk 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.
DetaljerHva 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
DetaljerUNIVERSITETET 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
DetaljerUNIVERSITETET 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
DetaljerAlgoritmer 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
DetaljerOppgavesettet 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
DetaljerPrø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
DetaljerEKSAMEN. 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
DetaljerLø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
DetaljerUNIVERSITETET 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 :
DetaljerBinæ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
DetaljerFø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
DetaljerPensum: 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
DetaljerInf 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
DetaljerNorsk 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.
DetaljerUNIVERSITETET 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
DetaljerINF1010 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
DetaljerDagens 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 { ; ;
DetaljerVanlige 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
DetaljerINF2440 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
DetaljerLø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
DetaljerBinæ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(?):
DetaljerINF110 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
DetaljerINF2220: 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