Description
1. Write a Java, Python, C, or C++ program that outputs a longest common subsequence of three
input sequences X, Y , and Z of symbols from a fixed alphabet. For example, if the input is:
X = hN, I, N, Ei,
Y = hS, I, N, G, I, N, Gi,
Z = hN, I, N, J, A, Si
then the output should be hN, I, Ni.
For this input, the optimal solution is unique. For inputs where
the optimal solution is not unique, your program may output any longest common subsequence.
(If you want to use another programming language, get the instructors’ approval first.) (4 marks)
2. In the report, briefly explain how your program works and analyze its time and space complexity.
Also, show a small example input created by you and the corresponding output. (2 marks)
3. When all three input sequences have the same length n, what is the largest n for which your program
manages to compute a solution in less than one minute? Is the execution time or running out of
memory the main issue here? Put this “extreme” example in “Max99999999Z.txt”. (1 mark)
4. A binary sequence is a sequence over the alphabet {0, 1}. For example, h0, 1, 0, 1, 1, 0, 0, 0i is a
binary sequence. Give an example of three binary sequences X, Y , Z, each of length 8, such
that the length of a longest common subsequence of X and W, where W is a longest common
subsequence of Y and Z, is different from the length of a longest common subsequence of X, Y , Z.
You may use your program to find such an example. (2 marks)
5. For 10 different values of n selected by you, use your program to compute A(n), defined as follows.
A(n) is the average length of a longest common subsequence of three randomly generated binary
sequences X, Y , Z of length n, where all symbols in the sequences are chosen independently and
uniformly at random from {0, 1} and the average is taken over 10 independent runs. In other
words, you need to run your program 10 times for each n and therefore 100 times in total.
Present your results in a table with ten rows and three columns: one column for n, one column
for A(n), and one column for the ratio A(n)/n. According to your experiments, does A(n)/n seem
converge to any constant, and if so, what is its value? (3 marks)
6. This question concerns the case of two input sequences. Prove that every algorithm that outputs all
longest common subsequences of two input sequences has a worst-case running time that is exponential.
To do so, show how to define, for every positive integer n, two length-n sequences Xn, Yn
having Ω(c
n) different longest common subsequences, where c is a constant. You are allowed to use
an alphabet of size n, i.e., the symbols in Xn, Yn can come from a set {a1, a2, . . . , an}. (3 marks)