Xem mẫu
Faculty of Computer Science and Engineering Department of Computer Science
DATASTRUCTURES &ALGORITHMS Tutorial 1 Questions COMPUTATIONAL COMPLEXITY
Required Questions
Question 1.
Reorder the following efficiencies from the smallest to the largest: a. 2n3 + n5
b. 2000
c. 4n+1 d. n4
e. (n-1)! f. nlog2(n)
g. 2klogk(n) (k is a predefined constant) Solution:
Efficiency: a measure of amount of time for an algorithm to execute (Time Efficiency) or a measure of amount of memory needed for an algorithm to execute (Space Efficiency).
Non-decreasing order: 2000 < 2k logk(n) < n log2(n) < n4 < 2n3+n5< 4n+1 < (n-1)!
Question 2.
Determine the big-O notation for the following: a. 2n6
b. 100n + 10.5n2/3 + 5.2n5/7 c. 9log2(n)
d. 5n10 + 2logn
e. n! + k! (k is a predefined constant) f. 100log2(n) + 5(n+2n)
Solution:
a. O(n6 ) b. O(n) c. O(log2(n)) d. O(n10) e. O(n!) f. O(n)
Question 3.
Calculate the run-time efficiency of the following program segment: 1 i = n-1
2 loop (i >= n/2) 1 j = 1
2 loop (j < n/2)
1 print(i, j) 2 j = j + 2
3 end loop 4 i = i - 2
3 end loop
Solution: (Note: [n/2] = n/2 rounded down)
If [n/2] is odd, the run-time efficiency is: n/4.n/4 = n2/2 => O(n2)
Released on 03/09/2012 10:09:56 1/5
Faculty of Computer Science and Engineering Department of Computer Science
If [n/2] is even, the run-time efficiency is: n/4.(n/4-1) => O(n2) Or generally, the run-time efficiency of the given program segment is O(n2).
Question 4.
Calculate the run-time efficiency of the following program segment: 1 i = n3
2 loop (i >= n/2) 1 j = 1
2 loop (j < n/2)
1 print(i, j) 2 j = j + 2
3 end loop 4 i = i / 2
3 end loop
Solution:
There are 2 nested loops, the iteration of variable i is executed 2log2 n(n3 /2x =n/2 => x = log2n2 =
2log2n) times, j is executed n/4( or (n/4)-1) times,
Therefore, the run-time efficiency is 2(log2 n)* n/4= O(nlog2(n)).
Question 5.
If the algorithm doIt has an efficiency factor of 2n, calculate the run time efficiency of the following program segment:
1 i = 1
2 loop (i <= n) 1 j = 1
2 loop (j < n) 1 k = 1
2 loop (k <= n) 1 doIt(…) 2 k = k *2
3 end loop 4 j = j + 1
3 end loop 4 i = i + 1
3 end loop Solution:
There are 3 nested loops, the iteration of variable i is executed n times, j is executed n-1 times, k is
executed log (n)+1 times.
Therefore, the run-time efficiency is n(n-1)(log2(n)+1)(2n) = O(n3log2(n)).
Question 6.
Given that the efficiency of an algorithm is 2nlog (n4), if a step in this algorithm takes 1 nanosecond (10−9), how long does it take the algorithm to process an input of size 1024?
Solution:
It takes: 21024log2(1024)×10-9≈ 10360s
Question 7.
Released on 03/09/2012 10:09:56 2/5
Faculty of Computer Science and Engineering Department of Computer Science
Write a recurrence equation for the running time T(n) of g(n), and solve that recurrence. Algorithm g (val n )
Pre n must be greater than 0
Return integer value of g corresponding to n 1 if (n = 1)
1 return 1 2 else
1 return g(n – 1)+ 1 End g
Solution:
T(1) = 1; T(n) = 1 + T(n-1) = 1 + 1 + T(n-2) = 1 + 1 + … + 1 + 1 + T(1) = n = O(n)
Released on 03/09/2012 10:09:56 3/5
Faculty of Computer Science and Engineering Department of Computer Science
Advanced Questions
Question 8.
Prove that for any positive functions f and g, f(n) + g(n) and max(f(n), g(n)) are asymptotically equivalent (i.e. they yield the same big-O notations).
Solution: max(f(n), g(n)) ≤ f(n) + g(n) ≤ 2max(f(n), g(n)). Question 9.
Estimating the time complexity of the following program segment: 1 i = 0
2 loop (i < N) 1 j = i
2 loop (j < N) 1 k = 0
2 loop (k < M) 1 x = 0
2 loop (x < K)
1 print(i, j, k) 2 x = x + 3
3 end loop 4 k = k + 1
3 end loop 4 k = 0
5 loop (k < 2*K) 1 print(k) 2 k = k + 1
6 end loop 7 j = j + 1
3 end loop 4 i = i + 1
3 end loop Solution: K%3 is 2 or 1:
N*(M*(K/3)+2*K) + (N-1)*(M*(K/3)+2*K)+...+ 1*(M*K/3+2*K=N*(N+1)*(M*K/3+2*K)/2= O(N2 *M*K)
K%3 is 0:
N*(M*[(K/3)-1]+2*K) + (N-1)*(M*[(K/3)-1]+2*K)+...+ 1*(M*[(K/3)-1]+2*K=N*(N+1)*(M*[(K/3)-1]+2*K)/2= O(N2 *M*K)
Question 10.
Calculate the run-time efficiency of the following program segment: 1 i = n
2 k = n/3
2 loop (i >= k)
1 j = n – 2*k
Released on 03/09/2012 10:09:56 4/5
Faculty of Computer Science and Engineering Department of Computer Science
2 loop (j < i)
1 print(i, j) 2 j = j + 2
3 end loop 4 i = i - 1
3 end loop
Solution:There are 2 nested loops, the iteration of variable i is executed (2/3)*n () times, j is
executed n/3 times,
Therefore, the run-time efficiency is (2/3)*n*(n/3)= O(n2).
Question 11.
Write a recurrence equation for the running time T(n) of f(n), and solve that recurrence. Algorithm f (val n )
Pre n must be greater than 0
Return integer value of f corresponding to n 1 if (n <= 1)
1 return 1 2 else
1 return f(n – 1) + f(n – 2) End
Solution:
f(0) = f(1) = 1. Upper bound:
f(n)=f(n-1)+ f(n-2)+1 ≤ 1+ f(n-1) + f(n-1) = 1+ 2*f(n-1)=1+ 2*[1+f(n-2)+f(n-3)]≤ 1+ 2*[1+f(n-2)+f(n-2)]= 1+2 +4*f(n-2) ≤ ...≤ 1 +2 +22 + … +2n-1 =2n -1=O(2n).
Lower bound:
f(n)=f(n-1)+ f(n-2)+1= f(n-2) + f(n-3) + f(n-2)≥ 1+f(n-2)+ f(n-2)= 1+ 2*f(n-2)=1+ 2*[f(n-3)+f(n-4)] ≥ 1+ 2*[1+f(n-4)+f(n-4)]=1+2 +4*f(n-4)≥...≥1+2+22 … +2n/2-1 = 2n/2-1 -1=Ω(2^(n/2)
Question 12.
Solve recurrence f(n) = 2f(√n) + log2n. (Hint : change variables, with m = 2n)
Solution: Let m=log n => g(m)=f(2 ). Then f(n)=2f(n1/2) + log n
f(2m)=2f(2m/2) +m g(m)=2g(m/2)+m
We are easy to determine g(m)=2g(m/2)+m=O(m*log(m)). To change back to f(n), we have:
f(n) = f(2m) = g(m) = O(m*logm) = O(log(n)*log(log(n))).
-- End --
Released on 03/09/2012 10:09:56 5/5
...
- tailieumienphi.vn
nguon tai.lieu . vn