MCS 401 Exam 2 1 April 2015 Name: • Do not start until instructed to

Transcription

MCS 401 Exam 2 1 April 2015 Name: • Do not start until instructed to
MCS 401
Exam 2
Name:
• Do not start until instructed to do so.
• In order to get full credit, you need to show your work.
• You have 50 minutes to complete the exam.
• Good Luck!
Problem
Problem
Problem
Problem
Total
1
2
3
4
/25
/35
/15
/25
/100
1 April 2015
Problem 1 (25 points) Show that the solution of T (n) = T (n/3) + 2 is O(log n). To get full
credit, you must clearly state what you are doing. Don’t just write a bunch of inequalities
without a few sentences of explanation.
Answer. Substitution Method To show this, we need to find a constant d such that
T (n) ≤ d log2 n. (You could use any base you like, I just chose base two.) We will make the
computations with d as a variable and then at the end decide what d should be.
T (n) = T (n/3) + 2
n
+2
≤ d log2
3
= d log2 n − d log2 3 + 2.
We win if −d log2 3 + 2 is negative since then T (n) ≤ d log2 n. So
−d log2 3 + 2 ≤ 0
2 ≤ d log2 3
2
≤ d.
log2 3
So choose a d like d = 10. The computation then shows T (n) ≤ 10 log2 n which implies
T (n) = O(log n).
Recursion Tree You could also use the tree. In the tree, each node has exactly one child
(the number of children is the coefficient in front of T (n/3) which is 1). The depth of the
tree is O(log n) and each node has a cost of 2, so the total is O(log n).
Problem 2 (35 points) You are given an undirected unweighted graph G where in addition
each edge is colored either red or blue. You are also given an integer k. Describe an algorithm
that either produces a spanning tree of G consisting of exactly k red edges, or outputs that
no such spanning tree exists. Also, briefly justify why your algorithm works correctly. Hint:
either Kruskal’s or Prim’s algorithms can be modified slightly to solve this problem, but I
think modifying Kruskal is easier. To do so, you will need to run Kruskal twice with two
different orderings of edges. Hint 2: the first time you run Kruskal, you should determine
the tree which uses the fewest number of red edges.
Answer. First run Kruskal with all blue edges appearing before all red edges to produce a
tree T . Say X is the set of red edges in T . Now order the edges by putting all red edges
in X first, then the other red edges, and finally the blue edges. But during this second run,
stop adding red edges once you get to k red edges and immediately skip to the blue edges
once you get to k red edges.
It works because the first tree T produced is the tree which has the fewest number of red
edges since all blue edges appear first. If this tree has more than k red edges, we can
immediately return that no tree exists.
During the second run of Kruskal, we put the red edges X first in the ordering, so Kruskal is
guaranteed to pick them. (They are part of the tree T so Kruskal will not skip any of them
because they have no cycles.) Another property is that from X, we can complete a spanning
tree using only blue edges. So we start adding more red edges, eventually reaching k, and
then immediately jumping to the blue edges. We are guaranteed that jumping to the blue
edges we can still get to a spanning tree.
Problem 3 (15 points) Construct a Huffman code for the following alphabet with the given
frequencies. You should draw the Huffman tree with labeled vertices, and also give the
assignment of codes to letters.
a: 6
b: 2
c: 5
d: 2
e: 7
Answer.
a
e
c
b
d
The codes are then a = 00, b = 110, c = 10, d = 111, e = 01. (This is not the only choice
for codes, there are other correct answers.)
Problem 4 (25 points) Consider the following greedy algorithm to solve the weighted interval
scheduling problem: sort intervals by weight with the largest weight first. Go through the
intervals in this ordering, adding them one by one if the interval is compatible with all the
previously chosen intervals. Explain why this greedy algorithm does not work and give an
example set of intervals for which it does not work.
Answer. Consider a single interval with time [0, 10] with weight 5000, and 10 intervals [0, 1],
and [1, 2], and [2, 3], and so on up to [9, 10]. Each of these shorter intervals has weight 2000.
The greedy algorithm will pick the weight 5000 interval and no other intervals. The optimal
solution is to take all the small intervals, for a total weight of 10, 000.