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

Størrelse: px
Begynne med side:

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

Transkript

1 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 subst. en. Hvis du har forstått hva rekursjon er, slutt å lese. Hvis ikke, se rekursjon. I Bokmålsordboka er rekursjon definert som periodisk gjentakelse. Hvorfor lage rekursive metoder? Dette er et sett lysark for en forelesning. Noen sider er ufullstendige og vil kun være nyttig som grunnlag for selvstudium påført studentens merknader fra forelesningen. Særlig gjelder dette en del eksempler og figurer. Noen oppgaver/problemer er rekursive «av natur» En slik oppgave kan ofte deles opp i flere deloppgaver der en eller flere av deloppgavene er svært lik den opprinnelige oppgaven. Å lage en definisjon eller et program av en slik oppgave er enkelt. Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 1 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 2 av 29 Vi legger merke til at undersøkelsen/oppgaven har to «grener»: Eksempel på en rekursiv definisjon Oppgave: Finn ut om en gitt person er bergenser. For å kunne løse denne oppgaven, må vi ha en regel, en definisjon av hva vi mener med med bergenser. Definisjon av bergenser En bergenser er en person som har bodd minst 20 år i Bergen, eller som har en mor som er bergenser. ❶ personen har bodd minst 20 år i Bergen og vi stanser undersøkelsen (basistilfelle) ❷ Personen har ikke bodd minst 20 år i Bergen og vi må fortsette undersøkelsen på moren (rekursjon) Vi vil senere finne disse to grenene igjen i de rekursive metodene vi lager. Definisjonen skrevet om så den ikke lenger er rekursiv: Vi skal ikke diskutere hvor riktig definisjonen er, men legge merke til at oppgaven (undersøkelsen) vil gjenta seg selv (på moren), så lenge personen vi undersøker ikke har bodd minst 20 år i Bergen. Oppgaven, undersøkelsen stopper enten fordi vi i støter på en person som har bodd mer enn 20 år i Bergen, eller fordi vi ikke finner (har en peker) til moren til den vi nå undersøker En bergenser er en person som har bodd minst 20 år i Bergen, eller som har en mor som er bergenser, eller som har en mormor som er bergenser, eller som har en mormormor som er bergenser, eller som har en mormormormor som er bergenser, eller... Definisjon av en bregne En bregne er en stilk med bregner på. Oppgave Hva skjer hvis vi finner en bregne og forsøker å fastslå det ved hjelp av denne defininsjonen? Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 3 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 4 av 29

