Presentation is loading. Please wait.

Presentation is loading. Please wait.

מבוא מורחב למדעי המחשב בשפת Scheme תרגול 2. Reminder: Recursive algorithm Reduce problem to one or more sub-problems of smaller sizes (linear or tree.

Similar presentations


Presentation on theme: "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 2. Reminder: Recursive algorithm Reduce problem to one or more sub-problems of smaller sizes (linear or tree."— Presentation transcript:

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

2 Reminder: Recursive algorithm Reduce problem to one or more sub-problems of smaller sizes (linear or tree recursion) and solve them recursively Solve the very small sized problems directly Usually some computations are required in order to split problem into sub-problems or /and to combine the results 2

3 Example 1 Compute f(n)=n! Notice that f(n)=n*f(n-1) if n>1 and f(1)=1; Algorithm: 1.If n=1 return 1 2.Computing factorial for n-1 if n>1 3.Multiply result by n and return 3

4 Example 2a Compute the average of set of n=2^k numbers –Avg({x 1.. x n })=(x 1 +..+ x n )/n Notice that: –Avg({x 1.. x n })=[Avg({x 1.. X n/2 })+Avg({x n/2+1.. x n })]/2 Algorithm 1.If input set size is 1, return the input as its average 2.Divide set into 2 subsets of n/2 if n>1 3.Find an average of each subset 4.Return average of two results 4

5 Example 2b Compute the average of set of numbers –Avg({x 1.. x n })=(x 1 +..+ x n )/n Notice that: –Avg({x 1.. x n })=[x n + (n-1)*Avg({x 1.. X n-1 })]/n Algorithm 1.If input set size is 1, return the input as its average 2.Find average of last n-1 numbers 3.Multiply result by (n-1) add x n and the divide by n 5

6 Example 3 Decide if the number x is a power of 2 F(x)= #t,if x=2^n for some n; or #f,otherwise Notice –F(x)=F(x/2) if x is even, F(x)=#t if x=1 and #f otherwise Algorithms 1.if x=1 return #t; If x is odd return #f; else 2.Compute and return for x/2 6

7 Recursive calls Function/procedure that calls to itself called recursive procedure Can’t call to itself every time as have to stop somewhere Recursive algorithms are usually implemented using recursive calls 7

8 8 The conditional form (cond ( ) ( )... ( ) (else )) (define (abs x) (cond ((> x 0) x) ((= x 0) 0) (else (- x))))

9 Scheme Examples n! (define (f n) (if (= n 1) 1 (* n f (- n 1))))) Decide whether x is a power of 2 (define (is_pow2 x) (cond ( ((= x 1) #t) ((odd? x) #f) (else (is_pow2 (/ x 2)))) )) 9

10 Special case of recursive processes No need to do computations after return of recursive call 10 call return val calc call return valreturn same val calcno calc call return same val

11 11 converting a tail recursive call to an iterative process call calc call return val don’t wait In Scheme, a tail recursive procedure results in an iterative process!

12 Different Meanings of Recursions 12 Recursive AlgorithmsIterative Algorithms Recursive Scheme Function Recursive ProcessIterative Process Tail Recursion

13 13 Fibonacci Series Recursive algorithm fib(0) = 0 fib(1) = 1 fib(n) = fib(n-1) + fib(n-2) :n > 1 Tree recursion (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)))))) Iterative algorithm Initialize: a = 1, b = 0 count = n Step: a new = a old + b old b new = a old count = count - 1 Tail Recursion (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)) Every element is the sum of its predecessors: 1, 1, 2, 3, 5, 8, 13, 21…

14 14 Tree Recursion

15 Implementing loops using tail recursion Usually using helper local function (iterator) Pass loop local variables as an argument (usually includes some sort of counter) Check stopping condition Make initial call with initial state arguments 15

16 Example(Recursion) Input: Amount of money : $1.50 Output: Number of different ways to construct the amount using coins of 1,2,5,10,15,20,50 cents Assume there is unlimited number of coins of each value 16

17 17 Counting Change =2x=3x+ 4x=++ 93x

18 18 Counting Change CC(, { } ) = CC(, { } ) + CC( -, { } )

19 19 Counting Change (define (count-change amount) (cc amount 6)) (define (cc amount kinds-of-coins) (cond ((= amount 0) ) ((or (< amount 0) (= kinds-of-coins 0)) ) (else (+ (cc ) (cc ))))) (define (first-denomination kinds-of-coins) (cond ((= kinds-of-coins 1) 1) ((= kinds-of-coins 2) 2) ((= kinds-of-coins 3) 5) ((= kinds-of-coins 4) 10) ((= kinds-of-coins 5) 20) ((= kinds-of-coins 6) 50)))) 1 0 amount (- kinds-of-coins 1) (- amount (first-denomination kinds-of-coins)) kinds-of-coins

