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

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

FÖRELÄSNING 1 PERSONAL TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017 SYFTE EXAMINATION ORGANISATION

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

Våra enkla funktioner eller procedurer

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

Procedurer och villkor

Förra gången: Primitiva data

Språket Scheme. DAT 060: Introduktion till (funktions)programmering. DrScheme. uttryck. Jacek Malec m. fl. evaluering av uttryck.

Föreläsning 9 Exempel

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

Föreläsning 9 Exempel. Intervallhalveringsmetoden. Intervallhalveringsmetoden... Intervallhalveringsmetoden...

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

n Detta för att kunna koncentrera oss på n Tal: number? n Symboler: symbol? n Strängar: string? n Tecken: char? n Boolskt: boolean?

TDDC74 Programmering: Abstraktion och modellering Tentamen, onsdag 9 juni 2016, kl 14 18

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

Signalflödesmodellen. Två (gamla) exempel: Kvadratera alla jämna löv.

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

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

I dag: Blockstruktur, omgivningar, problemlösning

TDDC74 Programmering, abstraktion och modellering DUGGA 1

Rekursion och induktion för algoritmkonstruktion

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 27 augusti 2016, kl 8 12

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

TDDC74 Programmering: Abstraktion och modellering Tenta, kl 14 18, 11 juni 2014

Två fall: q Tom sekvens: () q Sekvens av element: (a b c) ; (sum-rec '(2 4 6)) = 12. q Första elementet uppfyller vissa villkor: (2 a b c)

DD1361 Programmeringsparadigm. Carina Edlund

Föreläsning 9 Innehåll. Söndra och härska. Fibonaccitalen. Söndra och härska. Divide and conquer teknik för att konstruera rekursiva algoritmer.

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 8 10, 7 april 2016

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Tentamen i. TDDA 69 Data och programstrukturer

Repetition i Pascal. Exemplen fac. Exemplen fac i Pascal. Exemplen fac motivering. Orginalet

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering, abstraktion och modellering. Tentamen

Rekursion och induktion för algoritmkonstruktion

Typsystem. Typsystem... Typsystem... Typsystem... 2 *

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

Typsystem. DA2001 (Föreläsning 23) Datalogi 1 Hösten / 19

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

Idag: Dataabstraktion

Deklarationer/definitioner/specifikationer

TDDC74 Programmering, abstraktion och modellering. Tentamen

Imperativ och Funktionell Programmering i Python #TDDD73. Fredrik Heintz,

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 Programmering: Abstraktion och modellering Datortenta

Omgivningar. Omgivningar är viktiga eftersom de avgör vilka namn som är synliga och därmed dessas innebörd och de värden som är förknippade med dem.

Dagens föreläsning Programmering i Lisp. - Bindning av variabler (avs 14.6) fria variabler statisk/lexikalisk och dynamisk bindning

TDDC74 Programmering: Abstraktion och modellering Tentamen, lördag 29 augusti 2015, kl 8 12

Modularitet och tillstånd. Stora system kräver en uppdelning. En lösning: modularitet. Basera programmets struktur på den fysiska systemets struktur:

Tentamen i. TDDC67 Funktionell programmering och Lisp

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 14-18

Övningshäfte 2: Induktion och rekursion

Dagens föreläsning Programmering i Lisp Fö 7. Sammanfattning funktionell programmering Exempel på funktionella programspråk

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

Tommy Färnqvist, IDA, Linköpings universitet

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

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Föreläsning 8 Innehåll

Exempel: Förel Rekursion III Nr 14. Uno Holmer, Chalmers,

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

Introduktion till programmering SMD180. Föreläsning 4: Villkor och rekursion

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 14-16

Datalogi, grundkurs 1 Övningsuppgifter i Scheme. Serafim Dahl, Carina Edlund, m.fl.

Rekursiva algoritmer sortering sökning mönstermatchning

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson

Dagens föreläsning Programmering i Lisp Fö 5

Föreläsning 13. Dynamisk programmering

Programkonstruktion och Datastrukturer

Sökning och sortering

TDDC74 - Lektionsmaterial C

TDDC74 Programmering: Abstraktion och modellering. Provkod TEN1, Tid: kl 14-18, , Kåra

Summera godtyckligt antal tal. Programkonstruktion. Moment 4 Om rekursion. Fullständigt resonemang för summeringen. Analys av summeringsproblemet

Abstraktion. Abstraktion... Abstraktion... Abstraktion...

Föreläsning 5. Rekursion

Abstraktion. procedurabstraktion. DA2001 (Föreläsning 26) Datalogi 1 Hösten / 27

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 5 mars 2015

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, Tid: kl 08-10, Datum:

Datalogi, grundkurs 1. Lösningsförslag till tentamen

Institutionen för datavetenskap, DAT060, Laboration 2 2 För denna enkla simulerings skull kommer handen att representeras som ett par tal μ värdet på

Lösning av några vanliga rekurrensekvationer

Några inbyggda funktioner (med resultat!) Introduktion till programmering D0009E. Föreläsning 4: Villkor och rekursion. Modulus-operatorn.

Introduktion till programmering SMD180. Föreläsning 2: Variabler, uttryck och satser

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

Föreläsning 11: Rekursion

TDDC74 Programmering: Abstraktion och modellering Dugga 1, kl 14-16

Rekursion och induktion för algoritmkonstruktion

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

Introduktion till programmering SMD180. Föreläsning 3: Funktioner

Idag: Par och listor. Symboler. Symboler används för att uttrycka icke-numeriska data såsom namn, adress, bilregisternummer, boktitel, osv.

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

Universitetet i Linköping Institutionen för datavetenskap Anders Haraldsson 2

TDDC74 Programmering: Abstraktion och modellering Dugga 1, exempeldugga

Transkript:

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, Substitutionsmodellen Rekursiva och iterativa processer Scope för namn 1 2 DATORSPRÅK primitiva uttryck (primitive expressions) sammansättningsregler (means of combination) - Procedursammansättning - Sammansättning av primitivdata för att få sammansatt data abstraktioner (means of abstraction) - Svartlåda-tänkande (möjlighet att ignorera detaljer) - Högre-ordningens procedurer - Dataabstraktion - Procedurer som data SAMMANSATTA UTTRYCK - SCHEME Applikation av inbyggda procedurer (inbyggd-fn argument-1 argument-2 argument-n) Applikation av användardefinierade procedurer (användar-fn argument-1 argument-2... argument-n) Undantagsformer (if villkor då-uttrycket annars-uttrycket) (and uttryck-1 uttryck-2 uttryck-n) (or uttryck-1 uttryck-2... uttryck-n) Abstractionsmöjligheter (define namn värde) (lambda parametrar kropp) 3 4

PROGRAMMERING PROGRAMEXEMPEL: AVSTÅNDET MELLAN TVÅ PUNKTER problem problemanalys ~ fallanalys översättning av analysresultatet till programkod testning (define distance (lambda (x1 y1 x2 y2) ( s q r t ( + ( s q u a r e ( - x 2 x 1 ) ) (square (- y2 y1)))))) (define square (lambda (n) (* n n))) 5 6 SUBSTITUTIONSMODELLEN (distance 0 0 3 4) (sqrt (+ (square (- 3 0)) (square (- 4 0)))) (sqrt (+ (square 3) (square 4))))) (sqrt (+ (* 3 3) (* 4 4))) (sqrt (+ 9 16)) (sqrt 25) 5 EVALUERING AV FUNKTIONSANROP/SUBSTITUTIONSMODELL För att evaluera ett anrop som (fn arg1 arg2 argn) Evaluera fn till det entitet den representerar Evaluera argumenten arg1 arg2 argn Ersätt förekomster av parametrar i procedurens kropp med motsvarande argument och evaluera sedan kroppen Detta sätt kallas för det applikativa substitutionsmodellen för beräkning 7 8