2 Et talleksempel, multipliser tallene fra 1 til n Vi skal lage en metode som multipliserer alle tallene fra 1 til n. Det er noe vi trenger når vi f.eks. skal finne ut hvor mange forskjellige måter (forskjellig innbyrdes plassering) vi kan plassere n objekter på. Hvis n = 7, skal vi altså finne produktet av regnestykket = Etter som vi regner ut nye verdier, benytter vi oss av at: f(5) = f(4) 5 = 24 5 = 120 f(6) = f(5) 6 = = 720 Og vi skjønner etterhvert at vi finner verdien av f(n) enkelt hvis vi kjenner verdien av forrige verdi f(n 1), fordi Vi gir metoden navnet f, den er av type int og har en parameter n av type int: f(n) = (n 1) n Før vi programmerer, la oss «bli kjent med» metoden ved å regne ut noen verdier av f for forskjellige verdier av argumentet n: er det samme som f(n) = f(n 1) n Den siste formelen er en rekursiv definisjon av metoden f. Det er denne vi benytter når vi skal programere rekursivt: f(1) = 1 f(2) = 1 2 = 2 f(3) = = 6 f(4) = = 24 int svar; if (n == 1) svar = 1; else svar = f(n 1) * n; return svar; Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 5 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 6 av 29 Legg merke til at vi har eksplisitt sørget for at metoden gir riktig svar for n = 1, pga. if testen. Anta at metoden gir riktig svar for n = k 1, da har vi programmert metoden (else gren) slik at den også gir riktig svar for n = k. Vi har altså sikret at f(1) regner riktig, men da må (ved induksjon, kaller matematikerne dette) også f(2) bli riktig. Og når f(2) er rett, må f(3) gi riktig svar, og når f(3) er korrekt må f(4) være riktig, osv, osv... Før vi kan teste at metoden virker, må vi sette den inn i en klasse og et hovedprogram: class fakultet { public static void main(string[] args){ fakultet dd = new fakultet(); int argument = Integer.parseInt(args[0]); if (argument < 1) argument = 1; System.out.println("f(" + argument + ") = " + dd.f(argument)); int svar; if (n == 1) svar = 1; else svar = f(n 1) * n; return svar; Eksempel på kjøring av programmet med argument= 7: prompt> java fakultet 7 f(7) = 5040 Riktig. Men i denne kjøringen ser vi bare svaret. Hva er det egentlig som skjer? For å finne ut litt mer, la oss legge inn testutskrifter; en når f er kalt hvor vi skriver ut verdien av parameteren n, og en rett før f returnerer med beskjed om hvilken verdi (i svar) som blir returnert: int svar; System.out.println("testutskrift: f("+n+") er kalt"); if (n == 1) svar = 1; else svar = f(n 1) * n; System.out.println("testutskrift: f("+n+") returnerer verdien " + svar); return svar; Legg merke til at første testutskrift skjer før det rekursive kallet (når n > 1), mens andre testutskrift skjer etter det rekursive kallet. La oss først prøve uten at det blir noe rekursivt kall, ved å gi 1 som argument, deretter prøver vi med n = 10. Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 7 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 8 av 29

3 prompt> java fakultet 1 testutskrift: f(1) er kalt testutskrift: f(1) returnerer verdien 1 f(1) = 1 prompt> java Fak 10 f(10) er kalt f(9) er kalt f(8) er kalt f(7) er kalt f(6) er kalt f(5) er kalt f(4) er kalt f(3) er kalt f(2) er kalt f(1) er kalt f(1) returnerer verdien 1 f(2) returnerer verdien 2 f(3) returnerer verdien 6 f(4) returnerer verdien 24 f(5) returnerer verdien 120 f(6) returnerer verdien 720 f(7) returnerer verdien 5040 f(8) returnerer verdien f(9) returnerer verdien f(10) returnerer verdien f(10) = Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 9 av 29 prompt> java fakultet 4 testutskrift: f(4) er kalt testutskrift: f(3) er kalt testutskrift: f(2) er kalt testutskrift: f(1) er kalt testutskrift: f(1) returnerer verdien 1 testutskrift: f(2) returnerer verdien 2 testutskrift: f(3) returnerer verdien 6 testutskrift: f(4) returnerer verdien 24 f(4) = 24 Her ser vi at f(4) blir kalt, men at dette kallet ikke avsluttes, men kaller straks videre på f(3) som straks kaller på f(2) som igjen umiddelbart kaller f(1). f(1) gir ikke opphav til et rekursivt kall, men returnerer straks verdien 1. Denne returverdien leveres så til den som kalte f(1). Og hvem var det, jo f(2) «våkner opp igjen» og mottar returverdien mutipliserer med 2 og returnerer produktet 2 til f(3) som mutipliserer med 3 og leverer verdien 6 videre «bakover» til f(4) som endelig mutipliserer med 4 og returnerer svaret 24 til hovedprogrammet som gjorde kallet f(4). Dette går bra, fordi når f(k) kalles, forsvinner ikke (instansen av metoden) kallet f(k 1). Sistnevnte overlater kontrollen til f(k), går «i dvale» og «våkner opp igjen»når f(k 1) avsluttes og returnerer med en verdi. Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 10 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 11 av 29 svar = n * f(2); svar = n * f(1); return 1; n = 3; n = 2; svar = n * f(3); svar = 1; n = 4; n = 1; svar = n * f(4); dd.f(5); n = 5; main ( args[] = "5") Fysisk skjer dette i maskinen ved at hvert metodekall gir opphav til et «metodeobjekt» eller instans, som bevarer metodekallets parametre og variable. Metodekallet «dør» først når programkontrollen går ut av siste krøllparentes. Vi får en kjede av metodekall som ligger i dvale og venter på at nestemann skal avslutte og gi en returverdi. Oppbyggingen av kjeden stanser i det vi kommer til kallet f(1) som avslutter og returnerer en verdi uten å fortsette kallkjeden. Så nøstes kjeden tilbake til første kall. For å illustrere dynamikken i dette noe mer, kan vi legge inn et par testutskrifter til: int svar; System.out.print("testutskrift: f("+n+") er kalt og "); if (n == 1) svar = 1; else { System.out.println("går i dvale..."); svar = f(n 1) * n; System.out.print("testutskrift: f("+n+") våkner opp og "); System.out.println("returnerer verdien " + svar); return svar; Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 12 av 29

4 Test av programmet med n = 5 gir følgende «resultat»: prompt> java fakultet 5 testutskrift: f(5) er kalt og går i dvale... testutskrift: f(4) er kalt og går i dvale... testutskrift: f(3) er kalt og går i dvale... testutskrift: f(2) er kalt og går i dvale... testutskrift: f(1) er kalt og returnerer verdien 1 testutskrift: f(2) våkner opp og returnerer verdien 2 testutskrift: f(3) våkner opp og returnerer verdien 6 testutskrift: f(4) våkner opp og returnerer verdien 24 testutskrift: f(5) våkner opp og returnerer verdien 120 f(5) = 120 Her kunne vi si enda mer i det f(k) våkner opp, f.eks. hvilken verdi som kom ut av det rekursive kallet f(k 1). Den øvelsen overlates til auditoriet. Eksempel: utskrift av en tekststreng «vertikalt» Rekursjon kan brukes i alle metoder, der vi skal gjenta en deloppgave flere ganger. De fleste løkker, som er iterative kan enkelt erstattes med rekursjon. Vanligvis gjør vi det bare når tankegangen og programmet blir enklere ved bruk av rekursjon. Rekursjon koster fordi et metodekall tar både tid og plass. Et program som skriver ut en tekststreng «vertikalt», dvs. ett tegn per linje (println). void skriv (String s) { while (s.length() > 0) { System.out.println(s.substring(0,1)); // Husk å kaste utskrevet tegn s = s.substring(1,s.length()); Når vi skal skrive om metoden skriv() slik at den blir rekursiv, må vi finne ut hvordan vi kan dele opp oppgaven «skriv ut en tekststreng» i deloppgaver hvorav en er «skriv ut en teksstreng». Oppgaven vår kan deles opp i to deloppgaver: skriv ut tekststrengens første tegn skriv ut resten av teksstrengen Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 13 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 14 av 29 Det er den andre deloppgaven vi løser med et rekursivt kall, fordi den er en (litt mindre) deloppgave som er identisk med hele oppgaven: Hele programmet void skriv (String s) { if (s.length() == 1) System.out.println(s); else { // Mer enn ett tegn, skriver ut første System.out.println(s.substring(0,1)); // Kapper av utskrevet tegn s = s.substring(1,s.length()); // Da gjenstår bare å skrive ut resten. // Vi sender med samme parameter, // siden s nå er er ett tegn kortere. skriv (s); En test av programmet kan se slik ut: prompt> java vertprint rekursjon r e k u r s j o n prompt> class vertprint { void skriv (String s) { if (s.length() == 1) System.out.println(s); else { // Mer enn ett tegn, skriver ut første System.out.println(s.substring(0,1)); // Kapper av utskrevet tegn s = s.substring(1,s.length()); // Da gjenstår bare å skrive ut resten. // Vi sender med samme parameter, // siden s nå er er ett tegn kortere. skriv (s); public static void main(string[] args){ vertprint vp = new vertprint(); String argument = args[0]; if (argument.length() > 0) vp.skriv(argument); else return; Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 15 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 16 av 29

5 Finn største tall i en array Nå prøver vi bevisst å tenke rekursivt før vi starter å lage skisse av programmet. Vi oppsummerer så langt Hva har de to metodene felles? en if test deler metoden i to utfall: et basistilfelle med enkel løsning n=1 s.length()==1 et mer komplisert tilfelle hvor parameteren er «en nærmere» basistilfellet kaller på f(n 1) kaller på skriv(s) (s ett tegn kortere) vi antar at metoden virker som den skal når vi bruker (kaller) den. Antagelse: Anta at vi har en metode som finner og returnerer det største tallet i en array. Med har mener vi at vi kan bruke den, kalle den. basistilfelle: Hvis arrayen har lengde 1, da returnerer vi den verdien som ligger der. rekursiv gren: Sjekk verdien i arrayens siste plass og sammenlign denne med «det største tallet i resten av arrayen». Det største tallet i resten av arrayen er nettopp oppgaven vi er i ferd med å løse og vi benytter den ved å kalle på metoden (jf. antagelse). Programskisse: Anta vi har arrayen int A [] og at i er høyeste indeks i A. Startkallet for arrayen A med lengde n blir finnmax(n 1) int finnmax( int i ){ if (i=0) // basistilfelle <returner A[i]> else <returner største av A[i] og finnmax(i 1)> Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 17 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 18 av 29 Når vi programmerer ut skissen <største av A[i] og finnmax(i 1)> må vi passe på så vi ikke får mer enn ett rekursivt kall:... if (A[i] > finnmax(i 1)){ return A[i] else { return finnmax(i 1)... Er rekursjon alltid best? Rekursjon er en programmeringsmetode som ikke alltid gir ønsket resultat. Og det er effektiviteten det kan gå ut over, selv om vi programmerer korrekt. Dette vil fungere i den forstand at metoden «virker», men når programmet utfører else grenen, får vi to metodekall. Hvis arrayen er lang og vi ofte kommer inn i else grenen (hvordan er A da?) kan det ta lang tid før vi får et svar, siden kallene ofte fordobles. Kallsekvensen utgjør ikke lenger en kjede eller liste, men forgrener seg, slik at metodekallene danner en trestruktur. Dette gjør at vi får en eksponensiell vekst av kall, med de følger det får for eksekveringstiden, siden alle delkallene (forgreningene) må avslutte før første metodekall avslutter. Rekursive metoder er noe vi benytter oss av når problemstillingen er rekursiv av natur; Det gjør algoritmen enkel å lage. Sjansen for at programmet er korrekt blir større, siden logikken blir enklere. Alternativet til rekursjon er iterasjon, som oftest utført i en løkke (for, while). Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 19 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 20 av 29

6 Eksempel: Fibonaccitallene Fibonaccitallene er definert ved: F 0 = 1 F n = F 1 = 1 F n = F n 1 + F n 7 når n > 1. Vi regner ut noen verdier av F: (2) F 0 F 1 F 2 F 3 F 4 F 5 F 6 F 7 F 8 F 9 F 10 F 11 F Dette kan implementeres rekursivt slik: fib(2) gir opphav til 2 kall som begge er basistilfeller, tilsammen 3 kall. fib(3) gir opphav til et kall på fib(2) og ett kall på fib(1), tilsammen = 5 kall. fib(4) kaller fib(3) og fib(2), tilsammen = 9 kall. fib(5) kaller fib(4) og fib(3), tilsammen = 15 kall. fib(6) kaller fib(5) og fib(4), tilsammen = 25 kall: F5 F6 F4 int fib(int n) { if (n <= 1) { return 1; else { return fib(n 1) + fib(n 2); (Hva skjer hvis vi kaller på fib( 1)?) F2 F1 F1 F0 F1 F0 F1 F0 F1 F0 F4 F3 F3 F2 F3 F2 F2 F1 F2 F1 F1 F0 Generell regel: Ikke løs samme instans av et problem i separate rekursive kall! Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 21 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 22 av 29 Fargelegging Vi skal se litt på problemet å fargelegge et område som kan deles opp i underområder eller felt. Hvilken form området og feltene har, spiller strengt tatt ingen rolle, så lenge vi fra et felt alltid kan finne alle nabofelt. La oss for eksemplets skyld ta et kvadratisk rom, hvor feltene også er kvadratiske. Dette kan f.eks. være et rom med kvadratiske fliser. Her et eksempel med 7 7 felt: Dette problemet er rekursivt, fordi det å fargelegge hele rommet kan deles opp i deloppgaver å fargelegge feltene. Ideen er å lage en metode fargelegg som tar et felt som parameter og som fargelegger feltet og kaller seg selv med hvert nabofelt som parameter (for løkke) Siden alle felter er 4 nabo med minst to andre felt, skulle vi på denne måten komme til alle felt. Basistilfellet i denne algoritmen er når parameteren er et felt som ikke har umalte naboer. Da blir det heller ingen rekursive kall, men feltet blir fargelagt. I et javaprogram kan vi representere dette rommet som en todimensjonal array felt[][] med 7 7 pekere til felt objekter. Fra et felt[i][j] finner vi alle 4 naboer (venstre, over, høyre og under) ved å se på felt[i 1][j], felt[i][j+1],... men vi må passe på så vi ikke bruker indeksverdier utenfor arraygrensene. Det rekursive kallet er nærmere et basistilfelle fordi vi fargelegger eget felt før rekursive kall: antall felt totalt er endelig det gjenstår ett felt mindre å fargelegge enn i den metodeinstansen vi nå er Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 23 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 24 av 29

7 Hvis vi ikke fargela eget felt før vi kalte rekursivt på nabofelter, ville vi ikke redusere antall umalte felt. Algoritmen ville «gå i ring». Da bør vi kunne sette opp en skisse: ❶ Fargelegg felt ❷ Se på alle nabofelter: Hvis feltet ikke er fargelagt, fargelegg det. Programskisse, der vi tenker oss en datastruktur hvor feltene er objekter av klassen Felt (datastrukturen kan f.eks. være en en array A[][]. void fargelegg(felt f) { f.mal(sinober); // fargelegging nf = f.nestenabo(); while ( (nf!= null) && (!nf.malt()) { fargelegg(nf); Vi har antatt at Felt har en metode mal(string farge) som fargelegger et Felt objekt (merker det malt) og en boolsk metode malt() som returnerer true hvis feltet er fargelagt. I programskissen over har vi ikke sagt noe om hvor mange naboer hvert felt har. Heller ikke har vi sagt noe om rekkefølgen vi kaller naboene i. La oss for øvelsens skyld, se på et tilfelle med et rom (gulv) med kvadratiske ruter eller fliser. Noen av rutene er fargelagt. Rutene er nabomessig forbundet med hverandre (4 naboer) i rekkefølgen høyre, under, venstre, over: La oss gjøre dette for hånd for dette rommet: Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 25 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 26 av 29 Senere i skal vi lære om lister. Det er en datastruktur der vi kjeder objekter etter hverandre i en liste. Det ligner mye på en endimensjonal array, men vi har ikke tilgang til objektene via en indeksert variabel, men må følge en kjede pekere for å komme fram til et bestemt objekt. Listestrukturen er bare en spesiell utgave av en generell datastruktur eller nettverk. En generell struktur der objektene henger sammen ved hjelp av pekere, kaller vi gjerne en graf. Vi brukte fargelegging som eksempel i algoritmen. Men det kan vi bytte ut. F.eks. kan vi lete etter et objekt med en spesiell egenskap, eller vi kan gjøre endringer i noen objekter, eller alle. Poenget er at algoritmeskissen vil virke, i betydningen besøke (traversere) alle objekter, for alle grafer (nettverk av objekter) som tilfredsstiller egenskapene over. Algoritmen for å fargelegge ruter i et rektangel: void fargelegg(felt f) { f.mal(sinober); // fargelegging nf = f.nestenabo(); while ( (nf!= null) && (!nf.malt()) { fargelegg(nf); kan benyttes generelt på objekter i en graf såfremt: man fra et objekt kan nå alle gjennom nabopekere nestenabo() gir alle naboer til et objekt Lister og trær er eksempler på spesielle grafer som oppfyller disse egenskapene. Dette er den vanligste bruk av rekursjon i programmer. (Påstanden er udokumentert) Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 27 av 29 Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 28 av 29

8 Oppsummering Programskisse for traversering av en graf (dybde først) behandle dette objektet (f.eks. endre en lokal verdi) For nabo i naboliste: Hvis naboobjekt er ubehandlet og lovlig: Traverser med utgangspunkt i naboobjekt. Rekursive metoder En rekursiv metode er en metode som kaller seg selv. Huskeregler: Det må alltid finnes et basistilfelle som kan løses uten rekursjon. De rekursive kallene må gå i retning av et basistilfelle. Designregel: Anta at de rekursive kallene fungerer. Ikke løs samme instans av et problem i separate rekursive kall Stein Michael Storleer, Ifi/UiO: 13. februar 2007 Ark 29 av 29

"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

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

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 6. juni 2006 Tid for eksamen: 1430 1730 Oppgavesettet er på 6 sider. Vedlegg: INF1010 Objektorientert programmering

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

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

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo 1 Innledning Dette notatet beskriver noe av det som foregår i primærlageret når et Javaprogram utføres.

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

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

2 Om statiske variable/konstanter og statiske metoder.

2 Om statiske variable/konstanter og statiske metoder. Gaustadbekkdalen, januar 22 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår i primærlageret når

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

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7

Gjennomgang prøveeksamen oppgave 1, 2, 4, 5, 7 Gjennomgang prøveeksamen 2014 oppgave 1, 2, 4, 5, 7 1a: Hva er verdien til tall etter at følgende kode er utført: 17 int tall = 5; tall = (tall*3) + 2; 5 15 17 1b: Anta at følgende programsetninger utføres.

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

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

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO

Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier. 11. okt Siri Moe Jensen Inst. for informatikk, UiO Uke 8 Eksamenseksempler + Ilan Villanger om studiestrategier 11. okt. 2011 Siri Moe Jensen Inst. for informatikk, UiO 1 Innhold Eksamen INF1000 Høst 2011: Oppgave 4-7 Tekstmanipulering Metoder med og uten

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Eksamensdag: 6. juni 2013 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg:

Detaljer

Rekursjon. Hanois tårn. Milepeler for å løse problemet

Rekursjon. Hanois tårn. Milepeler for å løse problemet Rekursjon. Hanois tårn. Milepeler for å løse problemet Hanois tårn. Milepeler for å løse problemet Forstå spillet Bestemme/skjønne hvordan spillet løses Lage en plan for hva programmet skal gjøre (med

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet er på

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

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

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

Forelesning inf Java 5

Forelesning inf Java 5 Ole Chr. Lingjærde 1 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen

Detaljer

Forelesning inf Java 5

Forelesning inf Java 5 Forelesning inf1000 - Java 5 Tema: Mer om metoder 2D-arrayer String Ole Christian Lingjærde, 26. september 2013 Ole Chr. Lingjærde Institutt for informatikk, 26. september 2013 1 Strukturen til et Java-program

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

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

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java

Innhold uke 4. INF 1000 høsten 2011 Uke 4: 13. september. Deklarasjon av peker og opprettelse av arrayobjektet. Representasjon av array i Java INF høsten 2 Uke 4: 3. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Mål for uke 4: Innhold uke 4 Repetisjon m/ utvidelser:

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

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

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

Forelesning inf Java 4

Forelesning inf Java 4 Forelesning inf1000 - Java 4 Tema: Løkker Arrayer Metoder Ole Christian Lingjærde, 12. september 2012 Ole Chr. Lingjærde Institutt for informatikk, 29. august 2012 1 Repetisjon: arrayer Deklarere og opprette

Detaljer

Endret litt som ukeoppgave i INF1010 våren 2004

Endret litt som ukeoppgave i INF1010 våren 2004 Endret litt som ukeoppgave i INF1010 våren 2004!!!" # # $# ##!!%# # &##!'! Kontroller at oppgavesettet er komplett før du begynner å besvare det. Les gjerne gjennom hele oppgavesettet før du begynner med

Detaljer

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4

i=0 Repetisjon: arrayer Forelesning inf Java 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker 0*0 0*2 0*3 0*1 0*4 Forelesning inf - Java 4 Repetisjon: arrayer Tema: Løkker Arrayer Metoder Ole Christian Lingjærde,. september Deklarere og opprette array - eksempler: int[] a = new int[]; String[] a = new String[]; I

Detaljer

Seminaroppgaver IN1010, uke 2

Seminaroppgaver IN1010, uke 2 Seminaroppgaver IN1010, uke 2 1.a: Skriv en klasse HeiVerden.java. Klassen skal inneholde en main- metode (se på notatet fra tidligere). Inne i main -metoden skal programmet først la brukeren oppgi en

Detaljer

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER

13.09.2012 LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke 1-3 12. September 2012 Siri Moe Jensen EKSEMPLER .9.22 LITT OM OPPLEGGET INF EKSTRATILBUD Stoff fra uke - 2. September 22 Siri Moe Jensen Målgruppe: De som mangler forståelse for konseptene gjennomgått så langt. Trening får du ved å jobbe med oppgaver,

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

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; } Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; Hva skrives ut på skjermen når følgende kode utføres? int [] tallene =

Detaljer

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk

Eks 1: Binærtre Binærtretraversering Eks 2: Binærtre og stakk Godkjent oblig 1? Les e-post til din UiO-adresse Svar på e-post fra lablærer Ingen godkjenning før avholdt møte med lablærer Godkjentlistene brukes ikke til å informere om status for obligene Ta vare på

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Kandidatnr Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Onsdag 10. juni 2009 Tid for eksamen: 9.00 12.00 Oppgavesettet

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

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen. Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen. "Taher" type: String : type: :... type: : inf1010student null michael@ifi.uio.no INF1010 26. januar 2012 (uke 4) 2 class Eks01 { public

Detaljer

INF1010 siste begreper før oblig 2

INF1010 siste begreper før oblig 2 INF1010 siste begreper før oblig 2 Sammenligning. Mer lenkede lister. Forskjellige listeimplementasjoner. Binære trær. Bittelitt om grensesnitt (interface). Dagens forelesning Flere temaer på grunn av

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Kandidatnummer: Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveeksamen i : INF1000 Grunnkurs i objektorientert programmering Prøveeksamensdag : Onsdag 12. november 2014 Tid

Detaljer

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo

Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Gaustadbekkdalen, januar 27 Litt om datastrukturer i Java Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Innledning Dette notatet beskriver noe av det som foregår inne i primærlageret

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

Algoritmer og datastrukturer Løsningsforslag

Algoritmer og datastrukturer Løsningsforslag 1 Algoritmer og datastrukturer Løsningsforslag Eksamen 29. november 2011 Oppgave 1A Verdien til variabelen m blir lik posisjonen til den «minste»verdien i tabellen, dvs. bokstaven A, og det blir 6. Oppgave

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 4. juni 2005 Tid for eksamen: 0900 1500 Oppgavesettet er på 5 sider. Vedlegg: Tillatte hjelpemidler: INF1010 Objektorientert

Detaljer

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur

Gjøre noe i hele treet = kalle på samme metode i alle objekten. Java datastruktur Klassestruktur Godkjent oblig 1? Les e-post til din UiO-adresse Svar på e-post fra lablærer Ingen godkjenning før avholdt møte med lablærer Godkjentlistene brukes ikke til å informere om status for obligene Ta vare på

Detaljer

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen

INF1000 EKSTRATILBUD. Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen INF1000 EKSTRATILBUD Stoff fra uke 1-5 (6) 3. oktober 2012 Siri Moe Jensen PLAN FOR DAGEN gjennomgå stoff fra uke 1-5(6), men med en litt annen tilnærming kun gjennomgått stoff, men vekt på konsepter og

Detaljer

Velkommen til. INF våren 2016

Velkommen til. INF våren 2016 Velkommen til INF1010 - våren 2016 Denne uken (onsdag og torsdag): Om INF1010 Java datastrukturer Klasser med parametre i Java Stein Gjessing Institutt for informatikk Universitetet i Oslo 1 1 INF1010

Detaljer

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf

Oppgave 3 a. Antagelser i oppgaveteksten. INF1020 Algoritmer og datastrukturer. Oppgave 3. Eksempelgraf Oppgave 3 3 a IN1020 Algoritmer og datastrukturer orelesning 15: Gjennomgang av eksamen vår 2001 oppgave 3 Arild Waaler Institutt for informatikk, Universitetet i Oslo 11. desember 2006 Oppgave 3 a. Antagelser

Detaljer

INF1010 Rekursjon. Marit Nybakken 1. mars 2004

INF1010 Rekursjon. Marit Nybakken 1. mars 2004 INF1010 Rekursjon Marit Nybakken marnybak@ifi.uio.no 1. mars 2004 Å lære rekursjon gjøres ved å prøve å gjøre en masse oppgaver selv til man får en aha-opplevelse. Marit prøver likevel å forklare littegranne.

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

INF1000 : Forelesning 4

INF1000 : Forelesning 4 INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 13. juni 2006 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 5

Detaljer

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012

INF1000 - Uke 10. Ukesoppgaver 10 24. oktober 2012 INF1000 - Uke 10 Ukesoppgaver 10 24. oktober 2012 Vanlige ukesoppgaver De første 4 oppgavene (Oppgave 1-4) handler om HashMap og bør absolutt gjøres før du starter på Oblig 4. Deretter er det en del repetisjonsoppgaver

Detaljer

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011)

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF1000 - Høst 2011) Løsningsforslag til oppgave 7, 8, og 9 mangler Klasser og objekter (kap. 8.1-8.14 i "Rett på Java" 3. utg.) NB! Legg merke til at disse

Detaljer

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4

i=0 i=1 Repetisjon: nesting av løkker INF1000 : Forelesning 4 Repetisjon: nesting av løkker Repetisjon: nesting av løkker j=0 j=1 j=2 j=3 j=4 Repetisjon: nesting av løkker Kort repetisjon av doble (nestede) løkker Mer om D-arrayer Introduksjon til D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk

Detaljer

INF1000 Behandling av tekster

INF1000 Behandling av tekster INF1000 Behandling av tekster Marit Nybakken marnybak@ifi.uio.no 23. februar 2004 Tekster Vi kommer nesten aldri utenom å bruke tekststrenger i programmene våre, ikke minst fordi det nesten alltid skal

Detaljer

INF1000: Forelesning 4. Mer om arrayer Metoder

INF1000: Forelesning 4. Mer om arrayer Metoder INF1000: Forelesning 4 Mer om arrayer Metoder MER OM ARRAYER 2 Array som en samling verdier Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: String[] studenter = new String[500];

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

Introduksjon til objektorientert programmering

Introduksjon til objektorientert programmering Introduksjon til objektorientert programmering Samt litt mer om strenger og variable INF1000, uke6 Ragnhild Kobro Runde Grunnkurs i objektorientert programmering Strategi: Splitt og hersk Metoder kan brukes

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1000 Grunnkurs i objektorientert programmering Eksamensdag: 11. juni 2004 Tid for eksamen: 9.00 12.00 Oppgavesettet er på 8

Detaljer

Eksamen IN1010/INF1010 våren 2018

Eksamen IN1010/INF1010 våren 2018 Om eksamen Eksamen IN1010/INF1010 våren 2018 PRAKTISK INFORMASJON Hvis du synes noen deler av oppgaven er uklare, kan du legge dine egne forutsetninger til grunn og gjøre dine egne rimelige antagelser.

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

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

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

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo

INF1010, 22. mai Prøveeksamen (Eksamen 12. juni 2012) Stein Gjessing Inst. for Informatikk Universitetet i Oslo INF, 22. mai 23 Prøveeksamen 23 (Eksamen 2. juni 22) Stein Gjessing Inst. for Informatikk Universitetet i Oslo Oppgave a Tegn klassehierarkiet for de 9 produkttypene som er beskrevet over. Inkluder også

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

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

INF1020 Algoritmer og datastrukturer GRAFER

INF1020 Algoritmer og datastrukturer GRAFER GRAFER Dagens plan: Minimale spenntrær Prim Kapittel 9.5.1 Kruskal Kapittel 9.5.2 Dybde-først søk Kapittel 9.6.1 Løkkeleting Dobbeltsammenhengende grafer Kapittel 9.6.2 Å finne ledd-noder articulation

Detaljer

Konstruktører. Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver. skjer følgende:

Konstruktører. Bruk av konstruktører når vi opererer med enkle klasser er ganske ukomplisert. Når vi skriver. skjer følgende: Konstruktører Bruk av konstruktører når vi opererer med "enkle" klasser er ganske ukomplisert. Når vi skriver Punkt p = new Punkt(3,4); class Punkt { skjer følgende: int x, y; 1. Det settes av plass i

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

Enkle generiske klasser i Java

Enkle generiske klasser i Java Enkle generiske klasser i Java Oslo, 7/1-13 Av Stein Gjessing, Institutt for informatikk, Universitetet i Oslo Del 1: Enkle pekere Før vi tar fatt på det som er nytt i dette notatet, skal vi repetere litt

Detaljer

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre

Oppsummering. Kort gjennomgang av klasser etc ved å løse halvparten av eksamen Klasser. Datastrukturer. Interface Subklasser Klasseparametre Oppsummering Kort gjennomgang av klasser etc ved å løse halvparten av eksamen 2012. Klasser Interface Subklasser Klasseparametre Datastrukturer Hva er problemet? Oppgaven Emballasjefabrikken Renpakk skal

Detaljer

INF 1000 høsten 2011 Uke september

INF 1000 høsten 2011 Uke september INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus 1 INF1000 undervisningen Forelesningene: Første

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

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

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Objektorientert programmering Eksamensdag: 9. juni 2011 Tid for eksamen: 09.00 15.00 Oppgavesettet er på 5 sider. Vedlegg:

Detaljer

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær

GRAFER. Korteste vei i en vektet graf uten negative kanter. Korteste vei, en-til-alle, for: Minimale spenntrær IN Algoritmer og datastrukturer GRAER IN Algoritmer og datastrukturer Dagens plan: orteste vei, en-til-alle, for: ektet rettet graf uten negative kanter (apittel 9..) (Dijkstras algoritme) ektet rettet

Detaljer

INF1000 undervisningen INF 1000 høsten 2011 Uke september

INF1000 undervisningen INF 1000 høsten 2011 Uke september INF1000 undervisningen INF 1000 høsten 2011 Uke 2 30. september Grunnkurs i Objektorientert Programmering Institutt for Informatikk Universitetet i Oslo Siri Moe Jensen og Arne Maus Forelesningene: Første

Detaljer

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene:

MER OM ARRAYER. INF1000: Forelesning 4. Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: INF1000: Forelesning 4 Mer om arrayer Metoder MER OM ARRAYER 2 Array som en samling verdier Anta at vi ønsker å lagre en liste med navnene på alle INF1000-studentene: String[] studenter = new String[500];

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i Eksamensdag: 18. august 2005 Tid for eksamen: 0900 1500 Oppgavesettet er på 6 sider. Vedlegg: Tillatte hjelpemidler: INF1010 Objektorientert

Detaljer

IN våren 2018 Tirsdag 16. januar

IN våren 2018 Tirsdag 16. januar IN1010 - våren 2018 Tirsdag 16. januar Java Objekter og klasser Stein Gjessing Universitetet i Oslo 1 1 IN1010: Objektorientert programmering Hva er et objekt? Hva er en klasse? Aller enkleste eksempel

Detaljer

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt:

Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt: Hvordan skrive Flok og Flass kode? I mange tilfelle er det svært enkelt: inchar INC inint INI Tegnet eller tallverdien kommer i I registeret. outchar OUTC outint (n) OUTI n outline OLIN I Flink maskinen

Detaljer

INF januar 2015 Stein Michael Storleer (michael) Lenkelister

INF januar 2015 Stein Michael Storleer (michael) Lenkelister INF1010 29. januar 2015 Stein Michael Storleer (michael) Lenkelister Lenke + lister = lenkelister Vi starter med lenkeobjektene Lager en kjede av objekter ved hjelp av pekere class { ; Legger Jl data innholdet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO Side 1 UNIVERSITETET I OSLO Kandidatnr Det matematisk-naturvitenskapelige fakultet LØSNINGSFORSLAG Eksamen i: PRØVEEKSAMEN INF1000 Eksamensdag: Prøveeksamen 22.11.2011 Tid for eksamen: 12:15-16:15 Oppgavesettet

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 Bokmål UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i: INF1000 Grunnkurs i objektorientert programmering Eksamensdag: Fredag 4. desember 2015 Tid for eksamen: 14.30 (4 timer)

Detaljer

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder

Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder INF1000 : Forelesning 4 Kort repetisjon av doble (nestede) løkker Mer om 1D-arrayer Introduksjon til 2D-arrayer Metoder Ole Christian Lingjærde Biomedisinsk forskningsgruppe Institutt for informatikk Universitetet

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Eksamen i INF1010 Prøveeksamen 2010 Eksamensdag: 26. mai 2010 Tid for eksamen: 00.00 06.00 Oppgavesettet er på 7 sider. Vedlegg: ingen Tillatte

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

Java PRP brukermanual

Java PRP brukermanual Java PRP brukermanual 1.1 Introduksjon 1.1.1 Hva er Java PRP Java PRP (Parallel Recursive Procedure) gir oss muligheten til automatisk parallellisering av programmer, som baserer seg på noen rekursive

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

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Repetisjon: Statiske språk uten rekursive metoder (C1 og C2) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Dagens tema Kjøresystemer (Ghezzi&Jazayeri.6,.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/5 Repetisjon: Statiske språk uten rekursive

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

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7)

Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Dagens tema Kjøresystemer (Ghezzi&Jazayeri 2.6, 2.7) Repetisjon Språk med rekursjon (C3) og blokker (C4) Statisk link Dynamisk allokering (C5) Parameteroverføring 1/25 Forelesning 11 5.11.2003 Repetisjon:

Detaljer

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO UNIVERSITETET I OSLO Det matematisk-naturvitenskapelige fakultet Prøveksamen i INF1010 Objektorientert programmering Dato: 26. mai 2016 Tid for eksamen: 09.00 15.00 (6 timer) Oppgavesettet er på 6 sider.

Detaljer