# CSC 3102 — Advanced Data Structures & Algorithm Analysis

## Homework 2

1. Consider the following program.

for ($$i = 0$$; $$i < n\,/\,2$$; $$i++$$)
for ($$j = 0$$; $$j < n\,/\,2$$; $$j++$$)
print($$j$$)

A. (5 points) Assume the print statement is $$O(b)$$. Write an expression $$f(n)$$ that gives the run time of this code in the form of summations ($$\sum$$).

B. (5 points) Simplify your answer $$f(n)$$ from Part A as much as possible. Show your work.

C. (5 points) Justify the Big-$$O$$ order of your answer $$f(n)$$ from Part B by finding $$c$$ and $$n_0$$ such that the definition of $$O$$ holds.

2. Consider the following very slightly different program.

for ($$i = 0$$; $$i < n\,/\,2$$; $$i++$$)
for ($$j = 0$$; $$j < i\,/\,2$$; $$j++$$)
print($$j$$)

A. (5 points) Assume the print statement is $$O(b)$$. Write an expression $$f(n)$$ that gives the run time of this code in the form of summations ($$\sum$$).

B. (5 points) Simplify your answer $$f(n)$$ from Part A as much as possible. Show your work.

C. (5 points) Justify the Big-$$O$$ order of your answer $$f(n)$$ from Part B by finding $$c$$ and $$n_0$$ such that the definition of $$O$$ holds.

3. (10 points) Simplify the following recursion to a non-recursive form. $f(n)=\begin{cases} a & \text{if}\ n = 1\\b\,n + 3\,f(n\,/\,3) & \text{otherwise}\end{cases}$

4. Consider the following recursive definition of the binary search. It seeks a value $$x$$ in array $$A$$ and would be invoked as search($$A$$, 0, $$n$$, $$x$$). Assume $$A$$ is indexed beginning with 0.

search($$A$$, $$f$$, $$n$$, $$x$$)
if ($$n = 1$$)
return $$f$$
else
$$m = n\,/\,2$$
if ($$x < A[f + m]$$)
return search($$A$$, $$f$$, $$m$$, $$x$$)
else
return search($$A$$, $$f + m$$, $$n - m$$, $$x$$)

A. (5 points) Show an example execution given the input $A = [ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25 ]$ and $$x = 13$$. Specifically, list all calls to the search function in the order in which they occur, with arguments.

B. (5 points) Write an expression $$f(n)$$ that gives the run time of this code in the form of a recursion. $f(n)=\begin{cases}\text{base case} \\ \text{recursive case}\end{cases}$ Assume the base case is at least $$O(a)$$ and the recursive case is at least $$O(b)$$.

C. (10 points) Simplify your answer $$f(n)$$ from Part B as much as possible, eliminating the recursion. Show your work.

D. (5 points) Justify the Big-$$O$$ order of your answer $$f(n)$$ from Part C by finding $$c$$ and $$n_0$$ such that the definition of $$O$$ holds.

5. (10 points) Assume a stack $$S = [ 1, 2, 3, 4, 5, 6, 7, 8 ]$$ (where 1 is at the top) with push and pop operations, where pop removes and returns the top value. Also assume an empty queue $$Q = [\,]$$ with enqueue and dequeue operations, where dequeue removes and returns the front value. Show a sequence of stack and queue operations that result in $$S = [ 2, 3, 4, 1, 5, 6, 7, 8 ]$$ and $$Q = [\,]$$ using no other variables or containers.