Sale!

Problem 1: (5 points) Give the asymptotic bounds for T(n) in each of the following recurrences. Make

your bounds as tight as possible and justify your answers. Assume the base cases T(0)=1 and/or T(1) = 1.

a) ?(?) = 2?(? − 2) + 1

b) ?(?) = ?(? − 1) + ?

3

c) ?(?) = 2? (

?

6

) + 2?

2

Problem 2: (5 points) The quaternary search algorithm is a modification of the binary search algorithm

that splits the input not into two sets of almost-equal sizes, but into four sets of sizes approximately

one-fourth.

a) Verbally describe and write pseudo-code for the quaternary search algorithm.

b) Give the recurrence for the quaternary search algorithm

c) Solve the recurrence to determine the asymptotic running time of the algorithm. How does the

running time of the quaternary search algorithm compare to that of the binary search algorithm.

Problem 3: (5 points) Design and analyze a divide and conquer algorithm that determines the minimum

and maximum value in an unsorted list (array).

a) Verbally describe and write pseudo-code for the min_and_max algorithm.

b) Give the recurrence.

c) Solve the recurrence to determine the asymptotic running time of the algorithm. How does

the theoretical running time of the recursive min_and_max algorithm compare to that of an

iterative algorithm for finding the minimum and maximum values of an array.

Problem 4: (5 points) Consider the following pseudocode for a sorting algorithm.

StoogeSort(A[0 … n – 1])

if n = 2 and A[0] > A[1]

swap A[0] and A[1]

else if n > 2

m = ceiling(2n/3)

StoogeSort(A[0 … m – 1])

StoogeSort(A[n – m … n – 1])

Stoogesort(A[0 … m – 1])

a) Verbally describe how the STOOGESORT algorithm sorts its input.

b) Would STOOGESORT still sort correctly if we replaced k = ceiling(2n/3) with k = floor(2n/3)? If

yes prove if no give a counterexample. (Hint: what happens when n = 4?)

c) State a recurrence for the number of comparisons executed by STOOGESORT.

d) Solve the recurrence to determine the asymptotic running time.

CS 325 – Homework Assignment 2

Problem 5: (10 points)

a) Implement STOOGESORT from Problem 4 to sort an array/vector of integers. Implement the

algorithm in the same language you used for the sorting algorithms in HW 1. Your program

should be able to read inputs from a file called “data.txt” where the first value of each line is the

number of integers that need to be sorted, followed by the integers (like in HW 1). The output

will be written to a file called “stooge.out”.

Submit a copy of all your code files and a README file that explains how to compile and run your code

in a ZIP file to TEACH. We will only test execution with an input file named data.txt.

b) Now that you have proven that your code runs correctly using the data.txt input file, you can

modify the code to collect running time data. Instead of reading arrays from a file to sort, you

will now generate arrays of size n containing random integer values and then time how long it

takes to sort the arrays. We will not be executing the code that generates the running time data

so it does not have to be submitted to TEACH or even execute on flip. Include a “text” copy of

the modified code in the written HW submitted in Canvas. You will need at least seven values of

t (time) greater than 0. If there is variability in the times between runs of the algorithm you may

want to take the average time of several runs for each value of n.

c) Plot the running time data you collected on an individual graph with n on the x-axis and time on

the y-axis. You may use Excel, Matlab, R or any other software. Also plot the data from Stooge

algorithm together on a combined graph with your results for merge and insertion sort from

HW1.

d) What type of curve best fits the StoogeSort data set? Give the equation of the curve that best

“fits” the data and draw that curve on the graphs of created in part c). How does your

experimental running time compare to the theoretical running time of the algorithm? CS 325 – Homework Assignment 2

# CS 325 – Homework 2

$29.00

Problem 1: (5 points) Give the asymptotic bounds for T(n) in each of the following recurrences. Make

your bounds as tight as possible and justify your answers. Assume the base cases T(0)=1 and/or T(1) = 1.

a) ?(?) = 2?(? − 2) + 1

b) ?(?) = ?(? − 1) + ?

3

c) ?(?) = 2? (

?

6

) + 2?

2

Problem 2: (5 points) The quaternary search algorithm is a modification of the binary search algorithm

that splits the input not into two sets of almost-equal sizes, but into four sets of sizes approximately

one-fourth.

a) Verbally describe and write pseudo-code for the quaternary search algorithm.

b) Give the recurrence for the quaternary search algorithm

c) Solve the recurrence to determine the asymptotic running time of the algorithm. How does the

running time of the quaternary search algorithm compare to that of the binary search algorithm.

Problem 3: (5 points) Design and analyze a divide and conquer algorithm that determines the minimum

and maximum value in an unsorted list (array).

a) Verbally describe and write pseudo-code for the min_and_max algorithm.

b) Give the recurrence.

c) Solve the recurrence to determine the asymptotic running time of the algorithm. How does

the theoretical running time of the recursive min_and_max algorithm compare to that of an

iterative algorithm for finding the minimum and maximum values of an array.

Problem 4: (5 points) Consider the following pseudocode for a sorting algorithm.

StoogeSort(A[0 … n – 1])

if n = 2 and A[0] > A[1]

swap A[0] and A[1]

else if n > 2

m = ceiling(2n/3)

StoogeSort(A[0 … m – 1])

StoogeSort(A[n – m … n – 1])

Stoogesort(A[0 … m – 1])

a) Verbally describe how the STOOGESORT algorithm sorts its input.

b) Would STOOGESORT still sort correctly if we replaced k = ceiling(2n/3) with k = floor(2n/3)? If

yes prove if no give a counterexample. (Hint: what happens when n = 4?)

c) State a recurrence for the number of comparisons executed by STOOGESORT.

d) Solve the recurrence to determine the asymptotic running time.

CS 325 – Homework Assignment 2

Problem 5: (10 points)

a) Implement STOOGESORT from Problem 4 to sort an array/vector of integers. Implement the

algorithm in the same language you used for the sorting algorithms in HW 1. Your program

should be able to read inputs from a file called “data.txt” where the first value of each line is the

number of integers that need to be sorted, followed by the integers (like in HW 1). The output

will be written to a file called “stooge.out”.

Submit a copy of all your code files and a README file that explains how to compile and run your code

in a ZIP file to TEACH. We will only test execution with an input file named data.txt.

b) Now that you have proven that your code runs correctly using the data.txt input file, you can

modify the code to collect running time data. Instead of reading arrays from a file to sort, you

will now generate arrays of size n containing random integer values and then time how long it

takes to sort the arrays. We will not be executing the code that generates the running time data

so it does not have to be submitted to TEACH or even execute on flip. Include a “text” copy of

the modified code in the written HW submitted in Canvas. You will need at least seven values of

t (time) greater than 0. If there is variability in the times between runs of the algorithm you may

want to take the average time of several runs for each value of n.

c) Plot the running time data you collected on an individual graph with n on the x-axis and time on

the y-axis. You may use Excel, Matlab, R or any other software. Also plot the data from Stooge

algorithm together on a combined graph with your results for merge and insertion sort from

HW1.

d) What type of curve best fits the StoogeSort data set? Give the equation of the curve that best

“fits” the data and draw that curve on the graphs of created in part c). How does your

experimental running time compare to the theoretical running time of the algorithm?