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