UNDANTAGSFORMEN IF Medan alla funktionsanrop evalueras enligt en och samma regel som beskrevs nyss, evalueras undantagsformer (special forms) på andra sätt t ex (if villkor då-uttryck annars-uttrycket) Evaluera villkor, om sant evaluera sedan då-uttrycket annars evaluera annars-uttrycket Resultatet blir antingen värdet på då-uttrycket eller annars-uttrycket SPECIALFORMEN COND (cond (villkor-1 då-uttryck-1) (villkor-2 då-uttryck-2)... (villkor-n då-uttryck-n)) Evaluera villkor-1, om sant, evaluera sedan då-uttryck-1, annars gå till nästa i ordningen Någon av villkoren måste vara sant annars blir det fel Genom att låta villkor-n vara nyckelordet ELSE garanterar vi att då-uttryck-n evalueras i fall de tidigare villkoren varit falska. Så här: (cond (villkor-1 då-uttryck-1) (villkor-2 då-uttryck-2)... (ELSE då-uttryck-n)) 9 10 SPECIALFORMEN AND (and arg-1 arg-2...) SPECIALFORMEN OR (or arg-1 arg-2...) Evaluera argumenten från vänster till höger tills ett falskt värde #f fås, i så fall är and-uttryckets värde #f, annars #t. Evaluera argumenten från vänster till höger till ett #t värde fås, i så fall är värdet på or-uttrycket #t, annars #f 11 12

