CSE 2320 Section 501 Fall 1998

**Homework 1**

Due: September 15, 1998, in class (September 16, 1998, 5:00pm for -10%)

Due: September 15, 1998, in class (September 16, 1998, 5:00pm for -10%)

- 1.
- Design and analyze an iterative algorithm called
ADD-ODDS(
*A*,*n*) that returns the sum of the odd numbers found in the positive integer array . Specifically,- (a)
- Give pseudocode for your iterative ADD-ODDS(
*A*,*n*) algorithm. - (b)
- Perform a line-by-line analysis of your algorithm and derive a
precise expression
*T*(*n*) for the running time. You may assume that each line of pseudocode takes unit time (i.e.,*c*_{i}= 1). - (c)
- Describe the situation resulting in the best-case running time of
your algorithm and derive an expression for
*T*(*n*) in this case. Also, give an asymptotically-tight bound for*T*(*n*). - (d)
- Describe the situation resulting in the worst-case running time of
your algorithm and derive an expression for
*T*(*n*) in this case. Also, give an asymptotically-tight bound for*T*(*n*).

- 2.
- Prove that your asymptotically-tight bound in part 1d is correct by
finding the constants
*c*_{1},*c*_{2}and*n*_{0}from the definition of . - 3.
- Prove that 2
^{n}is an asymptotic upper bound for*n*^{2}by finding the constants*c*and*n*_{0}from the definition of*O*. - 4.
- Prove that 2
^{n}is*not*an asymptotic lower bound for*n*^{2}by showing that no constants*c*and*n*_{0}exist satisfying the definition of . - 5.
- Design and analyze a recursive version of the
ADD-ODDS(
*A*,*p*,*r*) algorithm that uses a divide-and-conquer approach in which the algorithm divides the array in half and calls itself recursively on each half. Specifically,- (a)
- Give pseudocode for your recursive ADD-ODDS(
*A*,*p*,*r*) algorithm. NOTE: You may not use global variables in your algorithm. - (b)
- Perform a line-by-line analysis of your algorithm and derive a
recurrence
*T*(*n*) for the running time, where*n*=*r*-*p*+ 1. You may assume that each line of pseudocode takes unit time (i.e.,*c*_{i}= 1), except, of course, those lines containing recursive calls. - (c)
- Describe the situation resulting in the best-case running time of
your algorithm and derive a precise recurrence for
*T*(*n*) in this case. - (d)
- Describe the situation resulting in the worst-case running time of
your algorithm and derive a precise recurrence for
*T*(*n*) in this case. - (e)
- Solve your recurrence from part (d) using the iteration method and
substitution method.

- 6.
- Solve the following recurrence using the iteration method and verify
your result using the substitution method.