Write
your name (LAST, FIRST), 4digits SSN, section and lab. Keep back-up copy
electronically or with photocopy.
Answers
must be complete. concise and readable: a single numbed or an equation is not
an answer.
All
answers are worth 10 points.
1: Given a binary tree, design an efficient
algorithm to print out the longest path starting from the root node and discuss
its time and space complexity (no formal proof needed).
2: Prove that:
a. f(n)=O(g(n))
<=> g(n) = W(f(n))
b. 10000 n^4 + n^3 log n logn = O(n^4)
c. 0.001 n^2 log n =/=
O(100 n^2)
3.
Consider
the following proposition :
“In
a graph, if there exists a path between two nodes, then there exists a simple
path between them.”
Is
the above statement true?
If
yes, provide an algorithm to convert any path between two points into a simple
path.
If
not, give a counter example to disprove the proposition.
4.Consider
the following pseudo-code of an algorithm called Algy.
Algy(A,
i, j ) {
1. if i+1 >= j
2. then return A;
3. k = floor( (i+j)/2 )
4. A1 = Algy(A, i, k)
1.
A2
= Algy(A, k+1, j)
2.
A3
= Combine(A1, A2)
3.
return
A3
4.
}
Assume
that the calculation of k in line 3 takes constant time and Combine(A1,A2) takes O(m1+m2) time where m1 and m2 are the
sizes of arrays A1 and A2. Combine() returns an array of size m1+m2.
Calculate
the time complexity of this algorithm.
5
:Assume that the weights in a graph are positive, prove that you can rescale
them by adding a constant to all of them or by multiplying them all by a
constant without affecting the MSTs, provided
that the new weights are positive. Hint: prove that an MST in the first
graph is also an MST in the rescaled graph.
6: Given a doubly linked list and one node in
this list, design a recursive algorithm
and C++ code to calculate how much off center is the node.
Discuss
the time complexity.
class
lnode {
lnode
*left;
lnode
*right;
public:
int offCenter();
}
From
main, I want to be able to call: p->offCenter(), and have it return 0 if the
node is exactly in the middle, or else the absolute value of the difference of
the left and right lentgths.
7:
Given the graph below, assume node h is the source.
A. Run BFS, show the evolution of the tree one node at a time, write the final value for the depth and parent of each node, write the node sequence according to the first time the node is visited. If a node has more than one neighbors, select alphabetically.
B. Run DFS, and show the evolution of the
tree one node at a time. Write the nodes in the order they are visited, and the
order they turn black (all children have been visited).
Select
nodes in alphabetical order again. Note: assume the recursive procedure we
presented in class.
8: Given the graph below, run Kruskal’s MST
algorithm. Write the list of edges in the order they are examined and the order
with which they are added to the tree.