FÖLJANDE ÄR EKVIVALENTA (FRÅN FÖ 1) (cond ((> x 0) x) ((= x 0) 0) ((< x 0) (- x))) (cond ((> x 0) x) ((= x 0) 0) (else (- x))) (if (> x 0) x (if (= x 0) 0 (- x))) REKURSIVT FALLANALYS Rekursion är ett sätt att få datorn att snurra Rekursion är ett sätt att bryta ner problem till enklare (mindre) problem Beräkningar definieras i termer av sig själva Ett termineringsfall är alltid nödvändigt Ganska vanligt inom matten, t ex, fakultetsfunktionens beskrivning: n! = n(n-1)! när n > 0 0! = 1 13 14 FIBONACCITALEN FIBONACCITALEN 0, 1, 1, 2, 3, 5, 8, 13, Fallanalys fib(0) = 0 fib(1) = 1 fib(n) = fib(n-1)+fib(n-2) (define fib (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))) 15 16

FIBONACCITALEN - FALLANALYS 2 0, 1, 1, 2, 3, 5, 8, 13, Fallanalys fibo(0) = 0 fibo(1) = 1 fibo(n) = fibo-iter(n, 0, 1, 1) fibo-iter(n, f0, f1, räknare) = f1 om (n = räknare) fibo-iter(n, f1, f0+f1, räknare+1) annars ITERATIV FIBONACCI (define fibi (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (fiter n 0 1 1))))) (define fibi-iter (lambda (n f0 f1 count) (if (= count n) f1 (fibi-iter n f1 (+ f0 f1) (+ count 1))))) 17 18 FIBONACCITALEN - FALLANALYS 3 0, 1, 1, 2, 3, 5, 8, 13, Fallanalys fibi(0) = 0 fibi(1) = 1 fibi(n) = iter(n, 0, 1) iter(n, f0, f1) = f1 om (n = 1) iter(n-1, f1, f0+f1) annars FALLANALYS Uppdelning av ett större problem i enklare fall kräver att man jobbar med problemet Sällan kommer man på alla korrekta fallen direkt Ibland blir man tvungen att testa ett ofullständigt fallanalys för att bekanta sig med problemet ännu mer - förhoppningsvis kommer man på en fullständig lösning sedan Ibland måste man hitta på flera alternativa fallanalys och bara då kan välja den bästa uppdelningen 19 20

FALLANALYS - YTTERLIGARE EXEMPEL 1 5 5 4 3 2 1 4 4 3 2 1 2 j 3 3 2 1 2 3 2 2 1 2 3 4 1 1 2 3 4 5 1 2 3 4 5 i Fallanalys f(i,j) = j om (i=1) i om (j=1) 1 om (i=j) i-j +1 annars REKURSIVA BESKRIVNINGAR Vissa program kan formuleras som rekursiva beskrivningar (rekursivt fallanalys) Lösningar bryts ner till ett eller flera triviala fall (basfall) och ett eller flera generella fall. De generella fallen är nerskalade varianter på det ursprungliga problemet och därmed självreferens eller rekursion i lösningen Eller? 21 22 PROCEDURER OCH PROCESSER När en procedur evalueras genereras en process. Processerna kan antingen vara Rekursiva, eller Iterativa Rekursiva processer i sin tur kan antingen utgöra en linjär rekursion eller trädrekursion OBS! att i både fallen kan proceduren ha definierats som en rekursiv beskrivning (anropar sig själv) LINJÄR REKURSIVA PROCESSER Procedurbeskrivningen innehåller anrop till sig själv (se fact) Varje rekursivt anrop skapar en fördröjd operation, den fördröjda operationen kombinerar resultatet på det rekursiva anropet med annat, med andra ord, Rekursiva anropet ingår i ett resultat genereande uttrycket Tidskomplexiteten (behovet av beräkningstid) växer linjärt relativt parameterns storlek. I ordonotation: O(n) Rymdkomplexiteten (behovet av datorminne) växer linjärt relativt parameterns storlek. I ordonotation: O(n) 23 24

ITERATIVA PROCESSER Ett rekursivt anrop (se fibo eller fibi) Rekursiva anropet skapar inga fördröjda beräkningar Rekursiva anropet är svaret (ingår inte i annat uttryck) Tidskomplexiteten (behovet av beräkningstid) växer linjärt relativt parameterns storlek. I ordonotation: O(n) Rymdkomplexiteten (behovet av datorminne) är konstant och oberoende av parameterns storlek. I ordonotation: O(k) eller O(1) TRÄDREKURSIVA PROCESSER Proceduren innehåller multipla rekursiva ansrop till själv (se fib) Resultatuttrycket vanligtvis kombinerar resultaten från de rekursiva anropen Fördröjda operationer växer som träd (förgreningen är beroende av antal rekursiva anrop i ett och samma resultatuttryck, t ex, i Fibonacci är förgreningen 2) Tidskomplexiteten växer exponentiellt O(k n ), där k är antalet multipla anrop, t ex, i rekursiva Fibonacci (fib), k=2 Rymdkomplexiteten växer linjärt O(n) 25 26 UPPGIFT f(n) = n if n<3 f(n) = f(n-1)+2f(n-2)+3f(n-3) annars Skriv Schemeprocedurer som implementerar f(n) både som rekursivoch interaktiv process. Försök följa samma mönster som lösningarna för Fibonaccitalen 27