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

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

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

Våra enkla funktioner eller procedurer

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

Procedurer och villkor

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

Föreläsning 9 Exempel

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

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

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

TDDC74 PROGRAMMERING: ABSTRAKTION OCH MODELLERING VT 2017

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

Rekursion och induktion för algoritmkonstruktion

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Rekursion och induktion för algoritmkonstruktion

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 Tentamen, lördag 29 augusti 2015, 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. Tentamen

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

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

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

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

DD1361 Programmeringsparadigm. Carina Edlund

Förra gången: Primitiva data

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

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)

TDDC74 Lab 04 Muterbara strukturer, omgivningar

Föreläsning 5. Rekursion

Programkonstruktion och Datastrukturer

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

Lösning av några vanliga rekurrensekvationer

Medan ni väntar. 2. Skriv metoden. 3. Skriv metoden. Naturligtvis rekursivt och utan användning av Javas standardmetoder.

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

I dag: Blockstruktur, omgivningar, problemlösning

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

Datastrukturer. föreläsning 2

TDDC74 Programmering, abstraktion och modellering. Tentamen

Datalogi, grundkurs 1

Pseudokod Analys av algoritmer Rekursiva algoritmer

Datastrukturer D. Föreläsning 2

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

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

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

Tommy Färnqvist, IDA, Linköpings universitet

Föreläsning 8 Innehåll

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

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

Rekursiva algoritmer sortering sökning mönstermatchning

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

Föreläsning 13. Dynamisk programmering

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

Rekursion och induktion för algoritmkonstruktion

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

Tommy Färnqvist, IDA, Linköpings universitet

TDDC74 Lab 02 Listor, sammansatta strukturer

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.

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

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

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

Deklarationer/definitioner/specifikationer

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

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

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

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

GPT föreläsning 8. Förra veckan: Man kan ta tiden på en sorterad teckensträng Förra gången: Problemlösning på lägre nivå kan sortera funktioner

TDDC74 Programmering: Abstraktion och modellering Datortenta

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

TDDC74 Programmering, abstraktion och modellering DUGGA 3

Övningshäfte 2: Induktion och rekursion

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

Föreläsning 5 Innehåll

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

TDDI16 Datastrukturer och algoritmer. Algoritmanalys

TDDC74 - Lektionsmaterial C

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

Föreläsning 7: Syntaxanalys

Föreläsning 13. Rekursion

Inlämningsuppgift MiniPlotter

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

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

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

Föreläsning 13. Dynamisk programmering

Objektorienterad programmering

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

Datalogi, grundkurs 1

Sökning och sortering

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

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

Funktionell programmering DD1361

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

TDDC74 Programmering: Abstraktion och modellering Dugga 3, kl 14 16, 25 mars 2015

Magnus Nielsen, IDA, Linköpings universitet

Transkript:

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 och iterativa processer och deras egenskaper BEGREPP Konstant, Namn Procedur/Funktion, Parameter, Argument, Kropp, scope Villkor, Logiska uttryck Funktionsanrop, Rekursion Substitutionsmodellen Rekursiva definitioner Processer: Iterativa processer, Rekursiva processer Tid- och minnesbehov för processer 2 PROBLEMLÖSNING MED HJÄLP AV FALLANALYS Problem kan ofta delas upp Mycket enklare att lösa delproblem Vanligtvis: basfall och generella fall Observera den matematiska uppdelningen av fakultetsfunktionens beskrivning: n! = n(n-1)! när n > 0 0! = 1 PROBLEMLÖSNING MED HJÄLP AV REKURSION Problemuppdelning leder ofta till rekursiva fall, där beräkningar definieras delvis i termer av sig själva De delar som är rekursiva måste då utgöra ett enklare problem än det ursprungliga annars har uppdelningen inte uppfyllt sitt syfte Med hjälp av villkorliga uttrycken i Scheme representerar vi de olika fallen i ett problem 3 4

