Föreläsning 9 Exempel

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

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

Procedurer och villkor

Lära dig analysera större och mer komplicerade problem och formulera lösningar innan du implementerar.

I dag: Blockstruktur, omgivningar, problemlösning

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

Symbolisk data. quote. (define a 1) (define b 2) (jacek johan david) (list a b)

Sökning i ordnad lista. Sökning och sortering. Sökning med vaktpost i oordnad lista

Datalogi, grundkurs 1

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

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

Idag: Dataabstraktion

Förra gången: Primitiva data

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

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

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

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

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)

Idag: Par och listor. Scheme. DA2001 (Föreläsning 6) Datalogi 1 Hösten / 29

Sökning och sortering. Sökning och sortering - definitioner. Sökning i oordnad lista. Sökning med vaktpost i oordnad lista

Sökning och sortering

1 3H 0 2gre ordningens procedurer

Rekursiva algoritmer sortering sökning mönstermatchning

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

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

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?

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

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

Datalogi, grundkurs 1

Deklarationer/definitioner/specifikationer

Lösningsförslag. TDDC74 Programmering: Abstraktion och modellering. Dugga 3 (provkod TEN1), Tid: kl 14-16, Datum:

TDDC74 Programmering, abstraktion och modellering. Tentamen

TDDC74 Programmering: Abstraktion och modellering Datordugga 2 - exempel

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

TDDC74 Programmering, abstraktion och modellering. Tentamen

Några saker till och lite om snabbare sortering

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

Våra enkla funktioner eller procedurer

Idag: Dataabstraktion

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

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

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

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

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

Ändringsbar (mutable compound) data. TDDC74 Programmering: abstraktion och modellering. Sätta - samman listor kopiering. Hitta sista cons-cellen

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

TDDC74 Lab 04 Muterbara strukturer, omgivningar

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

TDDC74 - Lektionsmaterial C

TDDC74 Lab 02 Listor, sammansatta strukturer

TDDC74 Programmering, abstraktion och modellering DUGGA 3

MMA132: Laboration 2 Matriser i MATLAB

TDDC74 Programmering: Abstraktion och modellering Datortenta

TDDC74 Programmering, abstraktion och modellering DUGGA 2

TDDC74 Programmering, abstraktion och modellering. Tentamen

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

Datalogi, grundkurs 1

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

TDDC74 Programmering: Abstraktion och modellering Dugga 2, , kl 17-19

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

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

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

DD1361 Programmeringsparadigm. Carina Edlund

Funktionell programmering DD1361

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.

Sista delen av kursen

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

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

Pythons standardbibliotek

Sista delen av kursen

Programspråkslingvistik. Sista delen av kursen. Ett programspråk

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

Tentamen i. TDDA 69 Data och programstrukturer

Tentamen Datastrukturer (DAT036)

Upplägg. Binära träd. Träd. Binära träd. Binära träd. Antal löv på ett träd. Binära träd (9) Binära sökträd (10.1)

TDDC74 Programmering: Abstraktion och modellering Datortenta , kl 08-12

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

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

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

Ickelinjära ekvationer

TDDC74 Programmering: Abstraktion och modellering Dugga 2, kl 8 10, 3 mars 2016

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

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

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

Grundläggande datalogi - Övning 4

Dugga Datastrukturer (DAT036)

Block 5: Ickelineära. ekvationer? Läroboken. Löpsedel: Icke-lineära. ekvationer. Vad visade laborationen? Vad visade laborationen?

Självbalanserande träd AVL-träd. Koffman & Wolfgang kapitel 9, avsnitt 1 2

Python. Python är, som Scheme, ett interpreterat språk men det finns kompilatorer för Python.

TDDC74 Programmering, abstraktion och modellering DUGGA 1

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

TDDC74 Programmering, abstraktion och modellering DUGGA 2

Datastrukturer, algoritmer och programkonstruktion (DVA104, VT 2015) Föreläsning 6

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å

Översikt. Stegvis förfining. Stegvis förfining. Dekomposition. Algoritmer. Metod för att skapa ett program från ett analyserat problem

Pascal... Pascal. Pascal... Pascal...

Uppgift 6A - Frekvenstabell

Pascal. reserverade ord fördefinierade funktioner och procedurer egendefinierade funktioner, procedurer och objekt

Transkript:

