This tutorial gives you more exercises on big Oh-nations.

advertisement
CS2468 Tutorial (Week 3)
This tutorial gives you more exercises on big Oh-nations.
Give a big-Oh characterization for question 1 and question 2.
1. Algorithm MatrixMultiplication(matrix A, matrix B)
Input
two matrices: matrix A (m*n) and matrix B (n*p)
Output matrix C (m*p) = AB
for i  0 to m-1 do
for j  0 to p-1 do
Ci, j  0
……………………m
……………………pm
……………………pm
for k  0 to n-1 do
……………………npm
Ci, j  Ci, j + Ai, k * Bk, j ……………………npm
return C
……………………1
Solution:The time complexity is m+2pm+2npm+1=O(npm).
2. Algorithm binarySearch (int sortedArray[ ], int n, int key)
Input
a sorted array sortedArray in increasing order (supposed that no
two elements are equal to each other), the length of the array n, and an
element to be searched for key
Output position of the element key or -1 if the element is not in the array
low  0
high  n – 1
while low ≤ high
mid  (low + high) / 2
if sortedArray[mid] = key
return mid
if sortedArray[mid] < key
low  mid + 1
else
high  mid – 1
return -1
……………………1
……………………1
……………………k
……………………k
……………………k
……………………1
……………………k
……………………k
……………………k
……………………k
……………………1
Solution: Suppose the while loop runs k times. Every time the while loop is run,
the search space is reduced to the half of the number of the remaining elements.
The while loop terminates till the number of elements in the search space is 1. So
we can get that
n
2
k 1
 1 and
n
2k
 1
so k  log 2 n .
Therefore, the time complexity is 7k+4=O(k)=O(logn).
3. Given the Node class as
public class Node {
// Instance variables:
private Object element;
private Node next;
/** Creates a node with null references to its element and next node. */
public Node() {
this(null, null);
}
/** Creates a node with the given element and next node. */
public Node(Object e, Node n) {
element = e;
next = n;
}
// Accessor methods:
public Object getElement() {
return element;
}
public Node getNext() {
return next;
}
// Modifier methods:
public void setElement(Object newElem) {
element = newElem;
}
public void setNext(Node newNext) {
next = newNext;
}
}
How can you use it to implement the Stack and Queue interfaces? What is the
time cost for each stack and queue operations?
Extra Exercise:
1)
2 * f(n/2)
if n≥2
1
if n=1
f(n) =
What is the value of f(n) in terms of n?
2)
3 * f(n/3)
if n≥2
1
if n=1
f(n) =
What is the value of f(n) in terms of n?
3)
f(n/3)
if n≥2
f(n) =
1
if n=1
What is the value of f(n) in terms of n?
Download