20 20 Orders of Growth We say that function R(n)   (f(n)) if there are constants c 1,c 2 > 0 such that for all n≥1 c 1 f(n) ≤ R(n) ≤ c 2 f(n) We say that function R(n)   (f(n)) if there is a constant c>0 such that for all n ≥1 c f(n) ≤ R(n) We say that function R(n)  O(f(n)) if there is a constant c>0 such that for all n ≥1 R(n) ≤ c f(n)

21 Asymptotic version Suppose f(n) < g(n) for all n≥N There is always a constant c such that f(n) < c*g(n) for all n ≥ 1 C=(max{f(n): n<N}+1)/min{g(n): n<N} 21

22 22 Practice 5n 3 + 12n + 300n 1/2 + 1  n 2 + 30  350  25 n 1/2 + 40log 5 n + 100000  12log 2 (n+1) + 6log(3n)  2 2n+3 + 37n 15 + 9   (n 3 )  (n 2 )  (1)  (n 1/2 )  (log 2 n)  (4 n )

23 Comparing algorithms Running time of a program implementing specific algorithm may vary depending on –Speed of specific computer(e.g. CPU speed) –Specific implementation(e.g. programming language) –Other factors (e.g. input characteristics) Compare number of operation required by different algorithms asymptotically, i.e. order of growth as size of input increases to infinity 23

24 Efficient Algorithm Algorithm for which number of operations and amount of required memory cells do not grow very fast as size of input increased –What operations to count? –What is input size (e.g. number of digits for representing input or input number itself)? –Different input of the same size can cause different running time. 24

25 Efficient algorithms cont’d Input size: usually the size of input representation (number of bits/digits) Usually interested in worst case running time,i.e. number of operations for worst case Usually we count primitive operations (arithmetic and/or comparisons) 25

26 26 Complexity Analysis Reminder: –Space complexity - number of deferred operations(Scheme) –Time complexity - number of primitive steps Method I – Qualitative Analysis –Example: Factorial –Each recursive call produce one deferred operation(multiplication) which takes constant time to perform –Total number of operations(time complexity)  (n) –Maximum number of deferred operations  (n) during the last call Method II – Recurrence Equations

27 27 Recurrence Equations Code (define (sum-squares n) (if (= n 1) 1 (+ (square n) (sum-squares (- n 1)) ))) Recurrence T(n) = T(n-1) +  (1) Solve T(n)  T(n-1) + c  T(n-2) + c + c  T(n-3) + c + c + c  … = T(1) + c + c + … + c = c + c + … + c = nc  O(n)

28 28 Recurrence Equations Code (define (fib n) (cond ((= n 0) 0) ((= n 1) 1) (else (+ (fib (- n 1)) (fib (- n 2)) )))) Recurrence T(n) = T(n-1) + T(n-2) +  (1) Solve For simplicity, we will solve T(n) = 2T(n-1) +  (1), Which will give us an upper bound

29 29 Recursion Trees T(n) T(n-1)  (1) T(n-2) 2  (1) 4  (1) T(1) 2 n-1  (1) Total:  (2 n )

30 30 Fibonacci - Complexity Time complexity –T(n) < 2T(n-1)+  (1) –Upper Bound: O(2 n ) –Tight Bound:  (  n ) where  =(  5+1)/2 –Space Complexity:  (n)

31 31 Common Recurrences T(n) = T(n-1) +  (1)   (n) T(n) = T(n-1) +  (n)   (n 2 ) T(n) = T(n/2) +  (1)   (logn) T(n) = T(n/2) +  (n)   (n) T(n) = 2T(n-1) +  (1)   (2 n ) T(n) = 2T(n/2) +  (1)   (n) T(n) = 2T(n/2) +  (n)   (nlogn)

32 32 Back to GCD (define (gcd a b) (if (= b 0) a (gcd b (remainder a b)))) Claim: The small number (b) is at least halved every second iteration For “double iterations” we have T(b)  T(b/2) +  (1) T(a)  O(log(b))


Download ppt "מבוא מורחב למדעי המחשב בשפת Scheme תרגול 2. Reminder: Recursive algorithm Reduce problem to one or more sub-problems of smaller sizes (linear or tree."

Similar presentations


Ads by Google