Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא מורחב למדעי המחשב בשפת Scheme תרגול 4. Outline Repeated f Accelerating computations – Fibonacci Let and let* Recursion examples – Palindrome? – Log.

Similar presentations


Presentation on theme: "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 4. Outline Repeated f Accelerating computations – Fibonacci Let and let* Recursion examples – Palindrome? – Log."— Presentation transcript:

1 מבוא מורחב למדעי המחשב בשפת Scheme תרגול 4

2 Outline Repeated f Accelerating computations – Fibonacci Let and let* Recursion examples – Palindrome? – Log Order of growth 2

3 3 (= n 1) f (repeated f (- n 1)) f(x), f(f(x)), f(f(f(x))), … apply f, n times (define (repeated f n) (if (compose f ))) ((repeated inc 5) 100) => 105 ((repeated square 2) 5) => 625 Repeated f (define (compose f g) (lambda (x) (f (g x)))) Compose now Execute later

4 4 (define (repeated f n) (lambda (x) (repeated-iter f n x))) Repeated f - iterative (define (repeated-iter f n x) (if (= n 1) (f x) (repeated-iter f (- n 1) (f x)))) Do nothing until called later

5 5 Repeated f – Iterative II (define (repeated f n) (define (repeated-iter count accum) (if (= count n) accum (repeated-iter (+ count 1) (compose f accum)))) (repeated-iter 1 f)) Compose now Execute later

6 6 (define (smooth f) (let ((dx 0.1)) )) (define (average x y z) (/ (+ x y z) 3)) (lambda (x) (average (f (- x dx)) (f x) (f (+ x dx)))) Smooth a function f: g(x) = (f(x – dx) + f(x) + f(x + dx)) / 3 ((repeated smooth n) f) Repeatedly smooth a function (define (repeated-smooth f n) )

7 Accelerating Computations 7

8 Iterative Fibonacci (define (fib n) (define (fib-iter a b count) (if (= count 0) b (fib-iter (+ a b) a (- count 1))) (fib-iter 1 0 n)) Computation time:  (n) Much better than Recursive implementation, but… Can we do better? 8

9 Slow vs Fast Expt Slow (linear) – b 0 =1 – b n =b  b n-1 Fast (logarithmic) – b n =(b 2 ) n/2 if n is even – b n =b  b n-1 if n is odd Can we do the same with Fibonacci? 9

10 Double Steps Fibonacci Transformation: 0 1 1 2 3 5 8 13 21 b a a+b 2a+b 3a+2b … Double Transformation: 10

11 A Squaring Algorithm If we can square (or multiply) linear transformations, we have an algorithm: – Apply T n on (a,b), where: – T n =(T 2 ) n/2 If n is even – T n =T  T n-1 If n is odd 11

12 Squaring Transformations General Linear Transformation: Squared: 12

13 Iterative Algorithm Initialize: Stop condition: If count=0 return b Step count is oddcount is even 13

14 Representing Transformations We need to remember x, y, z, w Fibonacci Transformations belong to a simpler family: T 01 is the basic Fibonacci transformation Squaring (verify on your own!): 14

15 Implementation (finally) (define fib n) (fib-iter 1 0 0 1 n)) (define (fib-iter a b p q count) (cond ((= count 0) b) ((even? count) (fib-iter a b (/ count 2) (else (fib-iter p q (- count 1)))) (+ (square p) (square q)) (+ (* 2 p q) (square q)) (+ (* b q) (* a q) (* a p)) (+ (* b p) (* a q)) 15

16 The syntactic sugar “Let” (define (f x y) (define (f-helper a b) (+ (* x (square a)) (* y b) (* a b))) (f-helper (+ 1 (* x y)) (- 1 y))) (define (f x y) ((lambda (a b) (+ (* x (square a)) (* y b) (* a b))) (+ 1 (* x y)) (- 1 y))) (define (f x y) (let ((a (+ 1 (* x y))) (b (- 1 y))) (+ (* x (square a)) (* y b) (* a b)))) 16

17 The syntactic sugar “Let” (Let (( ) ( ).. ( )) ) ((lambda ( ….. ) ) … ) Is defined to be equivalent to: bindings 17

18 let* (let* (( )… ( )) ) Is equivalent to (let (( )) (let* (( )… ( )) )) 18

19 let vs. let* (let ((x 2) (y 3)) (let ((x 7) (z (+ x y))) (* z x))) ==> 35 19

20 let vs. let* (let ((x 2) (y 3)) (let* ((x 7) (z (+ x y))) (* z x))) ==> 70 20

21 palindrome? Palindromes are (positive) numbers that read the same in both directions (e.g. left to right and right to left). Write a procedure (palindrome? x) that gets an integer as parameter and returns true (#t) if the number is a palindrome and false (#f) otherwise. 21

22 Examples > (palindrome? 1234567) #f > (palindrome? 1234321) #t > (palindrome? 56865) #t 22

23 Useful functions (define (least-significant x) (remainder x 10)) (define (remove-least-significant x) (quotient x 10)) 23

24 Implementation 1.Construct a new number by reversing the digits of the input (x) 2.Test whether these two numbers are equal. 24

25 reverse-num (define (reverse-num x) (define (helper x factor) (if (< x 10) x (+ (* ( ) factor) (helper ( ) (/ factor 10))))) (define (factor x) (if (< x 10) 1 (* 10 (factor ( ))))) (helper x (factor x))) 25

26 reverse-num (define (reverse-num x) (define (helper x factor) (if (< x 10) x (+ (* (least-significant x) factor) (helper ( ) (/ factor 10))))) (define (factor x) (if (< x 10) 1 (* 10 (factor ( ))))) (helper x (factor x))) 26

27 reverse-num (define (reverse-num x) (define (helper x factor) (if (< x 10) x (+ (* (least-significant x) factor) (helper (remove-least-significant x) (/ factor 10))))) (define (factor x) (if (< x 10) 1 (* 10 (factor ( ))))) (helper x (factor x))) 27

28 reverse-num (define (reverse-num x) (define (helper x factor) (if (< x 10) x (+ (* (least-significant x) factor) (helper (remove-least-significant x) (/ factor 10))))) (define (factor x) (if (< x 10) 1 (* 10 (factor (remove-least-significant x))))) (helper x (factor x))) 28

29 palindrome? (define (palindrome? x) (if (< x 0) #f (= x (reverse-num x)))) 29

30 log Consider the function defined as follows: lg(1) = 0 lg(n) = lg( ⌊ n/2 ⌋ ) + 1, n > 1 *Do not use mathematical functions not shown here, such as expt or sqrt. *You may use (floor x) to compute ⌊ x ⌋. 30

31 Recursive process (define (lg n) (if (= n 1) 0 (+ (lg (floor (/ n 2))) 1))) 31

32 Iterative process (define (lg n) (define (helper n result) (if (= n 1) result (helper ( ) ( )))) (helper n 0)) 32

33 Iterative process (define (lg n) (define (helper n result) (if (= n 1) result (helper (floor (/ n 2)) ( )))) (helper n 0)) 33

34 Iterative process (define (lg n) (define (helper n result) (if (= n 1) result (helper (floor (/ n 2)) (+ result 1)))) (helper n 0)) 34

35 Order of Growth For each of the following statements, determine whether it is true or false. If it is true, provide a proof, if false, provide a counterexample. – Θ(2^n) = Θ(3^n) – 2^(3*lg n+2) = O(n^3) 35

36 Order of Growth 36


Download ppt "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 4. Outline Repeated f Accelerating computations – Fibonacci Let and let* Recursion examples – Palindrome? – Log."

Similar presentations


Ads by Google