Exercise 5.9. Given
three SORTED (in ascending order) arrays A[1..n], B[1..n], and C[1..n], each
containing n numbers, give an O(log n)-time algorithm (again, counting the
number of comparisons) to find the nth smallest number of all 3n elements in
arrays A, B, and C.

We are given an array A containing n numbers, and an integer
k that divides n. We want to find k numbers x1,x2, ...,xk of A such that xi is
the ( n k i)-th smallest element of A. Develop a divide and conquer algorithm
that finds the xi ’s that runs in time O(n lg k). Prove its correctness and
running time.

Exercise 5.19. Recall that the Fibonacci numbers are defined
by the following recurrence: F0 = 0, F1 = 1 and Fn = Fn−1 + Fn−2 for n > 2.
1. Using the above recurrence, give a simple algorithm to compute Fn, given n.
The complexity of the algorithm in terms of the number of arithmetic operations
should be O(n 2 ). Show that the algorithm indeed has this complexity. Recall
that an arithmetic operation is the cost of adding or multiplying two single
digit numbers. (Hint: How many digits are there in Fn? Use the fact that Fn is
Θ(( 1+√ 5 2 ) n ). 2. Our goal is to use the following matrix identity to
compute the nth Fibonacci number more efficiently. F1 F2 ! = 0 1 1 1! · F0 F1 !
(5.1) (a) Show that Fn Fn+1! = 0 1 1 1!n · F0 F1 ! (5.2) (b) Show that O(log n)
matrix multiplications are enough to compute Fn. (c) Using the fast algorithm
for multiplying two integers (Karatsuba’s algorithm) show that Fn can be
computing in O(n log2 3 log n) arithmetic operations. (d) Can you improve your
analysis of (c) and show a cost of O(n log2 3 ) arithmetic operations ?

Get Higher Grades Now

Tutors Online