Föreläsning 9 Exempel Intervallhalveringsmetoden DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet Procedurabstraktion DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet Procedurabstraktion Representation DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Föreläsning 9 Exempel Intervallhalveringsmetoden Newton-Raphsons metod Mer om rekursion Tidskomplexitet Procedurabstraktion Representation Bra om ni läst följande avsnitt i AS: Procedures as General Methods Procedures as Returned Values Tree Recursion Orders of Growth Exponentiation Example: Representing Sets DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 1 / 24

Intervallhalveringsmetoden Finn ett nollställe till funktionen f (x). y f(x) x x 0 m x 1 DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 2 / 24

Intervallhalveringsmetoden Finn ett nollställe till funktionen f (x). y f(x) x x 0 m x 1 Välj x 0 och x 1 så att f (x 0 ) f (x1) < 0 och x 0 < x 1 DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 2 / 24

Intervallhalveringsmetoden... m = (x 0 + x 1 )/2 om f (x 0 ) f (m) < 0 så x 1 = m annars x 0 = m om x 0 x 1 > ɛ annars är m en rot DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 3 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) (let ((m (/ (+ x0 x1) 2))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) (let ((m (/ (+ x0 x1) 2))) (if (close-enough? x1 x0) m (if (negative? (* (f x0) (f m))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) (let ((m (/ (+ x0 x1) 2))) (if (close-enough? x1 x0) m (if (negative? (* (f x0) (f m))) (intervallhalvering f x0 m eps) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) (let ((m (/ (+ x0 x1) 2))) (if (close-enough? x1 x0) m (if (negative? (* (f x0) (f m))) (intervallhalvering f x0 m eps) (intervallhalvering f m x1 eps)))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) (let ((m (/ (+ x0 x1) 2))) (if (close-enough? x1 x0) m (if (negative? (* (f x0) (f m))) (intervallhalvering f x0 m eps) (intervallhalvering f m x1 eps)))))) > (intervallhalvering (lambda (x) (- (* x x) 2)) -5 5 0.000000000000001) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Intervallhalveringsmetoden... (define intervallhalvering (lambda (f x0 x1 eps) (define close-enough? (lambda (a b) (< (abs (- a b)) eps))) (let ((m (/ (+ x0 x1) 2))) (if (close-enough? x1 x0) m (if (negative? (* (f x0) (f m))) (intervallhalvering f x0 m eps) (intervallhalvering f m x1 eps)))))) > (intervallhalvering (lambda (x) (- (* x x) 2)) -5 5 0.000000000000001) -1.4142135623730954 DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 4 / 24

Newton-Raphsons metod Ett tal x kallas fixpunkt för en funktion f om f (x), f (f (x)), f (f (f (x))),... konvergerar mot x DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 5 / 24

Newton-Raphsons metod Ett tal x kallas fixpunkt för en funktion f om f (x), f (f (x)), f (f (f (x))),... konvergerar mot x Ex.: F (x n ) = x n+1 = x n f (x n) f (x n ) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 5 / 24

Newton-Raphsons metod... (define newton-raphson (lambda (f guess) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 6 / 24

Newton-Raphsons metod... (define newton-raphson (lambda (f guess) (if (good-enough? f guess) guess (newton-raphson f (improve guess f))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 6 / 24

Newton-Raphsons metod... (define newton-raphson (lambda (f guess) (if (good-enough? f guess) guess (newton-raphson f (improve guess f))))) (define good-enough? (lambda (func guess) (< (abs (func guess)) 0.000001))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 6 / 24

Newton-Raphsons metod... (define newton-raphson (lambda (f guess) (if (good-enough? f guess) guess (newton-raphson f (improve guess f))))) (define good-enough? (lambda (func guess) (< (abs (func guess)) 0.000001))) (define improve (lambda (guess f) (- guess (/ (f guess) ((derivata f 0.001) guess))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 6 / 24

Newton-Raphsons metod... (define newton-raphson (lambda (f guess) (if (good-enough? f guess) guess (newton-raphson f (improve guess f))))) (define good-enough? (lambda (func guess) (< (abs (func guess)) 0.000001))) (define improve (lambda (guess f) (- guess (/ (f guess) ((derivata f 0.001) guess))))) (define derivata (lambda (f dx) (lambda (x) (/ (- (f (+ x dx)) (f (- x dx))) (* dx 2))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 6 / 24

Mer om rekursion Definition av fibonaccitalen: 0 om n = 0 fib n = 1 om n = 1 fib n 1 + fib n 2 annars DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 7 / 24

Mer om rekursion Definition av fibonaccitalen: 0 om n = 0 fib n = 1 om n = 1 fib n 1 + fib n 2 annars (define fib (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 7 / 24

Mer om rekursion Definition av fibonaccitalen: 0 om n = 0 fib n = 1 om n = 1 fib n 1 + fib n 2 annars (define fib (lambda (n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2))))))) Varje anrop ger upphov till högst två nya anrop. Antal anrop blir då c:a 2 n. Antalet anrop växer exponentiellt med argumentet n. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 7 / 24

Mer om rekursion... f(3) f(4) f(2) f(2) f(1) f(1) f(0) f(1) f(0) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 8 / 24

Mer om rekursion... f(3) f(4) f(2) f(2) f(1) f(1) f(0) f(1) f(0) Antag att ett anrop tar 1 ms. Då tar (fib 4) 9 ms, (fib 10) 177 ms, (fib 20) 20 s, (fib 40) 3.8 dagar, (fib 80) 2436282 år! DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 8 / 24

Mer om rekursion... Kan det göras bättre? Här är en svansrekursiv lösning: DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 9 / 24

Mer om rekursion... Kan det göras bättre? Här är en svansrekursiv lösning: (define fib-2 (lambda (n) (fib-2-iter 1 0 1))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 9 / 24

Mer om rekursion... Kan det göras bättre? Här är en svansrekursiv lösning: (define fib-2 (lambda (n) (define fib-2-iter (lambda (fibm fibm-1 m) (if (<= n m) fibm (fib-2-iter (+ fibm fibm-1) fibm (+ m 1))))) (fib-2-iter 1 0 1))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 9 / 24

Mer om rekursion... Kan det göras bättre? Här är en svansrekursiv lösning: (define fib-2 (lambda (n) (define fib-2-iter (lambda (fibm fibm-1 m) (if (<= n m) fibm (fib-2-iter (+ fibm fibm-1) fibm (+ m 1))))) (fib-2-iter 1 0 1))) Antalet anrop av fib-2-iter växer linjärt med argumentet n. Mycket kan vinnas genom att tänka igenom programmet ordentligt. OBS! att fib-2 är svansrekursiv! DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 9 / 24

Mer om rekursion... fib-2 Om vi gör trace på fib-2-iter får vi för anropet (fib-2 7): (fib-2-iter 1 0 1) (fib-2-iter 1 1 2) (fib-2-iter 2 1 3) (fib-2-iter 3 2 4) (fib-2-iter 5 3 5) (fib-2-iter 8 5 6) (fib-2-iter 13 8 7) 13 DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 10 / 24

Tidskomplexitet Låt T (n) vara den tid det tar att utföra en uppgift enligt den algoritm vi använder. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 11 / 24

Tidskomplexitet Låt T (n) vara den tid det tar att utföra en uppgift enligt den algoritm vi använder. Vi är då endast intresserade av beroendet av n (problemets storlek) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 11 / 24

Tidskomplexitet Låt T (n) vara den tid det tar att utföra en uppgift enligt den algoritm vi använder. Vi är då endast intresserade av beroendet av n (problemets storlek) Om T (n) är proportionell mot 2 n så säger vi att T (n) O (2 n ) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 11 / 24

Tidskomplexitet Låt T (n) vara den tid det tar att utföra en uppgift enligt den algoritm vi använder. Vi är då endast intresserade av beroendet av n (problemets storlek) Om T (n) är proportionell mot 2 n så säger vi att T (n) O (2 n ) dvs: ( n 0, c)( n > n 0 )[T (n) c 2 n ] T (n) O (2 n ) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 11 / 24

Tidskomplexitet Låt T (n) vara den tid det tar att utföra en uppgift enligt den algoritm vi använder. Vi är då endast intresserade av beroendet av n (problemets storlek) Om T (n) är proportionell mot 2 n så säger vi att T (n) O (2 n ) dvs: eller mer generellt: ( n 0, c)( n > n 0 )[T (n) c 2 n ] T (n) O (2 n ) ( n 0, c)( n > n 0 )[T (n) c f (n)] T (n) O (f (n)) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 11 / 24

Tidskomplexitet Beräkning av b n DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 12 / 24

Tidskomplexitet Beräkning av b n Linjär rekursion med n steg (T (n) O (n)): { b n 1 om n = 0 = b b n 1 annars DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 12 / 24

Tidskomplexitet Beräkning av b n Linjär rekursion med n steg (T (n) O (n)): { b n 1 om n = 0 = b b n 1 annars (define expt-1 (lambda (b n) (if (= n 0) 1 (* b (expt-1 b (- n 1)))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 12 / 24

Tidskomplexitet... Annan idé (T (n) O (log n)): 1 om n = 0 b n = b (b (n 1)/2 ) 2 om n = är udda (b n/2 ) 2 annars DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 13 / 24

Tidskomplexitet... Annan idé (T (n) O (log n)): 1 om n = 0 b n = b (b (n 1)/2 ) 2 om n = är udda (b n/2 ) 2 annars (define expt-2 (lambda (b n) (cond (( = n 0) 1) ((odd? n) (* b (sqr (expt-2 b (/ (- n 1) 2))))) (else (sqr (expt-2 b (/ n 2))))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 13 / 24

Tidskomplexitet... Bra att veta att man kan räkna på algoritmer. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 14 / 24

Tidskomplexitet... Bra att veta att man kan räkna på algoritmer. Vi kommer inte att göra det. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 14 / 24

Tidskomplexitet... Bra att veta att man kan räkna på algoritmer. Vi kommer inte att göra det. Jag vill bara påpeka att det intuitiva sättet att skriva ett program kan vara förödande. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 14 / 24

Tidskomplexitet... Bra att veta att man kan räkna på algoritmer. Vi kommer inte att göra det. Jag vill bara påpeka att det intuitiva sättet att skriva ett program kan vara förödande. Då och då kan jag komma att påpeka något om en algoritms effektivitet, men bara för att jämföra med någon annan algoritm. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 14 / 24

Tidskomplexitet... Bra att veta att man kan räkna på algoritmer. Vi kommer inte att göra det. Jag vill bara påpeka att det intuitiva sättet att skriva ett program kan vara förödande. Då och då kan jag komma att påpeka något om en algoritms effektivitet, men bara för att jämföra med någon annan algoritm. Mer om detta kommer i komplexitetskursen. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 14 / 24

Procedurabstraktioner Vi har (hittills) byggt abstraktioner med hjälp av procedurer DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 15 / 24

Procedurabstraktioner Vi har (hittills) byggt abstraktioner med hjälp av procedurer procedurer som använder procedurer... DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 15 / 24

Procedurabstraktioner Vi har (hittills) byggt abstraktioner med hjälp av procedurer procedurer som använder procedurer... procedurer som parametrar DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 15 / 24

Procedurabstraktioner Vi har (hittills) byggt abstraktioner med hjälp av procedurer procedurer som använder procedurer... procedurer som parametrar procedurer med inre procedurer DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 15 / 24

Procedurabstraktioner Vi har (hittills) byggt abstraktioner med hjälp av procedurer procedurer som använder procedurer... procedurer som parametrar procedurer med inre procedurer procedurer som bygger procedurer DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 15 / 24

Procedurabstraktioner Vi har (hittills) byggt abstraktioner med hjälp av procedurer procedurer som använder procedurer... procedurer som parametrar procedurer med inre procedurer procedurer som bygger procedurer Vi har också byggt abstraktioner med hjälp av data. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 15 / 24

Representation I många fall kan vi representera samma (abstrakta) begrepp på flera olika sätt. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 16 / 24

Representation I många fall kan vi representera samma (abstrakta) begrepp på flera olika sätt. Varje representation har sina fördelar och nackdelar. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 16 / 24

Representation I många fall kan vi representera samma (abstrakta) begrepp på flera olika sätt. Varje representation har sina fördelar och nackdelar. Det gäller att kunna resonera kring dessa för- och nackdelar för att välja det som är bäst (??). DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 16 / 24

Representation I många fall kan vi representera samma (abstrakta) begrepp på flera olika sätt. Varje representation har sina fördelar och nackdelar. Det gäller att kunna resonera kring dessa för- och nackdelar för att välja det som är bäst (??). Man måste väga enkelhet, effektivitet, begriplighet m m mot varandra. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 16 / 24

Representation I många fall kan vi representera samma (abstrakta) begrepp på flera olika sätt. Varje representation har sina fördelar och nackdelar. Det gäller att kunna resonera kring dessa för- och nackdelar för att välja det som är bäst (??). Man måste väga enkelhet, effektivitet, begriplighet m m mot varandra. Låt oss titta på representation av mängder. Lite enklare begreppsmässigt än de som ska hanteras i labben. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 16 / 24

Representation I många fall kan vi representera samma (abstrakta) begrepp på flera olika sätt. Varje representation har sina fördelar och nackdelar. Det gäller att kunna resonera kring dessa för- och nackdelar för att välja det som är bäst (??). Man måste väga enkelhet, effektivitet, begriplighet m m mot varandra. Låt oss titta på representation av mängder. Lite enklare begreppsmässigt än de som ska hanteras i labben. De kan representeras bl a som oordnade listor, ordnade listor eller trädstrukturer. Vi ska titta lite på de två liststrukturerna. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 16 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} Differens A \ B {1, 2, 3}\{3, 4, 5} = {1, 2} DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} Differens A \ B {1, 2, 3}\{3, 4, 5} = {1, 2} Kartesisk prod A B {1, 2} {3, 4} = {(1. 3), (1. 4), (2. 3), (2. 4)} DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} Differens A \ B {1, 2, 3}\{3, 4, 5} = {1, 2} Kartesisk prod A B {1, 2} {3, 4} = {(1. 3), (1. 4), (2. 3), (2. 4)} Member e A 3 {1, 2, 3} = true DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} Differens A \ B {1, 2, 3}\{3, 4, 5} = {1, 2} Kartesisk prod A B {1, 2} {3, 4} = {(1. 3), (1. 4), (2. 3), (2. 4)} Member e A 3 {1, 2, 3} = true Insert A + e {1, 2, 3} + 4 = {1, 2, 3, 4} DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} Differens A \ B {1, 2, 3}\{3, 4, 5} = {1, 2} Kartesisk prod A B {1, 2} {3, 4} = {(1. 3), (1. 4), (2. 3), (2. 4)} Member e A 3 {1, 2, 3} = true Insert A + e {1, 2, 3} + 4 = {1, 2, 3, 4} Delete A e {1, 2, 3} 2 = {1, 3} DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Mängdoperationer Operation symboliskt exempel Union A B {1, 2, 3} {3, 4, 5} = {1, 2, 3, 4, 5} Snitt A B {1, 2, 3} {3, 4, 5} = {3} Differens A \ B {1, 2, 3}\{3, 4, 5} = {1, 2} Kartesisk prod A B {1, 2} {3, 4} = {(1. 3), (1. 4), (2. 3), (2. 4)} Member e A 3 {1, 2, 3} = true Insert A + e {1, 2, 3} + 4 = {1, 2, 3, 4} Delete A e {1, 2, 3} 2 = {1, 3} För enkelhets skull begränsar vi diskussionen till mängder av heltal och operationerna, och +. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 17 / 24

Representation, oordnade listor... Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 18 / 24

Representation, oordnade listor... Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 18 / 24

Representation, oordnade listor... Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((= element (car set)) #t) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 18 / 24

Representation, oordnade listor... Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((= element (car set)) #t) (else (element-of-set? element (cdr set)))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 18 / 24

Representation, oordnade listor... Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((= element (car set)) #t) (else (element-of-set? element (cdr set)))))) Linjär oordnad lista ger O (n) (n är antalet element) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 18 / 24

Representation, oordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (if (element-of-set? element set) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 19 / 24

Representation, oordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (if (element-of-set? element set) set DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 19 / 24

Representation, oordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (if (element-of-set? element set) set (cons element set)))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 19 / 24

Representation, oordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (if (element-of-set? element set) set (cons element set)))) Också O (n), vi letar igenom mängden och sätter in i första position. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 19 / 24

Representation, oordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (cond ((or (null? set-1) (null? set-2)) ()) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 20 / 24

Representation, oordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (cond ((or (null? set-1) (null? set-2)) ()) ((element-of-set? (car set-1) set-2) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 20 / 24

Representation, oordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (cond ((or (null? set-1) (null? set-2)) ()) ((element-of-set? (car set-1) set-2) (cons (car set-1) (intersect (cdr set-1) set-2))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 20 / 24

Representation, oordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (cond ((or (null? set-1) (null? set-2)) ()) ((element-of-set? (car set-1) set-2) (cons (car set-1) (intersect (cdr set-1) set-2))) (else (intersect (cdr set-1) set-2))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 20 / 24

Representation, oordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (cond ((or (null? set-1) (null? set-2)) ()) ((element-of-set? (car set-1) set-2) (cons (car set-1) (intersect (cdr set-1) set-2))) (else (intersect (cdr set-1) set-2))))) För varje element i den ena mängden gås den andra mängden igenom. Om båda har n element får vi O ( n 2). Enkla algoritmer till priset av fart. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 20 / 24

Representation, ordnade listor... Vi byter representation till ordnade listor. DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 21 / 24

Representation, ordnade listor... Vi byter representation till ordnade listor. Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 21 / 24

Representation, ordnade listor... Vi byter representation till ordnade listor. Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((< element (car set)) #f) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 21 / 24

Representation, ordnade listor... Vi byter representation till ordnade listor. Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((< element (car set)) #f) ((= element (car set)) #t) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 21 / 24

Representation, ordnade listor... Vi byter representation till ordnade listor. Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((< element (car set)) #f) ((= element (car set)) #t) (else (element-of-set? element (cdr set)))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 21 / 24

Representation, ordnade listor... Vi byter representation till ordnade listor. Mängdtillhörighet ( ): (define element-of-set? (lambda (element set) (cond ((null? set) #f) ((< element (car set)) #f) ((= element (car set)) #t) (else (element-of-set? element (cdr set)))))) Fortfarande O (n). DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 21 / 24

Representation, ordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (cond ((null? set) (list element)) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 22 / 24

Representation, ordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (cond ((null? set) (list element)) ((= element (car set)) set) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 22 / 24

Representation, ordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (cond ((null? set) (list element)) ((= element (car set)) set) ((< element (car set)) (cons element set)) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 22 / 24

Representation, ordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (cond ((null? set) (list element)) ((= element (car set)) set) ((< element (car set)) (cons element set)) (else (cons (car set) (adjoin-set element (cdr set))))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 22 / 24

Representation, ordnade listor... Lägga till ett element (+): (define adjoin-set (lambda (element set) (cond ((null? set) (list element)) ((= element (car set)) set) ((< element (car set)) (cons element set)) (else (cons (car set) (adjoin-set element (cdr set))))))) Fortfarande O (n). DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 22 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) () DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) () (let ((x1 (car set-1)) (x2 (car set-2))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) () (let ((x1 (car set-1)) (x2 (car set-2))) (cond ((= x1 x2) (cons x1 (intersect (cdr set-1) (cdr set-2)))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) () (let ((x1 (car set-1)) (x2 (car set-2))) (cond ((= x1 x2) (cons x1 (intersect (cdr set-1) (cdr set-2)))) ((< x1 x2) (intersect (cdr set-1) set-2)) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) () (let ((x1 (car set-1)) (x2 (car set-2))) (cond ((= x1 x2) (cons x1 (intersect (cdr set-1) (cdr set-2)))) ((< x1 x2) (intersect (cdr set-1) set-2)) (else (intersect set-1 (cdr set-2)))))))) DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Representation, ordnade listor... Snittet mellan två mängder ( ): (define intersect (lambda (set-1 set-2) (if (or (null? set-1) (null? set-2)) () (let ((x1 (car set-1)) (x2 (car set-2))) (cond ((= x1 x2) (cons x1 (intersect (cdr set-1) (cdr set-2)))) ((< x1 x2) (intersect (cdr set-1) set-2)) (else (intersect set-1 (cdr set-2)))))))) Högst m + n om set-1 har m element och set-2 har n. O (n) alltså! En väsentlig förbättring! DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 23 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik Med lite eftertanke kan ni redan lösa ganska komplicerade uppgifter DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik Med lite eftertanke kan ni redan lösa ganska komplicerade uppgifter Men kursen handlar egentligen om verktyg för att hantera datorer DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik Med lite eftertanke kan ni redan lösa ganska komplicerade uppgifter Men kursen handlar egentligen om verktyg för att hantera datorer Vi måste bort från det abstrakta och se en del på detaljer DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik Med lite eftertanke kan ni redan lösa ganska komplicerade uppgifter Men kursen handlar egentligen om verktyg för att hantera datorer Vi måste bort från det abstrakta och se en del på detaljer och på andra sätt att tänka DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik Med lite eftertanke kan ni redan lösa ganska komplicerade uppgifter Men kursen handlar egentligen om verktyg för att hantera datorer Vi måste bort från det abstrakta och se en del på detaljer och på andra sätt att tänka Python passar perfekt men övergången kan bli tuff DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24

Slut på Scheme, vi börjar med Python Ni har redan kommit långt i programmeringsteknik Med lite eftertanke kan ni redan lösa ganska komplicerade uppgifter Men kursen handlar egentligen om verktyg för att hantera datorer Vi måste bort från det abstrakta och se en del på detaljer och på andra sätt att tänka Python passar perfekt men övergången kan bli tuff Vi pratar Python men övar och labbar fortfarande i Scheme DA2001 (Föreläsning 9) Datalogi 1 Hösten 2013 24 / 24