Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad

Storlek: px
Starta visningen från sidan:

Download "Programmeringsmetodik DV1 Programkonstruktion 1. Moment 4 Om rekursion. PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad"

Transkript

1 Programmeringsmetodik DV1 Programkonstruktion 1 Moment 4 Om rekursion PK1&PM1 HT-06 moment 4 Sida 1 Uppdaterad

2 Summera godtyckligt antal tal (* sumupto n Type: int->int Pre: n >= 0, n <= 7 Post: Summan av talen från 0 till n Ex.: sumupto 4 = 10 sumupto 0 = 0 *) fun sumupto 0 = 0 sumupto 1 = 0+1 sumupto 2 = sumupto 3 = sumupto 4 = sumupto 5 = sumupto 6 = sumupto 7 = n>7, då?? Detta är uppenbarligen ingen framkomlig väg... PK1&PM1 HT-06 moment 4 Sida 2 Uppdaterad

3 Analys av summeringsproblemet För att summera talen från 0 till n kan jag lösa det enklare problemet att summera från 0 till n-1 och sedan lägga till n! Om n=0 kan jag direkt säga att summan är 0. Exempel: summera talen från 0 till 4. Ett enklare problem är att summera från 0 till 3. Summan av det enklare problemet blir 6? Lägg till 4. Nu har vi 6+4=10 vilket är summan av talen från 0 till 4. Hur fick jag tag på summan av talen från 0 till 3? På samma sätt! Ett enklare problem är att summera från 0 till 2. Summan av det enklare problemet blir 3? Lägg till 3. Nu har vi 3+3=6 vilket är summan av talen från 0 till 3. Etcetera PK1&PM1 HT-06 moment 4 Sida 3 Uppdaterad

4 Fullständigt resonemang för summeringen Summera talen från 0 till 4. Ett enklare problem är att summera från 0 till 3. Ett enklare problem är att summera från 0 till 2. Ett enklare problem är att summera från 0 till 1. Ett enklare problem är att summera från 0 till 0. Summan är 0! Summan är 0+1 = 1. Summan är 1+2 = 3. Summan är 3+3 = 6. Summan är 6+4=10. Denna metod kallas rekursion. (Från latinets recurso att återvända.) PK1&PM1 HT-06 moment 4 Sida 4 Uppdaterad

5 Rekursion i ML (* sumupto n Type: int->int Pre: n >= 0 Post: Summan av talen från 0 till n Ex.: sumupto 4 = 10 sumupto 0 = 0 *) fun sumupto(0) = 0 Basfall Rekursivt anrop sumupto(n) = sumupto(n-1) + n sumupto 4 > sumupto(4-1)+4 > sumupto(3)+4 här beräknas summan av talen från 0 till 3 > 6+4 > 10 PK1&PM1 HT-06 moment 4 Sida 5 Uppdaterad

6 Den fullständiga beräkningen fun sumupto(0) = 0 Basfall sumupto(n) = sumupto(n-1) + n sumupto 4 > sumupto(4-1)+4 > sumupto(3)+4 > (sumupto(3-1)+3)+4 > (sumupto(2)+3)+4 > ((sumupto(2-1)+2)+3)+4 > ((sumupto(1)+2)+3)+4 > (((sumupto(1-1)+1)+2)+3)+4 > (((sumupto(0)+1)+2)+3)+4 > (((0+1)+2)+3)+4 > ((1+2)+3)+4 > (3+3)+4 > 6+4 > 10 Rekursivt anrop PK1&PM1 HT-06 moment 4 Sida 6 Uppdaterad

7 Hur skall man förstå detta? fun sumupto 0 = 0 sumupto n = sumupto(n-1) + n Rekursion är en variant av principen att dela upp problemet i enklare delar och sedan sätta ihop resultatet av delarna. En rekursiv funktion anropar sig själv, men problemet är ändå enklare eftersom argumenten är mindre (precis vad detta betyder återkommer vi till). När det rekursiva anropet är klart sätter man ihop resultatet (additionen i exemplet). Varje rekursivt anrop är som en rysk docka. PK1&PM1 HT-06 moment 4 Sida 7 Uppdaterad

8 Bindningar i rekursion fun sumupto 0 = 0 sumupto n = sumupto(n-1) + n sumupto 2 > sumupto(n-1)+n [n-->2] > sumupto(2-1)+n [n-->2] > sumupto 1 +n [n-->2] > (sumupto(n-1)+n [n-->1])+n [n-->2] > (sumupto(1-1)+n [n-->1])+n [n-->2] > (sumupto 0 +n [n-->1])+n [n-->2] > (0+n [n-->1])+n [n-->2] > (0+1 [n-->1])+n [n-->2] > (1 [n-->1])+n [n-->2] > 1+n [n-->2] > 1+2 [n-->2] > 3 [n-->2] > 3 PK1&PM1 HT-06 moment 4 Sida 8 Uppdaterad

9 Exempel: Euklides algoritm Största gemensamma delaren (gcd) till 126 och 168 Start. m n r Är n=0? Nej. Ja. Stopp. Låt r vara resten när m delas med n. Låt m vara n. Låt n vara r För att beräkna gcd för m och n, lös det enklare problemet att beräkna gcd för n och resten vid division av m med n! PK1&PM1 HT-06 moment 4 Sida 9 Uppdaterad

10 gcd i ML (* gcd(m,n) Type: int*int->int Pre: m,n>=0 Post: Största gemensamma delaren till m och n Ex.: gcd(126,168) = 42 *) fun gcd(m,0) = m gcd(m,n) = gcd(n, m mod n) gcd(126,168) > gcd(168,126 mod 168) > gcd(168,126) > gcd(126,168 mod 126) > gcd(126,42) > gcd(42,126 mod 42) > gcd(42,0) > 42 PK1&PM1 HT-06 moment 4 Sida 10 Uppdaterad

11 Terminering Hur vet man att rekursionen någonsin avslutas (terminerar)? Vad innebär det att den inte gör det? Inte självklart att rekursionen terminerar... felaktiga argument: sumupto ~1 > sumupto(~1-1) + ~1 > sumupto(~2) + ~1 > (sumupto(~2-1) + ~2) + ~1 > (sumupto(~3) + ~2) + ~1 >... Förvillkoret måste utesluta sådana argument! eller en liten felskrivning: fun sumupto(0) = 0 sumupto(n) = sumupto(n+1) + n PK1&PM1 HT-06 moment 4 Sida 11 Uppdaterad

12 Rekursionsvarianter Varje rekursivt anrop måste lösa ett enklare fall än det föregående. Ett tillräckligt enkelt fall måste kunna lösas utan rekursion. Varje rekursivt anrop av sumupto(n) har ett mindre värde av n än det föregående. Fallet när n=0 (basfallet) hanteras utan rekursion. Samtidigt kan inte n bli mindre än 0. En rekursionsvariant är ett heltalsuttryck sådant att: Det blir mindre för varje rekursivt anrop. Det kan inte bli mindre än något bestämt värde (normalt 0). För detta bestämda värde (och ev. andra) löses problemet utan rekursion. Finns en rekursionsvariant är terminering garanterad. Rekursionsvarianten är en del av programdokumentationen! PK1&PM1 HT-06 moment 4 Sida 12 Uppdaterad

