This preview shows pages 1–3. Sign up to view the full content.
This preview has intentionally blurred sections. Sign up to view the full version.
View Full Document
Unformatted text preview: Assignment #2 CS4/531 Due Date: Tuesday, Oct. 3, 2011 UNSUPPORTED SOLUTIONS RECEIVE NO CREDIT. Total points: 53 1. (5 pts) Let a be a real number and n a positive integer. We want to compute a n . This, of course, can be done using n − 1 multiplications. Describe an algorithm that computes an using O (log n ) basic arithmetic operations. Note: A basic arithmetic operation is one of the following: x + y , x − y , x × y , x/y (which returns the integer part of x divided by y ); and ( x mod y ) (which returns the remainder of x divided by y ). But, x y is NOT a basic arithmetic operation. Although most programming languages allow this operation, x y is calculated by a subroutine, not by a CPU instruction. Answer: • Idea: If n is even, a n = a n 2 ∗ a n 2 . If n is odd, a n = a ⌊ n 2 ⌋ ∗ a ⌊ n 2 ⌋ ∗ a . Hence we only need to call the procedure to compute a n 2 (or a ⌊ n 2 ⌋ ), and use one (or two) extra multiplication(s) to get the final result. • Pseudocode: PowerAlg (a , n) 1 if n=0 2 then return 1 3 if n=1 4 then return a 5 if n%2=0 6 then b= PowerAlg (a , n/2) 7 return b*b 8 else b= PowerAlg (a , n/2) 9 return b*b*a The running time satisfies T ( n ) = T ( n/ 2) + Θ(1) which is O (log n ) by Master Theo rem. • Extra note: The running time of the above algorithm is O (log n ). But from a com plexity point of view, the input size is n = 2 N , where N is the number of bits needed to represent n in binary. Hence the run time is linear in N , i.e. O ( N ). a50 2. (8 pts). We discussed the Fibonacci numbers in class. To calculate Fib( n ), the recur sive function (using the recursive definition) takes exponential time. The simple for loop function takes O ( n ) time. We can do better than this: only in O (log n ) time. We have shown that: Fib( n ) = α n 1 √ 5 − α n 2 √ 5 where α 1 = 1+ √ 5 2 and α 2 = 1 − √ 5 2 . By using this formula and the algorithm in Problem 1, we easily get an algorithm for computing Fib( n ) in O (log n ) time. The drawback of this algorithm, however, is that it uses real arithmetic operations, which takes more time than integer arithmetic operations. (Roughly speaking, a real arithmetic operation is 5 times slower than the corresponding 1 integer arithmetic operation). Describe an O (log n ) time algorithm that uses ONLY integer arithmetic operations. Hint: Derive a formula for computing Fib(n) using matrix and vector multiplication. Answer: We have ( F n F n 1 ) = ( 1 1 1 0 ) ( F n 1 F n 2 ) = ( 1 1 1 0 )( 1 1 1 0 ) ( F n 2 F n 3 ) . . . = ( 1 1 1 0 ) n ( F 1 F ) = ( 1 1 1 0 ) n ( 1 ) Let A = ( 1 1 1 0 ). We can calculate A n in O (log n ) time by using Power Alg , and multiply it by ( 1 ) to get the final result. All the operations done are integer operations....
View
Full
Document
This note was uploaded on 02/27/2012 for the course CSE 431/531 taught by Professor Xinhe during the Fall '11 term at SUNY Buffalo.
 Fall '11
 XINHE
 Algorithms

Click to edit the document details