1. Do CLRS Problem 3-2.
2. Do CLRS Problem 3-3a for all functions that do not involve the lg* function, i.e., for the following functions.
(√2)lg n n2 n! (lg n)! (3/2)n n3 lg2 n lg(n!) 22n n1/lg n ln ln n n2n nlg lg n ln n 1 2lg n (lg n)lg n en 4lg n (n+1)! √(lg n) 2√(2 lg n) n 2n n lg n 22n+1
3. (cf CLRS Exercise 2.2-2) Here is a pseudocode for Selection Sort.
selection_sort(A) {
n ← A.length
for i ← 1 to n-1 do
{
minIndex ← i
for j ← i+1 to n do
if A[j] < A[minIndex] then minIndex ← j
temp ← A[i]
A[i] ← A[minIndex]
A[minIndex] ← temp
}
return A
}
4. Here is a pseudocode for a recursive Selection Sort. It differs from the iterative version of the previous problem in that it repeatedly selects the maximums (instead of the minimums) and puts them in the correct place.
main() {
A ← input array
return selection_sort(A, A.length)
}
selection_sort(A, n) {
if n > 1 then
{
maxindex ← select(A, n)
temp ← A[maxindex]; A[maxindex] ← A[n]; A[n] ← temp
selection_sort(A, n-1)
}
return A
}
select(A, n) {
if n = 1 then
return 1
else
{
maxindex ← select(A, n-1)
if A[n] > A[maxindex] then
return n
else
return maxindex
}
}
Give a tight big-O estimate of the running time of main()
using the method done in class.
To do this, you need to first analyze the running time of select(A, n),
selection_sort(A, n), and main(), in that order.
Is your answer different from the previous problem?
(Here is a python code for recursive selection sort.)
5. Modify the algorithm on page 4 of Handout #A4
so that the worst-case running time of main is Θ((n-1)!).
Explain why your algorithm takes time Θ((n-1)!).
Here is a python code for TSP.
You should at least write up your modified algorithm in python
by modifying this given code, and test your modified code
to make sure that it gives the correct answer and better
running time than the original code.