13 Konkret tolkning av varianten Eftersom varianten minskar med 1 (minst!) för varje rekursivt anrop och inte kan bli mindre än 0 (typiskt) så ger varianten en gräns för hur många rekursiva anrop som behövs. Är varianten 10 krävs maximalt 10 rekursiva anrop för att beräkna funktionen. Detta ger även ett tips om hur man kan hitta varianten. Det finns funktioner där man inte (eller inte med rimlig ansträngning) kan ge en gräns för antalet rekursiva anrop men som ändå säkert terminerar. Då får man använda andra tekniker, t.ex. välgrundade ordningar. Vi kommer endast i undantagsfall att stöta på sådana funktioner i denna kurs. PK1&PM1 HT-06 moment 4 Sida 13 Uppdaterad

14 Rekursion och matematisk induktion Det finns ett nära förhållande mellan rekursion och induktion. Exempel: Bevisa att en rekursionsvariant garanterar terminering! Låt T(n) betyda att ett anrop av funktionen med argument som har variantvärdet n terminerar. Fullständig induktion över n (naturligt tal, ok ty varianten är inte < 0) T(0) gäller direkt (basfallet). Vi vill visa att T(n) gäller. Vi vet (induktionsantagande) att T(n ) för alla n <n Alla rekursiva anrop som behövs för att beräkna funktionen har en variant n <n, alltså terminerar de eftersom vi vet att T(n ). Alltså kommer det givna anropet att terminera. PK1&PM1 HT-06 moment 4 Sida 14 Uppdaterad

15 gcd terminerar... Pre: m,n>=0... fun gcd(m,0) = m gcd(m,n) = gcd(n, m mod n) n är en rekursionsvariant för gcd. m mod n är alltid (definitionsmässigt) mindre än n. n kan inte vara mindre än 0 (eftersom förvillkoret anger att n från början inte är mindre än 0 och m mod n inte kan bli mindre än 0). fallet n=0 hanteras utan rekursion. PK1&PM1 HT-06 moment 4 Sida 15 Uppdaterad

16 Alt. 1 Varianter på defensiv programmering fun sumupto n = if n < 0 then raise Domain else sumupto'(n) fun sumupto'(0) = 0 sumupto'(n) = sumupto'(n-1) + n Alt. 2 fun sumupto(0) = 0 sumupto(n) = if n < 0 then raise Domain else sumupto(n-1) + n Alt. 3 fun sumupto(n) = Påverkas förvillkoret i detta fall? if n <= 0 then 0 else sumupto(n-1) + n PK1&PM1 HT-06 moment 4 Sida 16 Uppdaterad

17 Exempel: räkna uppåt till basfallet (* sumrange(i,n) Type: int*int->int Pre: n >= i-1 Post: Summan av talen från i till n. Ex.: sumrange(0,4) = 10 sumrange(2,4) = 9 sumrange(5,4) = 0 *) (* Variant: n-i+1 *) fun sumrange(i,n) = if i>n then 0 else sumrange(i+1,n)+i; (* sumupto n Type: int->int Pre: n >= 0 Post: Summan av talen från 0 till n Ex.: sumupto 4 = 10 sumupto 0 = 0 *) fun sumupto n = sumrange(0,n); PK1&PM1 HT-06 moment 4 Sida 17 Uppdaterad

18 Undvik onödiga begränsningar Varför förvillkor n>=i-1? Varför inte n>=i eller t.o.m. n>i? Varför någon alls? sumrange(i,n) summerar tal från i till n. Antalet tal är n-i+1. Vad händer om antalet är 1, 0 eller 1? Kan man tala om summan av ett tal, noll tal, 1 tal?!? Varför är basfallet i sumrange skrivet som det är? if i>n then 0 varför inte if i>=n then i eller t.o.m. if i>=n+1 then i+n Man bör försöka hitta en naturlig tolkning av summa som är så generell som möjligt utan att krångla till programmet. Då får man ett program som är flexibelt och kan användas i många situationer. PK1&PM1 HT-06 moment 4 Sida 18 Uppdaterad

19 Tolkning av konstiga summor Summerar man två delar av en talserie och adderar delsummorna får man summan av hela talserien = =21 1, 2, 3, 4, 5, 6 1, 2, 3, 4, 5, = = =21 1= = =21 Låt nu en delserie innehålla ett tal. Regeln gäller fortfarande om man antar att summan av ett tal är talet självt. Låt en delserie vara tom dvs innehålla noll tal. Regeln gäller fortfarande om man antar att summan av noll tal är 0. En talserie bestäms av sitt första och sista tal. En serie med noll tal får ett sista tal (n) som är ett mindre än det första talet (i). Därför bör sumrange kunna hantera alla fall där n>=i-1. PK1&PM1 HT-06 moment 4 Sida 19 Uppdaterad

