Rekursjon I. TRE AV REKURSIVE KALL, II. INDUKTIVE DATA TYPER IV. STABEL AV REKURSIVE KALL V. KORREKTHET. rekursjonsdybde terminering ordning

Størrelse: px
Begynne med side:

Download "Rekursjon I. TRE AV REKURSIVE KALL, II. INDUKTIVE DATA TYPER IV. STABEL AV REKURSIVE KALL V. KORREKTHET. rekursjonsdybde terminering ordning"

Transkript

1 Rekursjon I. TRE AV REKURSIVE KALL, rekursjonsdybde terminering ordning II. INDUKTIVE DATA TYPER og Rekursjon over slike III. SPLITT OG HERSK ROBLEMLflSNING P VED REKURSJON IV. STABEL AV REKURSIVE KALL iterasjon til rekursjon rekursjon implementert som iterasjon V. KORREKTHET terminering invarianter i-0 : H Rekursjon:

2 . En metode kaller seg selv /** en heltallsfunksjon fakultet (factorial (!)) defineres som * 0! = * (n+)! = (n+) * n! */ /** Algoritme som beregner fact(n) n >= 0 fact(n) ingen unntak **/ int fact( int n ) { int r = ; while (n > ) r = r * n; n = n ; return r; int fact( int n ) { if (n <= ) return ; else return n * fact( n ); fact(n) vil alltid terminere Hvorfor? Hva med: int hack( int n ) { if (n <= ) return ; else return n * hack( n+ ); i-0 : H Rekursjon:

3 . En metode kaller seg selv /** heltallsfunksjon fact (!): int fact( int n ) { * 0! = if (n <= ) return ; * (n+)! = (n+) * n! else return n * fact( n ); */ fact( 3 ) { n = 3 <= NEI 3 * 6 fact( ) { n = <= NEI * fact( ) { n = <= JA i-0 : H Rekursjon: 3

4 . Rekursjonstre og -dybde fact(0) = 0 fact(0) = fib(n+) = (n+) * fact(n) f(4) f(3) int fact(int n) { if (n <= ) return ; else return n * fact(n-); returner i basistilfelle f() ellers beregn rekursivt enklere (mindre) deler og sett disse sam- f(4)...? f(3)...? f()...? f()...? > > > 6 > 4 rekkef lgen av kall f() rekursjonsdybde #svarte = #r de linjer = # rekursive kall... inntil basistilfelle er nådd (=høyden av treet) 6 4 tre av rekursive kall

5 . Rekursjonstre og -dybde; Eks: Fibonacci-tallene fib(0) = 0 fib() = fib(n+) = fib(n) + fib(n+) f() f() f(3) f(0) 3 f() f(4) 5 f() int fib(int n) { if (n==0 n==) return ; else return fib(n-) + fib(n-); returner i basistilfelle f() f(0) ellers beregn rekursivt enklere (mindre) deler og sett disse sam- tre av rekursive kall f(4)...? f(3)...? rekkef lgen f()...? av kall f()...? > f(0)...? > > f()...? > > 3 f()...? f()...? > f(0)...? > > > 5 rekursjonsdybde #svarte = #r de linjer = # rekursive kall... inntil basistilfelle er nådd (=høyden av treet) i-0 : H Rekursjon: 5

6 Rekursjonstre og -dybde; Quicksort Rekursjon som en generell strategi for problemløsning og algoritmedesign Gitt en instans n av et problem P :. hva gjør jeg når n er basis tilfelle. hvordan konstruere løsning for n utfra løsninger for noen instanser mindre enn n P = sorter input array A /* int[] SS(int[] A,k) { * initielt kall med SS(A,0) * n = A.length; * if (k==n-) { return A; * else { * i= indeksen til minste elementet * i A[k...n-]; * bytt A[k] med A[i]; * return SS(A, k+); */ /* int[] QuickSort ( int[] A ) { * int n = A.length; * if (n == ) { return A; * else { * p = A[n/] pivot * t = [x : x ε A & x < p] og t3 = [x : x ε A & x > p]; * t = [x : x ε A & x = p] ; * sorter rekursivt begge (mindre) array * r = QuickSort ( t ) og * r3 = QuickSort ( t3 ) * return r + t + r3 * * */ i-0 : H Rekursjon: 6

7 QS [4 3 5] p=3 QS [ ] m= QS [] 3 QS [ 4 5 ] p=4 4 QS [5] QS ( Ar[l...h] ) n = Ar.lenght if (n == ) return Ar; else p = A[n/]; return QS ( Ar[< p] ) + Ar[= p] + QS ( Ar[> p] ) [ ] 3 + [ 4 5] + [ 3 4 5] i-0 : H Rekursjon: 7

8 * pre-, post- og (for binære trær) innorden + 3 inn(t) = if (T =! null) { inn(t.left) write(t.data) inn(t.right) + * 3 pre(t) = if (T =! null) { write(t.data) pre(t.left) pre(t.right) * + 3 post(t) = if (T =! null) { post(t.left) post(t.right) write(t.data) + 3 * innp(t) = if (T =! null) { write( ( ) innp(t.left) write(t.data) innp(t.right) write( ) ) ( ( () + () ) * (3) ) Skriv resultater av kallene inn(t), pre(t), post(t) for f lgende tr r T,T T * T * + * i-0 : H Rekursjon: 8

9 . Induktive Data Typer (vilkårlig store men endelige) Strukturell ordering naturlige tall N: basis: 0 er et N array av N: A(N) basis 0 -> N er A(N) hvis n er et N hvis [0...k] -> N er A(N) s er: n+ et N s er [0...k,k+] -> N en A(N) Lister av N: L(N): basis: null er en L(N) hvis s er: L er L(N) og n er N (n,l) en L(N) L L n 0 N 0... N k k+ n 0 N < < L 0... N k L < 0... N k k+ < n Bin re T r r av N: BT(N): basis: null er et BT(N) t n < t < hvis t, t er BT(N) og n er N t n n s er: (t, n, t) et BT(N) t t t t i-0 : H Rekursjon: 9

10 . Induktiv oppbygging -> rekursive beregninger induktiv definisjon = fra basis og oppover ***** rekursjon = fra toppen mot basis Nat int fib(n) { int fact(n) { basis: 0 if (n==0 n==) return ; if (n <= 0) return ; ind: n+ else return fib(n-) + fib(n-); else return n * fact(n-); Array[Int] void inc(int[] A, int k) { int sum(int[] A, int k) { basis: [0] -> Int A[k]++; if (k==0) return A[0]; ind: [0.. k-, k] -> Int if (k > 0) inc(a,k-); else return A[k] + sum(a,k-); Liste[Int] class LS { void inc(ls L) { int sum(ls L) { basis: null int n; if (L==null) { if (L==null) return 0; ind: (n,hale) LS hale; else { n++; else return inc(l.hale); sum(l.hale) + n; Bin rtt re[int] class BT { void inc(bt B) { int sum(bt T) { basis: null int n; if (T==null) { if (T==null) return 0; ind: (left,n,right) BT left; else {n++; else return BT right; inc(t.left); n + sum(t.left) + sum(t.right) ; inc(t.right); FRAKTALer i-0 : H Rekursjon: 0

11 Hva beregnes av følgende...? f (x: int) = if (x <= 0) then 0 else x + f(x ) ; f(n) =? f (x: int) = if (x <= 0) then 0 else x*x + f(x ) ; f(n) =? f (x: int) = if (x <= 0) then 0 else + f(x ) ; f(n) =? f (x: int) = if (x <= 0) then 5 else f(x ) ; f(n) =? f (x: int) = if (x <= 0) then else f(x ) + f(x ) ; f(n) =? f (x: int) = if (x <= 0) then else * f(x ) ; f(n) =? f (x: int) = if (x <= ) then 0 else + f(x ) ; f(n) =? Tegn tre av rekursive kall for hver f-funksjon ved kall f(3); Gjensidig rekursjon: (La [] betegne en tom liste mens x::xs en liste med x som f rste elementet etterfulgt av listen xs; f.eks. listen [,,3] kan skrives som ::::3::[].) flat( [] ) = [] flat( l::ls ) = aux( l, ls ) aux( [], ls ) = flat( ls ) aux( x::xs, ls ) = x :: aux( xs, ls ) Hva slags argument (av hvilken type) forventes av flat? Hva blir resultatet av flat( [ [,], [,3] ] ) ;? av flat( [ [,], [,3], [], [4,5,6] ] ) ;? i-0 : H Rekursjon:

12 3. Splitt og hersk (engelsk: Divide and Conquer) Rekursjon som en generell strategi for problemløsning og algoritmedesign Gitt en instans n av et problem P :. hva gjør jeg når n er basis tilfelle?. hvordan konstruere løsning for n utfra løsninger for noen instanser mindre enn n? P(n) = bergen n. hva gjør jeg når n = 0? returner 0 =. hvordan konstruere løsning for n utfra løsning for n? n = * n-, altså returner * P(n ) P(0) = P(x) = if (x=0) then P(n+) = * P(n) else * P(n )

13 3. Splitt og hersk (engelsk: Divide and Conquer) Rekursjon som en generell strategi for problemløsning og algoritmedesign Gitt en instans n av et problem P :. hva gjør jeg når n er basis tilfelle. hvordan konstruere løsning for n utfra løsninger for noen instanser mindre enn n P = finn et gitt element x i en array A Hvis A er usortert : Hvis A er sortert... sjekk A[n]; hvis x ikke er der, lett i A[0...n ] /* initielt kall med FE(A, x?, A.length ) */ int FE(int[] A, x. k) { if (k < 0 ) return ; else if (A[k]==x) return k; else return FE(A, x, k ); FE(A, 7, ) BS(A, 7, 0,) /* initielt kall med * BS(A, x?, 0, A.length) */ int BS(int[] A, x, l, h) { m = (l+h) / ; if (l > h) return -; else if (A[m] == x) return m; else if (A[m] < x) return BS(A, x, m+, h); else return BS(A, x, l, m );

14 3. Splitt og hersk (engelsk: Divide and Conquer) Rekursjon som en generell strategi for problemløsning og algoritmedesign Gitt en instans n av et problem P :. hva gjør jeg når n er basis tilfelle?. hvordan konstruere løsning for n utfra løsninger for noen instanser mindre enn n? P(s) = les input strengen tegn-for-tegn s lenge det er et siffer, og returner heltallet (samt resten av strengen): P( 0 ) = (0,[]), P( 0sd ) = (, sd ), P( abcd ) = (0, abcd ), osv.. hva er basistilfelle? s er tom, eller d::rest der tegnet d ikke er et siffer, hva gjør jeg da? returnerer det akkumulerte resultatet og resten av strengen P(i, []) = (i, []) P(i, d::rest) = (i, d::rest). hvordan konstruere løsning for d::rest utfra løsning for rest (når d er et siffer)? i*0 + d er den nye akkumulerte tallverdien fortsett med P(i*0 + d, rest) parseint(s:string) = first( P(0,s) ); P(i,[]) = ( i, [] ) P(i,d::rest) = if (not digit(d)) then ( i, d::rest ) else P( i*0 + int(d), rest )

15 4. Iterasjon til rekursjon n > n */ int sumiter(int n) { int res =0; while (n > 0) { res = res + n; n = n ; return res; n > n */ int sumrek(int n) { if (n == 0) return 0; else return n + sumr(n-); Generellt, dog ikke 00% riktig: int Iter(int n) { res= init; while ( fortsett(n) ) { res= Kroppen(n,res); oppdater(n); return res; int Rekursiv(int n) { if (!fortsett(n) ) return basetilfelle / init; else return Kroppen(n, Rekursiv(oppdater(n))); Enhver iterasjon kan skrives som rekursjon... t.o.m. som hale-rekursjon

16 4a. Rekursjon implementeres med en stabel public int fact( int n ) { if (n <= ) return ; else return n * fact( n ); n = fact( ) fact( 3 ) { 6 n = 3 <= NEI 3 * n *? fact( ) { n = <= NEI * n *? n = fact( ) n = 3 fact( 3 ) n *? n = fact( ) n *? n = 3 fact( 3 ) n *? n = 3 fact( 3 ) 6 fact( ) { n = <= JA

17 Method Stack main( ) { int n=5; int z=; 8 int a= aa(z); int aa(int z) { int m=3; 96 bb(...); return 8; 0 void bb(...) { main( ) { int n=5; int z=; int a= aa(z) 8 PC= 0 bb(... ) m = 3 z = PC= 96 aa() m = 3 z = PC= 96 aa() z = z = aa( ) { n = 5 n = 5 PC= 8 PC= 8 z = ; main( ) main( ) int m=3; bb(...) return 8; bb(... ) { a = 8 z = n = 5 PC= 8 main( )

18 Kompleksitet av en rekursiv funksjon avhenger av Analyse vha REKURSJONSTRE størrelsen på steget i hvert rekursivt kall (høyden av treet) antall rekursive kall i hvert steg ( bredden av forgreninger) arbeidsmengden ved sammensetting av resultater fra rekursive kall. Anta dette O() i eksemplene under. R(n) har rekursive kall til R(n-) R(n+) = R(n) + R(n) O( n+ ) R(n) har 3 rekursive kall til R(n-) R(n+) = R(n) + R(n) + R(n) O(3 n+ ) R(n) har rek. kall til R(n-) R(n+) = R(n) + c O(n) h= 3 0 h= 3 0 h= 3 0 R(n) har rek kall til R(n-) og R(n-) R(n+) = R(n+) + R(n) O(.6 n ) h= 3 0 Fibonacci kan dog forenkles til: O(n) R(n) har rek. kall til R(n/) R(n) = R(n/) + R(n/) log(n)+ = n- = O(n) h= 3 for n (n/) (n/4) 0 (n/8) i-0 : H Rekursjon: 8

19 5. Korrekthet Gitt en instans n av et problem P :. hva gjør jeg når n er basis tilfelle. hvordan konstruere løsning for n utfra løsninger for noen instanser mindre enn n P(n) if Basis(n) return??? Terminering: P(n) if Basis(n) stopper rekursjon Korrekthet: P(n) if Basis(n) kontroller korrekt utførelse else return Kombiner(P(m)... P(mk)) else garanter at hver mi < n, er nærmere Basis kombinasjon opprettholder rekursjons-invariant else HER MÅ VI VISE HVIS -> SÅ HVIS hvert rekursivt kall P(mi) returnerer riktig resultat!!! DET OVENSTÅENDE ANTAR VI!!! SÅ gir Kombiner(P(m)... P(mk)) riktig resultat i-0 : H Rekursjon: 9

20 5. Korrekthet Gitt en instans n av et problem P :. hva gjør jeg når n er basis tilfelle. hvordan konstruere løsning for n utfra løsninger for noen instanser mindre enn n sum(n) if n == 0 return 0 else return n + sum(n ) Terminering: sum(n) if n <= stopper rekursjon else hver n < n, er nærmere Basis Korrekthet: sum(n) if n == 0 resultat er 0 : i = 0 i = 0 else HER MÅ VI VISE HVIS -> SÅ HVIS rekursivt kall sum(n ) returnerer riktig resultat!!! DET OVENSTÅENDE ANTAR VI!!! 0 kombinasjon opprettholder sum(n) = n i = 0 i SÅ gir n + sum(n ) riktig resultat : i = n + n i = 0 n i = 0 i

21 Korrekthet: rekursjons-invariant /* int[] QS(int[] A) { int n= A.length; * if (n == ) { return A; * else { * velg pivot p ε A og * del A i : * A= { xεa x p og A = { xεa x > p; * sorter rekursivt (mindre) delene * r= QS(A) og * r= QS(A) * return r + r */ Invariant: QS(A) returnerer sortert argument A: if n== da er A sortert else deler A i to disjunkte deler A= { xεa x p og A = { xεa x > p r= QS(A) returnerer sortert A r= QS(A) returnerer sortert A men da er r+r sortert siden A < A /* int[] MS(int[] A) { int n= A.length; * if (n == ) { return A; * else { * del A i midten i : * A= A[0...n/] og A = A[n/+...n]; * sorter rekursivt (mindre) delene * r= MS(A) og * r= MS(A) * return flettet resultat av * rekursive kall FL(r,r) */ Invariant:... if lgh== da er A... else deler A i to disjunkte deler A= A[0...n/] og A= A[n/+...n] r= MS(A)... r= MS(A)... hvis... så returnerer hele else-grenen sortert A i-0 : H Rekursjon:

22 Korrekthet: rekursjons-invariant /* int BS(int[] A, int x, int l, int h) { * int m= (l+h) / ; * if (l > h) return ; * else if (A[m] == x) return m; * else if (A[m] < x) return BS(A, x, m+, h); * else return BS(A, x, l, m ); */ Invariant: argumentet A er sortert & er x i A, så er den mellom [l... h] (initielt kall med (A, x, 0, A.length-) if l > h x kan ikke være der ( er riktig) else if A[m] = x da har vi funnet den (m er riktig) else if A[m] < x er x i A, så må den være mellom [m+... h] BS(A, x, m+, h) vil returnere riktig resultat else A[m] > x er x i A, så må den være mellom [l... m ] BS(A, x, l, m ) vil returnere riktig resultat

23 Oppsummering. Rekursjon Splitt og hersk bestem hva som må gjøres i basis tilfelle(r) konstruer ( hersk ) en løsning fra (rekursive) løsninger for ( splitt ) noen mindre instanser. Enhver induktiv datatype (nat, int, lister, trær,...) gir opphav til rekursive algoritmer 3. Rekursjon vs. iterasjon (rekursjon implementeres iterativt med bruk av stabel) 4. Korrekthet bestem rekursjons-invarianten verifiser at basistilfelle(r) etablerer invarianten under antakelse at rekursive kall etablerer invarianten, vis at konstruksjonen vil opprettholde den

Rekursiv programmering

Rekursiv programmering Rekursiv programmering Babushka-dukker En russisk Babushkadukke er en sekvens av like dukker inne i hverandre, som kan åpnes Hver gang en dukke åpnes er det en mindre utgave av dukken inni, inntil man

Detaljer

INF1010 notat: Binærsøking og quicksort

INF1010 notat: Binærsøking og quicksort 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.

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

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

Rekursiv programmering

Rekursiv programmering Rekursiv programmering Babushka-dukker En russisk Babushkadukke er en sekvens av like dukker inne i hverandre, som kan åpnes Hver gang en dukke åpnes er det en mindre utgave av dukken inni, inntil man

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 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

"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

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg

Øvingsforelesning 3: Splitt og hersk. Daniel Solberg Øvingsforelesning 3: Splitt og hersk Daniel Solberg Plan for dagen Vi går raskt gjennom øving 2 Splitt og hersk Algoritmer: Mergesort Quicksort Binærsøk Rekurrenser, masse rekurrenser 2 Splitt og hersk

Detaljer

Pensum: fra boken (H-03)+ forelesninger

Pensum: fra boken (H-03)+ forelesninger Pensum: fra boken (H-03)+ forelesninger unntatt kursorisk tema KAP. 1 KAP. 2 KAP. 3 JAVA I-110 (ikke gjennomgått) OO + ABSTRAKSJON /GENERISK PROGRAMMERING REKURSJON ALGORITME-TIDSANALYSE; O-NOTASJON KAP.

Detaljer

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

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr Fakultet Bredde Rekursjon Fibonacci Sjakk Hanois tårn Lister Oppsummering Rekursjon (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. n! = n x n-1 x n-2 x... x 2 x 1 Å beregne fakultet

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

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr

Rekursjon. (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. IN1010 uke 8 våren Dag Langmyhr Fakultet Rekursjon Fibonacci Sjakk Hanois tårn Lister Oppsummering Rekursjon (Big Java kapittel 13) Fra Urban dictionary: recursion see recursion. n! = n x n-1 x n-2 x... x 2 x 1 Å beregne fakultet Den

Detaljer

Pensum: fra boken (H-03)+ forelesninger

Pensum: fra boken (H-03)+ forelesninger Pensum: fra boken (H-03)+ forelesninger unntatt kursorisk tema KAP. 1 KAP. 2 KAP. 3 JAVA I-110 (ikke gjennomgått) OO + ABSTRAKSJON /GENERISK PROGRAMMERING REKURSJON ALGORITME-TIDSANALYSE; O-NOTASJON KAP.

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

INF1010. Rekursjon En rekursiv definisjon av rekursjon, slik det kunne stå i en ordbok: Introduksjon til Rekursiv programmering

INF1010. Rekursjon En rekursiv definisjon av rekursjon, slik det kunne stå i en ordbok: Introduksjon til Rekursiv programmering Introduksjon til Rekursiv programmering To iterate is human; to recurse, divine. L. Peter Deutsch, Robert Heller Rekursjon En rekursiv definisjon av rekursjon, slik det kunne stå i en ordbok: rekursjon

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

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

Introduksjon til Algoritmeanalyse

Introduksjon til Algoritmeanalyse Introduksjon til Algoritmeanalyse 26. August, 2019 Institutt for Informatikk 1 Hvordan skal vi tenke i IN2010? Effektive løsninger Hvordan skalérer problemet og løsningen? 2 Terminologi Betegnelse Problem

Detaljer

LO118D Forelesning 2 (DM)

LO118D Forelesning 2 (DM) LO118D Forelesning 2 (DM) Kjøretidsanalyse, matematisk induksjon, rekursjon 22.08.2007 1 Kjøretidsanalyse 2 Matematisk induksjon 3 Rekursjon Kjøretidsanalyse Eksempel Finne antall kombinasjoner med minst

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

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

PG4200 Algoritmer og datastrukturer Forelesning 3 Rekursjon Estimering

PG4200 Algoritmer og datastrukturer Forelesning 3 Rekursjon Estimering PG4200 Algoritmer og datastrukturer Forelesning 3 Rekursjon Estimering Lars Sydnes, NITH 22.januar 2014 I. Rekursjon commons.wikimedia.org Rekursjon i naturen En gren er et tre som sitter fast på et tre.

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

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

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon.

INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon. INF2810: Funksjonell programmering: Mer om Scheme. Rekursjon og iterasjon. Stephan Oepen & Erik Velldal Universitetet i Oslo 25. januar, 2013 På blokka 2 Forrige uke Introduksjon og oversikt Funksjonell

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

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

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

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

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF2440 Praktisk parallell programmering Prøveeksamensdag : 26. mai 2014 Tidspunkter: 11.00 Utdeling av prøveeksamen 15:15

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

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

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: Funksjonell Programmering. Trær og mengder INF2810: Funksjonell programmering INF2810: Funksjonell Programmering Trær og mengder Erik Velldal Universitetet i Oslo 19. februar 2015 Tema Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler

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

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

Løsningsforslag for utvalgte oppgaver fra kapittel 3

Løsningsforslag for utvalgte oppgaver fra kapittel 3 Løsningsforslag for utvalgte oppgaver fra kapittel 3 3.3 1 Demo innsettingssortering..................... 1 3.5 1 Demo velgesortering........................ 2 3.5 2 Velgesortering...........................

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

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

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

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

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk

INF2220: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk INF0: Time 8 og 9 - Kompleksitet, beregnbarhet og kombinatorisk søk Mathias Lohne mathialo Rekursjonseksempel Eksempel Finn kjøretid for følgende program: (Ex11 b) 1 float foo(a) { n = Alength; 3 4 if

Detaljer

n/b log b n = (lg n) a log b n = n log b a

n/b log b n = (lg n) a log b n = n log b a Masterteoremet 1 T (n) = at (n/b) + f(n) Antall «barn»: Størrelse per «barn»: «Høyde»: a n/b log b n = (lg n) Rota har f(n) arbeid; hver løvnode har en konstant mengde arbeid. Hva vil dominere totalen?

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

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

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

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

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer

Heapsort. Lars Vidar Magnusson Kapittel 6 Heaps Heapsort Prioritetskøer Heapsort Lars Vidar Magnusson 24.1.2014 Kapittel 6 Heaps Heapsort Prioritetskøer Sorterings Problemet Sorterings problemet er et av de mest fundementalske problemene innen informatikken. Vi sorterer typisk

Detaljer

STABLER OG REKURSJON. Abstrakte Data Typer (ADT) Stabler. ADT Stabel

STABLER OG REKURSJON. Abstrakte Data Typer (ADT) Stabler. ADT Stabel STABLER OG REKURSJON Abstrakte Data Typer (ADT) Stabler Eksempel: Aksjeanalyse Unntakshåndtering i Java To stabel-implementasjoner Abstrakte Data Typer (ADT) En Abstrakt Data Type er en abstraksjon av

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

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

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 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

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

Om Kurset og Analyse av Algoritmer

Om Kurset og Analyse av Algoritmer Om Kurset og Analyse av Algoritmer Lars Vidar Magnusson 8.1.2014 Praktisk informasjon om kurset Hva er en algoritme? (kapittel 1) Hvordan analysere en algoritme? (kapittel 2) Praktisk Informasjon Introduction

Detaljer

Definisjon av binært søketre

Definisjon av binært søketre Binære søketrær Definisjon av binært søketre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

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

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: Funksjonell Programmering. Trær og mengder INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2016 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister

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

Binær heap. En heap er et komplett binært tre:

Binær heap. En heap er et komplett binært tre: Heap Binær 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 så langt til venstre som mulig

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

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

INF Algoritmer og datastrukturer

INF Algoritmer og datastrukturer INF0 - Algoritmer og datastrukturer HØSTEN 05 Institutt for informatikk, Universitetet i Oslo Forelesning 6: Grafer II Ingrid Chieh Yu (Ifi, UiO) INF0.09.05 / 8 Dagens plan: Minimale spenntrær Prim Kruskal

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

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

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

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi

Eksamen i IN 110, 18. mai 1993 Side 2 Del 1 (15%) Vi skal se på prioritetskøer av heltall, der vi hele tiden er interessert i å få ut den minste verdi UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 18. mai 1993 Tid for eksamen: 9.00 15.00 Oppgavesettet er på 7 sider. Vedlegg: Tillatte hjelpemidler: IN 110 Algoritmer

Detaljer

Divide-and-Conquer. Lars Vidar Magnusson 13.1.2015

Divide-and-Conquer. Lars Vidar Magnusson 13.1.2015 Divide-and-Conquer Lars Vidar Magnusson 13.1.2015 Kapittel 4 Maximum sub-array problemet Matrix multiplikasjon Analyse av divide-and-conquer algoritmer ved hjelp av substitusjonsmetoden Divide-and-Conquer

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

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

INF1010. Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene 0, 1 og 2: Sekvensgenerering. Generalisering. n n n! INF1010 INF1010 INF1010

INF1010. Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene 0, 1 og 2: Sekvensgenerering. Generalisering. n n n! INF1010 INF1010 INF1010 Sekvensgenerering Alle mulige sekvenser av lengde tre av tallene, og : Kombinatorisk søking Generering av permutasjoner Lett: Sekvensgenerering Vanskelig: Alle tallene må være forskjellige Eksempel: Finne

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

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen?

OPPGAVE 1 OBLIGATORISKE OPPGAVER (OBLIG 1) (1) Uten å selv implementere og kjøre koden under, hva skriver koden ut til konsollen? OPPGAVESETT 4 PROSEDYRER Oppgavesett 4 i Programmering: prosedyrer. I dette oppgavesettet blir du introdusert til programmering av prosedyrer i Java. Prosedyrer er også kjent som funksjoner eller subrutiner.

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

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python.

Kondisjonstest. Algoritmer og datastrukturer. Python-oppgaver. Onsdag 6. oktober Her er noen repetisjonsoppgaver i Python. Algoritmer og datastrukturer Kondisjonstest Python-oppgaver Onsdag 6. oktober 2004 Her er noen repetisjonsoppgaver i Python. Som alltid er den beste måten å lære å programmere på å sette seg ned og programmere

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

Definisjon: Et sortert tre

Definisjon: Et sortert tre Binære søketrær Definisjon: Et sortert tre For alle nodene i et binært søketre gjelder: Alle verdiene i nodens venstre subtre er mindre enn verdien i noden Alle verdiene i nodens høyre subtre er større

Detaljer

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

E K S A M E N. Algoritmiske metoder I. EKSAMENSDATO: 11. desember HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA / DESY ) Høgskolen i Gjøvik Avdeling for Teknologi E K S A M E N FAGNAVN: FAGNUMMER: Algoritmiske metoder I L 189 A EKSAMENSDATO: 11. desember 2000 KLASSE: 99HINDA / 99HINDB / 99HINEA / 00HDESY ( 2DA / 2DB / 2EA

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

EKSAMEN. Emne: Algoritmer og datastrukturer

EKSAMEN. Emne: Algoritmer og datastrukturer 1 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 Oppgavesettet

Detaljer

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag Algoritmer og datastrukturer Løsningsforslag Eksamen 30. november 2010 Oppgave 1A Et turneringstre for en utslagsturnering med n deltagere blir et komplett binærtre med 2n 1 noder. I vårt tilfelle får

Detaljer

INF2810: Funksjonell Programmering. Trær og mengder

INF2810: Funksjonell Programmering. Trær og mengder INF2810: Funksjonell Programmering Trær og mengder Stephan Oepen Universitetet i Oslo 16. februar 2017 Tema 2 Forrige uke Høyereordens prosedyrer lambda, let og lokale variabler Dataabstraksjon I dag Lister

Detaljer

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

Repetisjon: Binære. Dagens plan: Rød-svarte trær. Oppgave (N + 1)! Repetisjon: Binære søketrær Dagens plan: Rød-svarte trær (kap. 12.2) B-trær (kap. 4.7) bstrakte datatyper (kap. 3.1) takker (kap. 3.3) For enhver node i et binært søketre gjelder: lle verdiene i venstre

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

Det matematisk-naturvitenskapelige fakultet

Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG - KOMMENTARER til SENSOR N.B. RETTELSE 23.05 og 26.05 pkt. e) :UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : IN 5 Eksamensdag : Lørdag 20 mai, 2000 Tillatte

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i : INF 110 Algoritmer og datastrukturer Eksamensdag : Lørdag 8. desember 2001 Tid for eksamen : 09.00-15.00 Oppgavesettet er på

Detaljer

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

EKSAMENSOPPGAVE. INF-1101 Datastrukturer og algoritmer. Adm.bygget, rom K1.04 og B154 Ingen Fakultet for naturvitenskap og teknologi EKSAMENSOPPGAVE Eksamen i: Dato: 15.mai 2018 Klokkeslett: 09:00 13:00 Sted: Tillatte hjelpemidler: Adm.bygget, rom K1.04 og B154 Ingen Type innføringsark (rute/linje):

Detaljer

deeegimnoorrrsstt Sjette forelesning

deeegimnoorrrsstt Sjette forelesning deeegimnoorrrsstt Sjette forelesning 1 2 Rebus. Hva er dette? Svar: Kvadratiske sorteringsalgoritmer :-> Som vanlig relativt abstrakte beskrivelser her. Ta en titt på pseudokode i boka for mer detaljert

Detaljer

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

INF1010 Rekursive metoder, binære søketrær. Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre INF1010 Rekursive metoder, binære søketrær Algoritmer: Mer om rekursive kall mellom objekter Ny datastruktur: binært tre public void skrivutmeg ( ) { System. out. println (navn + " er venn med " + minbestevennheter

Detaljer

Sortering med tråder - Quicksort

Sortering med tråder - Quicksort Sortering med tråder - Quicksort Skisser til to programmer INF1010 våren 2016 Stein Gjessing Institutt for informatikk Universitetet i Oslo Sortering som tema, slikt som valg av sorteringsmetode, hastigheten

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

MAT1030 Diskret matematikk

MAT1030 Diskret matematikk Oppgave 1.1 MAT1030 Diskret matematikk Plenumsregning 2: Ukeoppgaver fra kapittel 1 & 2 Roger Antonsen Matematisk Institutt, Universitetet i Oslo 24. januar 2008 Modifiser algoritmen fra 1.2.1 slik at

Detaljer