BERÄKNINGS AV FAKULTET: 0! = 1, N! = N * (N-1)! (define fact (lambda (n) (if (= n 0) 1 (* n (fact (- n 1)))))) ITERATIV FAKULTETSFUNKTION Beskrivningar av lösningar i ett programspråk behöver inte exakt motsvara den matematiska uppdelningen. Följande program är också en lösning till fakultetsfunktionen: (define fact-iter (lambda (n result) (if (= n 0) result (fact-iter (- n 1) (* n result)))) 5 I den extra parametern result samlas delresultatet av beräkningen 6 ITERATIV FAKULTETSFUNKTION - NÅGOT BÄTTRE (define fact (lambda (n) (fact-iter n 1) (define fact-iter (lambda (n result) (if (= n 0) result (fact-iter (- n 1) (* n result)))) SUBSTITUTIONSMODELLEN PÅ BERÄKNING Skillnaden mellan den rekursiva och den iterativa lösningen kan visas med hjälp av substitutionsmodellen. 7 8

SUBSTITUTIONSMODELLEN FÖR (FACT 4) Använd substitution för att beräkna (fact 4): (fact 4) (* 4 (fact 3)) (* 4 (* 3 (fact 2))) (* 4 (* 3 (* 2 (fact 1)))) (* 4 (* 3 (* 2 (* 1 (fact 0))))) (* 4 (* 3 (* 2 (* 1 1)))) (* 4 (* 3 (* 2 1))) (* 4 (* 3 2)) (* 4 6) 24 SUBSTITUTIONSMODEL (fact 4) (fact-iter 4 1) (fact-iter (- 4 1) (* 4 1)) (fact-iter 3 4) (fact-iter (- 3 1) (* 3 4)) (fact-iter 2 12) (fact-iter (- 2 1) (* 2 12)) (fact-iter 1 24) (fact-iter (- 1 1) (* 1 24)) (fact-iter 0 24) 24 9 10 FIBONACCITALEN 0, 1, 1, 2, 3, 5, 8, 13, Fallanalys fib(0) = 0 fib(1) = 1 fib(n) = fib(n-1)+fib(n-2) FIBONACCITALEN (define fib (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))) 11 12

FIBONACCITALEN - FALLANALYS 2 0, 1, 1, 2, 3, 5, 8, 13, Fallanalys fib(0) = 0 fib(1) = 1 fib(n) = fib-iter(n, 0, 1, 1) fib-iter(n, f0, f1, räknare) = f1 om (n = räknare) fib-iter(n, f1, f0+f1, räknare+1) annars ITERATIV FIBONACCI (define fibi (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (fib-iter n 0 1 1))))) (define fib-iter (lambda (n f0 f1 count) (if (= count n) f1 (fib-iter n f1 (+ f0 f1) (+ count 1))))) 13 14 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 Uppgift: Skriv Schemekoden för detta fallanalys. FALLANALYS - RÅD 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, det gäller att träna upp sig, lös många uppgifter Ibland måste ett ofullständigt fallanalys testas för att förstå problemet bättre och sedan komplettera fallen* Ibland måste man studera flera alternativa fallanalys och välja den bästa uppdelningen * Och det är precis därför språk som Scheme och Python passar denna typ av experimentellt problemlösning. 15 16

EXEMPEL: HUR KAN VI BERÄKNA TALEN I FÖLJANDE STRUKTUR? ETT PROBLEM MÅSTE IBLAND SES FRÅN OLIKA VINKLAR 1 2 2 3 1 3 4 2 2 4 5 3 1 3 5 6 4 2 2 4 6 1 2 2 3 1 3 4 2 2 4 5 3 1 3 5 6 4 2 2 4 6 6 5 4 4 3 2 3 2 1 2 2 1 2 3 4 1 2 3 4 5 6 17 18 ÄNTLIGEN EN STRUKTUR SOM KÄNNS IGEN - KOORDINATSYSTEMET REKURSIVA BESKRIVNINGAR OCH PROCESSER j 6 6 1 5 5 4 3 2 1 4 4 3 2 1 2 3 3 2 1 2 3 2 2 1 2 3 4 1 1 2 3 4 5 6 1 2 3 4 5 6 i Fallanalys f(i,j) = j om (i=1) i om (j=1) 1 om (i=j) i-j +1 annars Eller? Vi skiljer mellan beskrivningar på program och de processer som dessa beskrivningar skapar En beskrivning kan vara självrefererande (dvs rekursiv) men skapa en repetition som inte uppfyller egenskaperna för en rekursiv process. 19 20

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) 21 LINJÄR REKURSIVA PROCESSER Ett och samma uttryck som utgör ett resultat, innehåller ett rekursivt anrop som skall kombineras med annat 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 genererande uttryck Tidskomplexiteten (behovet av beräkningstid) växer linjärt relativt parameterns storlek. I ordo-notation: O(n) Rymdkomplexiteten (behovet av datorminne) växer linjärt relativt parameterns storlek. I ordo-notation: O(n) 22 ITERATIVA PROCESSER Ett rekursivt anrop (se fact-iter 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 ordo-notation: O(n) Rymdkomplexiteten (behovet av datorminne) är konstant och oberoende av parameterns storlek. I ordo-notation: O(k) eller O(1) TRÄDREKURSIVA PROCESSER Ett och samma uttryck som utgör ett resultat, innehåller flera rekursiva anrop som skall kombineras (se fib) 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 fib är förgreningen 2) Tidskomplexiteten växer exponentiellt O(k n ), där k är antalet multipla anrop, t ex, i fib, k=2 Rymdkomplexiteten växer linjärt O(n) 23 24

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 25