20 Exempel: räkna tecken (* countchar(s,c) Type: string*char->int Pre: (ingen) Post: Antalet förekomster av c i s Ex.: countchar("hej, du glade",#"d")=2 countchar("hej, du glade",#"q")=0 *) (* Variant: size s *) fun countchar("",_) = 0 countchar(s,c) = countchar(string.substring(s,1,size s -1),c) + (if String.sub(s,0)=c then 1 else 0) PK1&PM1 HT-06 moment 4 Sida 20 Uppdaterad

21 En annan ansats till teckenräkning Vid rekursion över strängar är rekursionsargumentet en delsträng. Delsträngen behöver inte konstrueras uttryckligen istället kan den vara underförstådd (implicit) genom att använda en position i strängen som extra argument och göra rekursion över positionen. Strängargumentet s ersätts av två argument s och pos. s är den ursprungliga strängen, pos är positionen. När man använder s får man skriva String.sub(s,pos) istället för String.sub(s,0) Det rekursiva anropet har s och pos+1 istället för String.substring(s,1,size s-1) Denna teknik är viktig om det är komplicerat att konstruera uttrycket i det rekursiva anropet. PK1&PM1 HT-06 moment 4 Sida 21 Uppdaterad

22 Exempel: räkna tecken på annat sätt (* countchar2'(s,c,pos) Type: string*char*int->int Pre: 0<=pos<=size s Post: Antalet förekomster av c i s från och med position pos. Ex.: countchar2'("hej, du glade",#"d",3)=2 countchar2'("hej, du glade",#"d",13)=0 *) (* Variant: size s - pos *) fun countchar2'(s,c,pos) = if pos >= size s then 0 else countchar2'(s,c,pos+1) + (if String.sub(s,pos)=c then 1 else 0) (* countchar2(s,c) Type: string*char->int Pre: (ingen) Post: Antalet förekomster av c i s Ex.: countchar2("hej, du glade",#"d")=2 countchar2("hej, du glade",#"q")=0 *) fun countchar2(s,c) = countchar2'(s,c,0) PK1&PM1 HT-06 moment 4 Sida 22 Uppdaterad

23 Exempel: räkna tecken baklänges (* countchar3'(s,c,pos) Type: string*char*int->int Pre: 0<=pos<=size s Post: Antalet förekomster av c i s före position pos. Ex.: countchar3'("hej, du glade",#"d",7)=1 countchar3'("hej, du glade",#"d",3)=0 *) (* Variant: pos *) fun countchar3'(s,c,0) = 0 countchar3'(s,c,pos) = countchar3'(s,c,pos-1) + (if String.sub(s,pos-1)=c then 1 else 0); (* countchar3(s,c) Type: string*char->int Pre: (ingen) Post: Antalet förekomster av c i s Ex.: countchar3("hej, du glade",#"d")=2 countchar3("hej, du glade",#"q")=0 *) fun countchar3(s,c) = countchar3'(s,c,size s); PK1&PM1 HT-06 moment 4 Sida 23 Uppdaterad

24 En annan analys av summeringsproblemet Start. Låt summan vara 0. Är n=0? Ja. Stopp. Nej. Addera n till summan. Subtrahera 1 från n. Konstruktionen kallas för en loop. (Det spelar ingen roll om vi adderar n eller n) PK1&PM1 HT-06 moment 4 Sida 24 Uppdaterad

25 Iteration i ML Basfall fun sumupto n = sumuptoaux(n,0) Rekursivt anrop fun sumuptoaux(0,sum) = sum sumuptoaux(n,sum) = sumuptoaux(n-1,sum+n) En hjälpfunktion sumuptoaux implementerar loopen. Tekniken kallas iteration (svansrekursion) och är ett specialfall av rekursion. Argumentet sum kallas för ackumulator. Obs att nya värden för n och sum beräknas samtidigt. sumupto 2 > sumuptoaux(2,0) > sumuptoaux(2-1,0+2) > sumuptoaux(1,2) > sumuptoaux(1-1,2+1) > sumuptoaux(0,3) > 3 PK1&PM1 HT-06 moment 4 Sida 25 Uppdaterad

26 Bindningar i iteration fun sumuptoaux(0,sum) = sum sumuptoaux(n,sum) = sumuptoaux(n-1,sum+n) sumuptoaux(2,0) > sumuptoaux(n-1,sum+n)[n >2,sum >0] > sumuptoaux(2-1,sum+n)[n >2,sum >0] > sumuptoaux(1,sum+n) [n >2,sum >0] > sumuptoaux(1,0+n) [n >2,sum >0] > sumuptoaux(1,0+2) [n >2,sum >0] > sumuptoaux(1,2) [n >2,sum >0] > sumuptoaux(n-1,sum+n)[n >1,sum >2] [n >2,sum >0] skuggas bort helt > sumuptoaux(1-1,sum+n)[n >1,sum >2] > sumuptoaux(0,sum+n) [n >1,sum >2] > sumuptoaux(0,2+n) [n >1,sum >2] > sumuptoaux(0,2+1) [n >1,sum >2] > sumuptoaux(0,3) [n >1,sum >2] > 3 PK1&PM1 HT-06 moment 4 Sida 26 Uppdaterad

27 Funktionsspecifikationen för sumuptoaux sumuptoaux(n,sum) Type: int*int->int För att n skall vara en rekursionsvariant krävs att n inte är mindre än 0 inte ens från början: Pre: n>=0 Eftervillkoret är inte att sumuptoaux summerar av talen 0 till n. Så är den avsedd att användas men det är inte vad den faktiskt gör. Post: Summan av sum och talen från 0 till n. Exempel behövs också... Ex.: sumuptoaux(3,0) = 6 sumuptoaux(4,5) = 15 sumuptoaux(0,2) = 2 Rekursionsvarianten anges som del av programdokumentationen. Variant: n PK1&PM1 HT-06 moment 4 Sida 27 Uppdaterad

28 Kodningsmönster för iteration Flödesschema för funktionen foo: Kod för funktionen foo: Start. A. Ja. T? C. Stopp. Nej. B. fun foo x = fooaux A fun fooaux x = if T then C else fooaux B PK1&PM1 HT-06 moment 4 Sida 28 Uppdaterad

29 Exempel: räkna uppåt med iteration (* sumuptoaux(n,i,sum) Type: int*int*int->int Pre: n>=i-1 Post: Summan av sum och talen från i till n. Ex.: sumuptoaux(4,0,0) = 10 sumuptoaux(4,2,1) = 10 *) (* Variant: n-i+1 *) fun sumuptoaux(n,i,sum)=if i>n then sum else sumuptoaux(n,i+1,sum+i); (* sumupto n Type: int->int Pre: n >= 0 Post: Summan av talen från 0 till n Ex.: sumupto 4 = 10 sumupto 0 = 0 *) fun sumupto n = sumuptoaux(n,0,0); PK1&PM1 HT-06 moment 4 Sida 29 Uppdaterad

30 Exempel: räkna tecken med iteration (* countcharaux(s,c,count) Type: string*char*int->int Pre: (ingen) Post: Summan av count och antalet förekomster av c i s. Ex.: countcharaux("hej, du glade",#"d",0)=2 countcharaux("hej, du glade",#"q",5)=5 *) (* Variant: size s *) fun countcharaux("",c,count) = count countcharaux(s,c,count) = countcharaux(string.substring(s,1,size s -1), c, if String.sub(s,0)=c then count+1 else count) (* countchar(s,c) Type: string*char->int Pre: (ingen) Post: Antalet förekomster av c i s Ex.: countchar("hej, du glade",#"d")=2 countchar("hej, du glade",#"q")=0 *) fun countchar(s,c) = countcharaux(s,c,0); PK1&PM1 HT-06 moment 4 Sida 30 Uppdaterad

31 Minnesbehov Iteration behöver konstant minne. Rekursion i allmänhet behöver minne i proportion till antalet rekursiva anrop eftersom en del av beräkningen väntar. sumupto 2 > sumupto(2-1)+2 > sumupto(1)+2 > (sumupto(1-1)+1)+2 > (sumupto(0)+1)+2 > (0+1)+2 > 1+2 > 3 Detta påverkar också beteendet vid icke-terminering. Uttrycket blir hela tiden större... Minnet tar efterhand slut. Detta kan också drabba ett korrekt terminerande program om de rekursiva anropen är många och kräver mycket minnesutrymme. PK1&PM1 HT-06 moment 4 Sida 31 Uppdaterad

32 Beräkningsordning i rekursion foo och foo' plockar isär en sträng men sätter genast ihop den igen. fun fooaux("",ack) = ack fooaux(s,ack) = fooaux(string.substring(s,1,size s -1), String.substring(s,0,1) ^ ack) fun foo s = fooaux(s,"") fun foo' "" = "" foo' s = String.substring(s,0,1) ^ foo'(string.substring(s,1,size s -1) foo("abc") = "cba" foo'("abc") = "abc" Användning av ackumulator ger annan ordning i resultatet! PK1&PM1 HT-06 moment 4 Sida 32 Uppdaterad

33 Flera basfall Vänd på tecknen i en sträng! Problemuppdelning: Byt plats på första och sista tecknet Byt plats på tecknen emellan Vad händer om strängen har jämnt antal tecken? Udda? Två basfall för variantvärden 0 resp. 1. (* Variant: size s *) fun revstring "" = "" revstring s = if size s = 1 then s else String.substring(s,size s -1,1) ^ revstring(string.substring(s,1,size s-2)) ^ String.substring(s,0,1) PK1&PM1 HT-06 moment 4 Sida 33 Uppdaterad

34 Testning av rekursion Grundprinciperna gäller: All kod. Gränsfall (inklusive triviala fall) Typiska (icke-triviala) fall som täcker hela specifikationen Gränsfall är t.ex. vid testning av sumrange: inga tal / ett tal / två tal (kanske)...vid testning av revstring: tom sträng / sträng med ett tecken / sträng med två tecken / sträng med tre tecken (kanske)...vid testning av countchar: tom sträng / sträng med ett tecken / längre sträng med 0, 1 resp. 2 tecken som stämmer / tecken som (inte) stämmer på plats 0 resp. 1 i strängen... PK1&PM1 HT-06 moment 4 Sida 34 Uppdaterad

Former av rekursion. Programkonstruktion. Moment 5 Mera om rekursion. Fakultetsfunktionen. Största gemensamma delare (repris!

Former av rekursion. Programkonstruktion. Moment 5 Mera om rekursion. Fakultetsfunktionen. Största gemensamma delare (repris! Programkonstruktion Moment 5 Mera om rekursion Former av rekursion enkel rekursion ett rekursivt anrop. fullständig rekursion argumenten (varianten) kan mska olika många steg i det rekursiva anropet. multipel

Läs mer

Programkonstruktion och datastrukturer. Moment 3 Rekursion och listor. PKD 2012/13 moment 3 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 3 Rekursion och listor. PKD 2012/13 moment 3 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 3 Rekursion och listor PKD 2012/13 moment 3 Sida 1 Uppdaterad 2012-11-04 Summera godtyckligt antal tal sumupto n skall beräkna summan av talen från 0 till

Läs mer

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem

Programkonstruktion och datastrukturer. Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem Programkonstruktion och datastrukturer Formell verifiering eller hur man bevisar att program gör rätt utan att testa dem PKD 2012/13 Formell verifiering Sida 1 Uppdaterad 2008-11-28 Formell verifiering:

Läs mer

Programkonstruktion och datastrukturer. Moment 5 Om generella datastrukturer och träd. PKD 2011/12 moment 5 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 5 Om generella datastrukturer och träd. PKD 2011/12 moment 5 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 5 Om generella datastrukturer och träd PKD 2011/12 moment 5 Sida 1 Uppdaterad 2011-11-22 Sammanblandning av representerade data I en tillämpning behöver man

Läs mer

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall

SCB :-0. Uno Holmer, Chalmers, höger 2 Ex. Induktiv definition av lista. // Basfall Rekursiva funktioner Föreläsning 10 (Weiss kap. 7) Induktion och rekursion Rekursiva funktioner och processer Weiss 7.1-3 (7.4, 7.5.3 utgår) Fibonaccital (7.3.4) Exempel: Balansering av mobil (kod se lab

Läs mer

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen, Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2008-03-10 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla frågorna

Läs mer

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen, Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2009-08-24 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 14:00-19:00. Börja med att läsa igenom alla frågorna

Läs mer

Programkonstruktion och Datastrukturer

Programkonstruktion och Datastrukturer Programkonstruktion och Datastrukturer VT 2012 Tidskomplexitet Elias Castegren elias.castegren.7381@student.uu.se Problem och algoritmer Ett problem är en uppgift som ska lösas. Beräkna n! givet n>0 Räkna

Läs mer

Rekursion och induktion för algoritmkonstruktion

Rekursion och induktion för algoritmkonstruktion Informationsteknologi Tom Smedsaas, Malin Källén 20 mars 2016 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av

Läs mer

Programkonstruktion och datastrukturer. Moment 6 Om generella datastrukturer och träd. PKD 2012/13 moment 6 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 6 Om generella datastrukturer och träd. PKD 2012/13 moment 6 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 6 Om generella datastrukturer och träd PKD 2012/13 moment 6 Sida 1 Uppdaterad 2012-12-05 Tabeller En viktig tillämpning är tabellen att ifrån en nyckel kunna

Läs mer

Programkonstruktion och datastrukturer. Moment 4 Programmeringsmetodik och programvaruteknik. PKD 2011/12 moment 4 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 4 Programmeringsmetodik och programvaruteknik. PKD 2011/12 moment 4 Sida 1 Uppdaterad f Programkonstruktion och datastrukturer Moment 4 Programmeringsmetodik och programvaruteknik PKD 2011/12 moment 4 Sida 1 Uppdaterad 2012-11-12 Programvaruteknik Programvaruteknik ( Software Engineering

Läs mer

Programkonstruktion och datastrukturer. Moment 4 Programmeringsmetodik och programvaruteknik. PKD 2010/11 moment 4 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 4 Programmeringsmetodik och programvaruteknik. PKD 2010/11 moment 4 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 4 Programmeringsmetodik och programvaruteknik PKD 2010/11 moment 4 Sida 1 Uppdaterad 2010-11-19 Programvaruteknik Programvaruteknik ( Software Engineering

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 9 Om högre ordningens funktioner. PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad Programmeringsmetodik DV1 Programkonstruktion 1 Moment 9 Om högre ordningens funktioner PK1&PM1 HT-06 moment 9 Sida 1 Uppdaterad 2006-09-06 Anonyma funktioner igen En funktion som inte är namngiven kallas

Läs mer

Programkonstruktion. Tentamen,

Programkonstruktion. Tentamen, Programkonstruktion (Programmeringsmetodik DV1) Tentamen, 2008-06-12 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla frågorna

Läs mer

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T

Algoritmer och datastrukturer H I HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T Algoritmer och datastrukturer H I 1 0 2 9 HÅKAN S T R Ö M B E R G N I C K L A S B R A N D E F E L T Föreläsning 1 Inledande om algoritmer Rekursion Stacken vid rekursion Rekursion iteration Möjliga vägar

Läs mer

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen,

Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen, Programmeringsmetodik DV1, Programkonstruktion del 1 Tentamen, 2007-08-21 Lars-Henrik Eriksson Institutionen för informationsteknologi Uppsala Universitet Tid: 0900-14:00. Börja med att läsa igenom alla

Läs mer

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2010/11 moment 9 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 9 Om högre ordningens funktioner PKD 2010/11 moment 9 Sida 1 Uppdaterad 2010-12-02 Anonyma funktioner igen En funktion som inte är namngiven kallas för en

Läs mer

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad

Programkonstruktion och datastrukturer. Moment 9 Om högre ordningens funktioner. PKD 2011/12 moment 9 Sida 1 Uppdaterad Programkonstruktion och datastrukturer Moment 9 Om högre ordningens funktioner PKD 2011/12 moment 9 Sida 1 Uppdaterad 2012-01-15 Anonyma funktioner igen En funktion som inte är namngiven kallas för en

Läs mer

DD1361 Programmeringsparadigm. Carina Edlund

DD1361 Programmeringsparadigm. Carina Edlund DD1361 Programmeringsparadigm Carina Edlund carina@nada.kth.se Funktionell programmering Grundidéen med funktionell programmering är att härma matematiken och dess funktionsbegrepp. Matematiskt funktionsbegrepp

Läs mer

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION

FÖRELÄSNING 2, TDDC74, VT2018 BEGREPP PROBLEMLÖSNING MED HJÄLP AV FALLANALYS PROBLEMLÖSNING MED HJÄLP AV REKURSION FÖRELÄSNING 2, TDDC74, VT2018 Begrepp och definitioner (delvis från föreläsning 1) Fallanalys som problemlösningsmetod Rekursivt fallanalys Rekursiva beskrivningar och processer de kan skapa Rekursiva

Läs mer

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande:

Föreläsning 7 Innehåll. Rekursion. Rekursiv problemlösning. Rekursiv problemlösning Mönster för rekursiv algoritm. Rekursion. Rekursivt tänkande: Föreläsning 7 Innehåll Rekursion Rekursivt tänkande: Hur många år fyller du? Ett år mer än förra året! Rekursion Rekursiv problemlösning Binärsökning Generiska metoder Rekursiv problemlösning: Dela upp

Läs mer

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK

BEGREPP HITTILLS FÖRELÄSNING 2 SAMMANSATTA UTTRYCK - SCHEME DATORSPRÅK FÖRELÄSNING 2 Viss repetition av Fö1 Rekursivt fallanalys Rekursiva beskrivningar BEGREPP HITTILLS Konstant, Namn, Procedur/Funktion, LAMBDA, Parameter, Argument, Kropp, Villkor/Rekursion, Funktionsanrop,

Läs mer

Programkonstruktion. Moment 11 Om sidoeffekter In/utmatning och imperativ programmering. PKD 2011/12 moment 11 Sida 1 Uppdaterad

Programkonstruktion. Moment 11 Om sidoeffekter In/utmatning och imperativ programmering. PKD 2011/12 moment 11 Sida 1 Uppdaterad Programkonstruktion Moment 11 Om sidoeffekter In/utmatning och imperativ programmering PKD 2011/12 moment 11 Sida 1 Uppdaterad 2012-01-30 Referentiell transparens I ren funktionell programmering kan man

Läs mer

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion

Multipel tilldelning. Introduktion till programmering D0009E. Föreläsning 6: Iteration. while-satsen. Kom ihåg. Snurror kontra rekursion Introduktion till programmering D0009E Föreläsning 6: Iteration Multipel tilldelning Helt ok att tilldela en variabel flera gånger: bruce = bruce, bruce = 7 bruce Output: 7 Som tillståndsdiagram: bruce

Läs mer

Uppgift 1 (grundläggande konstruktioner)

Uppgift 1 (grundläggande konstruktioner) Uppgift 1 (grundläggande konstruktioner) a) Skriv ett program som låter användaren mata in 7 heltal och som gör utskrifter enligt nedanstående körexempel. Mata in 7 heltal: 1 0 0 3 1 1 1 Tal nr 2 var en

Läs mer

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Omtentamen (del 1, 6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson Fredag 5 april 2013, kl 14:00 17:00, i Polacksbackens skrivsal Hjälpmedel: Inga. Inte heller elektronisk

Läs mer

Produktionsplanering. Programkonstruktion. Ett programutvecklingsexempel. Programutvecklingsprocessen. Exempel produktregister. 2.

Produktionsplanering. Programkonstruktion. Ett programutvecklingsexempel. Programutvecklingsprocessen. Exempel produktregister. 2. Programkonstruktion Ett programutvecklingsexempel Produktionsplanering Vid produktionsplanering i en fabrik använder man komponentlistor för att beskriva materialet som behövs för att tillverka en produkt.

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 8 Om abstrakta datatyper och binära sökträd Programmeringsmetodik DV1 Programkonstruktion 1 Moment 8 Om abstrakta datatyper och binära sökträd PK1&PM1 HT-06 moment 8 Sida 1 Uppdaterad 2005-09-22 Tabeller En viktig tillämpning är tabellen att ifrån

Läs mer

Funktionell programmering DD1361

Funktionell programmering DD1361 Funktionell programmering DD1361 Tupler Två eller fler (men ändligt) antal element. Elementen kan vara av olika typer. Ex: (1,2) :: (Integer, Integer) (( 2, hejsan ), True) ::? Tupel med två element ->

Läs mer

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige

Bakgrund. Bakgrund. Bakgrund. Håkan Jonsson Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Är varje påstående som kan formuleras matematiskt*) alltid antingen sant eller falskt? *) Inom Institutionen för systemteknik Luleå tekniska universitet Luleå, Sverige Exempel: 12 = 13 nej, falskt n! >

Läs mer

Föreläsning 13. Rekursion

Föreläsning 13. Rekursion Föreläsning 13 Rekursion Rekursion En rekursiv metod är en metod som anropar sig själv. Rekursion används som alternativ till iteration. Det finns programspråk som stödjer - enbart iteration (FORTRAN)

Läs mer

Procedurer och villkor

Procedurer och villkor Procedurer och villkor (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between 3 2 5) #f DA2001

Läs mer

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom:

6 Rekursion. 6.1 Rekursionens fyra principer. 6.2 Några vanliga användningsområden för rekursion. Problem löses genom: 6 Rekursion 6.1 Rekursionens fyra principer Problem löses genom: 1. förenkling med hjälp av "sig själv". 2. att varje rekursionssteg löser ett identiskt men mindre problem. 3. att det finns ett speciellt

Läs mer

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet

Procedurer och villkor. Rekursiva procedurer. Exempel: n-fakultet Procedurer och villkor Rekursiva procedurer (define lessorequal (lambda (x y) (or (< x y) (= x y)))) (define between (lambda (x y z) (and (lessorequal x y) (lessorequal y z)))) > (between 3 4 5) #t > (between

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 4 oktober 2017 1 Idag Algoritmkonstruktion (lite blandat) Redovisning och inlämning av labbteori 3 2 Uppgifter Uppgift

Läs mer

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4

Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 2014-2015. Lektion 4 Introduktion till algoritmer - Lektion 4 Matematikgymnasiet, Läsåret 014-015 Denna lektion ska vi studera rekursion. Lektion 4 Principen om induktion Principen om induktion är ett vanligt sätt att bevisa

Läs mer

Dekomposition och dynamisk programmering

Dekomposition och dynamisk programmering Algoritmer, datastrukturer och komplexitet, hösten 2016 Uppgifter till övning 3 Dekomposition och dynamisk programmering Max och min med dekomposition I vektorn v[1..n] ligger n tal. Konstruera en dekompositionsalgoritm

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 1 Anton Grensjö grensjo@csc.kth.se 14 september 2015 Anton Grensjö ADK Övning 1 14 september 2015 1 / 22 Översikt Kursplanering F1: Introduktion, algoritmanalys

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 6 Anton Grensjö grensjo@csc.kth.se 9 oktober 2015 Anton Grensjö ADK Övning 6 9 oktober 2015 1 / 23 Översikt Kursplanering Ö5: Grafalgoritmer och undre

Läs mer

Rekursion och induktion för algoritmkonstruktion

Rekursion och induktion för algoritmkonstruktion Informationsteknologi Tom Smedsaas 22 januari 2006 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av problem som

Läs mer

Övningshäfte 1: Induktion, rekursion och summor

Övningshäfte 1: Induktion, rekursion och summor LMA100 VT2006 ARITMETIK OCH ALGEBRA DEL 2 Övningshäfte 1: Induktion, rekursion och summor Övning A 1. Kan ni fortsätta följden 1,3,5,7,9,11,...? 2. Vilket är det 7:e talet i följden? Vilket är det 184:e?

Läs mer

Tentamen i Introduktion till programmering

Tentamen i Introduktion till programmering Tentamen i Introduktion till programmering Kurskod: Skrivtid: D0009E 09:00-13:00 (4 timmar) Totalt antal uppgifter: 7 Totalt antal poäng: 38 Tentamensdatum: 2014-05-17 Jourhavande lärare: Tillåtna hjälpmedel:

Läs mer

Lösningsförslag till övningsuppgifter, del II

Lösningsförslag till övningsuppgifter, del II Lösningsförslag till övningsuppgifter del II Obs! Preliminär version! Ö.1. För varje delare d till n låt A d var mängden av element a sådana att gcd(a n = d. Partitionen ges av {A d : d delar n}. n = 6:

Läs mer

Rekursion. Koffman & Wolfgang kapitel 5

Rekursion. Koffman & Wolfgang kapitel 5 Rekursion Koffman & Wolfgang kapitel 5 1 Rekursivt tänkande Rekursion reducerar ett problem till en eller flera enklare versioner av samma problem. med enklare menas att underproblemen måste vara mindre,

Läs mer

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik

Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik Läsanvisning till Discrete matematics av Norman Biggs - 5B1118 Diskret matematik Mats Boij 28 oktober 2001 1 Heltalen Det första kapitlet handlar om heltalen och deras aritmetik, dvs deras egenskaper som

Läs mer

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180)

Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Göteborgs Universitet och Chalmers Tekniska Högskola 25 oktober 2005 Datavetenskap TDA180/TDA181/INN110 Tentamen i kurserna Beräkningsmodeller (TDA181/INN110) och Grundläggande Datalogi (TDA180) Onsdagen

Läs mer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer

Metodanrop - primitiva typer. Föreläsning 4. Metodanrop - referenstyper. Metodanrop - primitiva typer Föreläsning 4 Metodanrop switch-slingor Rekursiva metoder Repetition av de första föreläsningarna Inför seminariet Nästa föreläsning Metodanrop - primitiva typer Vid metodanrop kopieras värdet av en variabel

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning...

Tommy Färnqvist, IDA, Linköpings universitet. 2 Rekursion i C Implementation av rekursion Svansrekursion En till övning... Föreläsning 15 Rekursion TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 2 november 2015 Tommy Färnqvist, IDA, Linköpings universitet 15.1 Innehåll

Läs mer

Övningshäfte 2: Induktion och rekursion

Övningshäfte 2: Induktion och rekursion GÖTEBORGS UNIVERSITET MATEMATIK 1, MMG200, HT2017 INLEDANDE ALGEBRA Övningshäfte 2: Induktion och rekursion Övning D Syftet är att öva förmågan att utgående från enkla samband, aritmetiska och geometriska,

Läs mer

x 23 + y 160 = 1, 2 23 = ,

x 23 + y 160 = 1, 2 23 = , Matematiska Institutionen KTH Lösningar till några övningar, inför tentan moment B, på de avsnitt som inte omfattats av lappskrivningarna, Diskret matematik för D2 och F, vt08.. Ett RSA-krypto har n =

Läs mer

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen

C++ Funktioner 1. int summa( int a, int b) //funktionshuvud { return a+b; //funktionskropp } Värmdö Gymnasium Programmering B ++ Datainstitutionen C++ Funktioner 1 Teori När programmen blir större och mer komplicerade är det bra att kunna dela upp programmet i olika delar som gör specifika saker, vilket kan göra programmet mer lättläst. Ett sätt

Läs mer

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering D0009E. Föreläsning 5: Fruktbara funktioner Introduktion till programmering D0009E Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner

Läs mer

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm. Algoritmanalys Analys av algoritmer används för att uppskatta effektivitet. Om vi t. ex. har n stycken tal lagrat i en array och vi vill linjärsöka i denna. Det betyder att vi måste leta i arrayen tills

Läs mer

Föreläsningsanteckningar F6

Föreläsningsanteckningar F6 Föreläsningsanteckningar F6 Martin Andersson & Patrik Falkman Kortaste vägen mellan en nod och alla andra noder Detta problem innebär att givet en graf G = (E,V) hitta den kortaste vägen över E från en

Läs mer

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 2 Introduktion till funktioner och programutveckling

Programmeringsmetodik DV1 Programkonstruktion 1. Moment 2 Introduktion till funktioner och programutveckling Programmeringsmetodik DV1 Programkonstruktion 1 Moment 2 Introduktion till funktioner och programutveckling PK1&PM1 HT-06 moment 2 Sida 1 Uppdaterad 2005-09-20 Återanvändning av kod? String.substring("Hägg",size

Läs mer

Datalogi, grundkurs 1

Datalogi, grundkurs 1 Datalogi, grundkurs 1 Fiktiv Tentamen Lösningsförslag och kommentarer 1. Lösningsförslaget nedan förutsätter ingenting om filens innehåll och är alltså mer generell än nödvändigt: alfa= ABCDEFGHIJKLMNOPQRSTUVWXYZÅÄÖ

Läs mer

Tentamen 1 (6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201)

Tentamen 1 (6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Tentamen 1 (6 högskolepoäng) i Programkonstruktion och datastrukturer (1DL201) Lars-Henrik Eriksson och Pierre Flener Fredag 17 december 2010, kl 14:00 17:00, i Gimogatan 4, sal 1 Hjälpmedel: Inga. Inte

Läs mer

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Algoritm En algoritm är ett begränsat antal instruktioner/steg

Läs mer

Uppgift 1 (Sorterade heltal som är OK)

Uppgift 1 (Sorterade heltal som är OK) 2013-03-12.kl.14-19 Uppgift 1 (Sorterade heltal som är OK) Ibland råkar man ut för att man måste se till att man inte får dubletter i sina inmatningar. Denna uppgift baserar sig på detta, men dessutom

Läs mer

Övning 2. (Länkade) Listor, noder

Övning 2. (Länkade) Listor, noder Per Sedholm DD30 (tilda3) 03-09-03 Övning Listor, pekare, binära träd, rekursion, komplexitet (Länkade) Listor, noder. Ta bort andra noden (a) Skriv en sats som tar bort andra noden ur en länkad lista.

Läs mer

Givet två naturliga tal a och b, som inte båda två är 0, hur räknar man ut största gemensamma delaren av a och b?

Givet två naturliga tal a och b, som inte båda två är 0, hur räknar man ut största gemensamma delaren av a och b? Euklides algoritm för största gemensamma delaren Givet två naturliga tal a och b, som inte båda två är 0, hur räknar man ut största gemensamma delaren av a och b? Euklides har kommit på en metod (algoritm)

Läs mer

Lösningsförslag till tentamensskrivning i SF1610 Diskret Matematik för CINTE 30 maj 2018, kl

Lösningsförslag till tentamensskrivning i SF1610 Diskret Matematik för CINTE 30 maj 2018, kl 1 Matematiska Institutionen KTH Lösningsförslag till tentamensskrivning i SF1610 Diskret Matematik för CINTE 30 maj 2018, kl 08.00 13.00. Examinator: Petter Brändén Kursansvarig: Olof Sisask Hjälpmedel:

Läs mer

Rekursion och induktion för algoritmkonstruktion

Rekursion och induktion för algoritmkonstruktion Informationsteknologi Tom Smedsaas 22 september 2015 Rekursion och induktion för algoritmkonstruktion Att lösa ett problem rekursivt innebär att man uttrycker lösningen i termer av samma typ av problem

Läs mer

Föreläsning 9: Talteori

Föreläsning 9: Talteori DD2458, Problemlösning och programmering under press Föreläsning 9: Talteori Datum: 2007-11-13 Skribent(er): Niklas Lindbom och Daniel Walldin Föreläsare: Per Austrin Den här föreläsningen behandlar modulär

Läs mer

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } }

public static void mystery(int n) { if (n > 0){ mystery(n-1); System.out.print(n * 4); mystery(n-1); } } Rekursion 25 7 Rekursion Tema: Rekursiva algoritmer. Litteratur: Avsnitt 5.1 5.5 (7.1 7.5 i gamla upplagan) samt i bilderna från föreläsning 6. U 59. Man kan definiera potensfunktionen x n (n heltal 0)

Läs mer

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python

Repetition i Python 3. Exemplen fac. Exemplen fac motivering. Exemplen fac i Python Repetition i Python 3 Exemplen fac Orginalet I Scheme använde vi rekursion för all slags repetition. Efterom Scheme är ett funktionellt språk återsänder alla språkkonstruktioner ett värde men i Python

Läs mer

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap

Hur man programmerar. TDDC66 Datorsystem och programmering Föreläsning 3. Peter Dalenius Institutionen för datavetenskap Hur man programmerar TDDC66 Datorsystem och programmering Föreläsning 3 Peter Dalenius Institutionen för datavetenskap 2014-09-05 Översikt Problemlösning: Hur ska man tänka? Datatyper Listor (forsätter

Läs mer

Hela tal LCB 1999/2000

Hela tal LCB 1999/2000 Hela tal LCB 1999/2000 Ersätter Grimaldi 4.3 4.5 1 Delbarhet Alla förekommande tal i fortsättningen är heltal. DEFINITION 1. Man säger att b delar a om det finns ett heltal n så att a Man skriver b a när

Läs mer

Tommy Färnqvist, IDA, Linköpings universitet

Tommy Färnqvist, IDA, Linköpings universitet Föreläsning Metoder för algoritmdesign TDDD86: DALP Utskriftsversion av föreläsning i Datastrukturer, algoritmer och programmeringsparadigm 7 december 015 Tommy Färnqvist, IDA, Linköpings universitet.1

Läs mer

inte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men

inte följa någon enkel eller fiffig princip, vad man nu skulle mena med det. All right, men MATEMATISKA INSTITUTIONEN STOCKHOLMS UNIVERSITET Christian Gottlieb Gymnasieskolans matematik med akademiska ögon Induktion Dag 2. Explicita formler och rekursionsformler. Dag mötte vi flera talföljder,

Läs mer

Kryptokorsordslösare Programmeringsmetodik DV (period 2) Inlämningsuppgift 1

Kryptokorsordslösare Programmeringsmetodik DV (period 2) Inlämningsuppgift 1 Kryptokorsordslösare Programmeringsmetodik DV1 2004 (period 2) Inlämningsuppgift 1 Christer Folkesson 1. Sammanfattning 2. Användarbeskrivning 2.1. Lösa ett kryptokorsord 2.2. Utskrift av lösning 2.3.

Läs mer

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016

Algoritmanalys. Inledning. Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Informationsteknologi Malin Källén, Tom Smedsaas 1 september 2016 Algoritmanalys Inledning Exempel 1: x n När vi talade om rekursion presenterade vi två olika sätt att beräkna x n, ett iterativt: x n =

Läs mer

Föreläsning 7: Syntaxanalys

Föreläsning 7: Syntaxanalys DD2458, Problemlösning och programmering under press Föreläsning 7: Syntaxanalys Datum: 2007-10-30 Skribent(er): Erik Hammar, Jesper Särnesjö Föreläsare: Mikael Goldmann Denna föreläsning behandlade syntaxanalys.

Läs mer

Inledande programmering med C# (1DV402) Summera med while"-satsen

Inledande programmering med C# (1DV402) Summera med while-satsen Summera med while"-satsen Upphovsrätt för detta verk Inledande programmering med C# (1DV402) Detta verk är framtaget i anslutning till kursen Inledande programmering med C# vid Linnéuniversitetet. Du får

Läs mer

kl Tentaupplägg

kl Tentaupplägg Tentaupplägg TIPS 1: Läs igenom ALLA uppgifterna. Välj den du känner är lättast först. Det kan gärna ta 10-20 minuter. Försök skriva saker som kan vara problem i uppgifterna. Är det något du absolut kommer

Läs mer

Föreläsning 5: Dynamisk programmering

Föreläsning 5: Dynamisk programmering Föreläsning 5: Dynamisk programmering Vi betraktar en typ av problem vi tidigare sett: Indata: En uppsättning intervall [s i,f i ] med vikt w i. Mål: Att hitta en uppsättning icke överlappande intervall

Läs mer

TATM79: Föreläsning 1 Notation, ekvationer, polynom och olikheter

TATM79: Föreläsning 1 Notation, ekvationer, polynom och olikheter TATM79: Föreläsning 1 Notation, ekvationer, polynom och olikheter Johan Thim 15 augusti 2015 1 Vanliga symboler Lite logik Implikation: P Q. Detta betyder att om P är sant så är Q sant. Utläses P medför

Läs mer

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

TDDI16 Datastrukturer och algoritmer. Algoritmanalys TDDI16 Datastrukturer och algoritmer Algoritmanalys 2017-08-28 2 Översikt Skäl för att analysera algoritmer Olika fall att tänka på Medelfall Bästa Värsta Metoder för analys 2017-08-28 3 Skäl till att

Läs mer

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl

Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL2 och Media 1, SF1610 och 5B1118, onsdagen den 17 augusti 2011, kl Matematiska Institutionen KTH Lösning till tentamensskrivning i Diskret Matematik för CINTE, CL och Media, SF60 och 5B8, onsdagen den 7 augusti 0, kl 4.00-9.00. Examinator: Olof Heden Hjälpmedel: Inga

Läs mer

Algoritmer, datastrukturer och komplexitet

Algoritmer, datastrukturer och komplexitet Algoritmer, datastrukturer och komplexitet Övning 4 Anton Grensjö grensjo@csc.kth.se 25 september 215 Anton Grensjö ADK Övning 4 25 september 215 1 / 28 Översikt Kursplanering F9: Dynamisk programmering

Läs mer

Föreläsning 5. Rekursion

Föreläsning 5. Rekursion Föreläsning 5 Rekursion Föreläsning 5 Algoritm Rekursion Rekursionsträd Funktionsanrop på stacken Binär sökning Problemlösning (möjliga vägar) Läsanvisningar och uppgifter Algoritm En algoritm är ett begränsat

Läs mer

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner

Introduktion till programmering SMD180. Föreläsning 5: Fruktbara funktioner Introduktion till programmering Föreläsning 5: Fruktbara funktioner 1 Retur-värden Funktioner kan både orsaka en effekt och returnera ett resultat. Hittills har vi ej definierat några egna funktioner med

Läs mer

Introduktion till programmering SMD180. Föreläsning 9: Tupler

Introduktion till programmering SMD180. Föreläsning 9: Tupler Introduktion till programmering Föreläsning 9: Tupler 1 1 Sammansatta datatyper Strängar Sekvenser av tecken Icke muterbara Syntax: "abcde" Listor Sekvenser av vad som helst Muterbara Syntax: [1, 2, 3]

Läs mer

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 19 oktober 2016, kl 14 18 Läs alla frågorna först, och bestäm dig för i vilken ordning du vill lösa uppgifterna. Skriv tydligt och läsligt.

Läs mer

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254

Rekursion. Att tänka rekursivt Att programmera rekursivt i Java Exempel. Programmeringsmetodik -Java 254 Rekursion Rekursion är en grundläggande programmeringsteknik M h a rekursion kan vissa problem lösas på ett mycket elegant sätt Avsnitt 11 i kursboken: Att tänka rekursivt Att programmera rekursivt i Java

Läs mer

Lars-Henrik Eriksson

Lars-Henrik Eriksson Välkomna till Programmeringsmetodik DV1 Programkonstruktion I+II http://www.csd.uu.se/kurs/pm1/ht02/www/ Lars-Henrik Eriksson lhe@csd.uu.se, http://user.it.uu.se/~lhe Undervisningstillfällen Föreläsningar:

Läs mer

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1

Introduktion till algoritmer - Lektion 1 Matematikgymnasiet, Läsåret 2014-2015. Lektion 1 Kattis Lektion 1 I kursen används onlinedomaren Kattis (från http://kattis.com) för att automatiskt rätta programmeringsproblem. För att få ett konto på Kattis anmäler du dig på Programmeringsolympiadens

Läs mer

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander

F11 - Rekursion. ID1004 Objektorienterad programmering Fredrik Kilander F11 - Rekursion ID1004 Objektorienterad programmering Fredrik Kilander fki@kth.se Rekursion Rekursion är en programmeringsteknik En metod anropar sig själv public String reverse (String s) { if (s.length()

Läs mer

Programmering för språkteknologer II, HT2014. Rum

Programmering för språkteknologer II, HT2014. Rum Programmering för språkteknologer II, HT2014 Avancerad programmering för språkteknologer, HT2014 evelina.andersson@lingfil.uu.se Rum 9-2035 http://stp.ling.uu.se/~evelina/uv/uv14/pst2/ Idag - Sökalgoritmer

Läs mer

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6

Objektorienterad programmering i Java I. Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Laboration 2 Objektorienterad programmering i Java I Uppgifter: 2 Beräknad tid: 5-8 timmar (OBS! Endast ett labbtillfälle) Att läsa: kapitel 5 6 Syfte: Att kunna använda sig av olika villkors- och kontrollflödeskonstruktioner

Läs mer

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen

Johan Karlsson Datavetenskap för teknisk kemi, 10p, moment 1 Datavetenskap Umeå Universitet. Tentamen Tentamen för teknisk kemi, 10p, moment 1 29 november 1999 Skrivtid 9-15 Hjälpmedel: av följande böcker. - U. Bilting och J. Skansholm: Vägen till C - A. Kelley & I. Pohl: A Book on C Maxpoäng: Gräns för

Läs mer

Föreläsning 6: Introduktion av listor

Föreläsning 6: Introduktion av listor Föreläsning 6: Introduktion av listor Med hjälp av pekare kan man bygga upp datastrukturer på olika sätt. Bland annat kan man bygga upp listor bestående av någon typ av data. Begreppet lista bör förklaras.

Läs mer

Algebra I, 1MA004. Lektionsplanering

Algebra I, 1MA004. Lektionsplanering UPPSALA UNIVERSITET Matematiska Institutionen Dan Strängberg HT2016 Fristående, IT, KandDv, KandMa, Lärare 2016-11-02 Algebra I, 1MA004 Lektionsplanering Här anges rekommenderade uppgifter ur boken till

Läs mer

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen

Tabeller. Programkonstruktion. Moment 8 Om abstrakta datatyper och binära sökträd. Implementering av tabellen. Operationer på tabellen Programkonstruktion Moment 8 Om abstrakta datatyper och binära sökträd Tabeller En viktig tillämpning är tabellen att ifrån en nyckel kunna ta fram ett tabellvärde. Ett typiskt exempel är en telefonkatalog:

Läs mer

Föreläsning 5: Kardinalitet. Funktioners tillväxt

Föreläsning 5: Kardinalitet. Funktioners tillväxt Föreläsning 5: Kardinalitet. Funktioners tillväxt A = B om det finns en bijektion från A till B. Om A har samma kardinalitet som en delmängd av naturliga talen, N, så är A uppräknelig. Om A = N så är A

Läs mer

Föreläsning 9: Talteori

Föreläsning 9: Talteori DD2458, Problemlösning och programmering under press Föreläsning 9: Talteori Datum: 2009-11-11 Skribent(er): Ting-Hey Chau, Gustav Larsson, Åke Rosén Föreläsare: Fredrik Niemelä Den här föreläsningen handlar

Läs mer

Programmering II (ID1019) :00-11:00

Programmering II (ID1019) :00-11:00 ID1019 Johan Montelius Programmering II (ID1019) 2015-06-11 08:00-11:00 Instruktioner Du får inte ha något materiel med dig förutom skrivmateriel. Mobiler etc, skall lämnas till tentamensvakten. Svaren

Läs mer

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor

TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor TATM79: Föreläsning 1 Notation, ekvationer, polynom och summor Johan Thim 22 augusti 2018 1 Vanliga symboler Lite logik Implikation: P Q. Detta betyder att om P är sant så är Q sant. Utläses P medför Q

Läs mer