Description
Goals:
-
Understanding of binary search.
-
Understanding of subsequences.
Requirements:
-
Design, code, and test a C program to compute the maximum interleave factor i for an integer sequence X such that the resulting interleaved sequence X (i) is a subsequence of another integer sequence A. The input will be formatted as follows:
-
-
Two integers giving the number of integers in sequences A and X (i.e. A and X ).
-
-
-
Each integer of A, one per line.
-
-
-
The number -999999999 on a line by itself.
-
Each integer of X , one per line.
-
-
-
The number -999999999 on a line by itself.
-
The input is to be read from standard input as one of 1) keyboard typing, 2) a shell redirect (<) from a file, or 3) cut-and-paste. Do NOT prompt for a file name!
The interleaved sequence X (i) for a sequence X and an interleave factor i ≥ 0 results from repeating each element of X exactly i times “in place”. So, if X = abbcda, X(2) is aabbbbccddaa and
X(3) is aaabbbbbbcccdddaaa. X(0) is always the empty sequence. (Aside for those with CSE 3315 background: X i is the ith power of sequence X . So, if X = abbcda, X2 is abbcdaabbcda and X 3 is abbcdaabbcdaabbcda by concatenation.)
A sequence U is a subsequence of a sequence V if there is at least one way to delete V − U
elements from V to leave the sequence U. So, U = cba is a subsequence of V = abcabcabc by performing these deletions from V = abcabcabc.
The output of your program is the trace of the successes and failures of a binary search (including “low”, “mid”, and “high”) for determining the maximum interleave factor that satisfies the subsequence condition. The last line output should provide the maximum interleave factor.
-
Submit your program on Blackboard by 10:45 am (section 004) or 1:45 pm (section 003) on October 4. One of the comment lines should indicate the compilation command used on OMEGA.
-
Assumptions about the input file:
-
-
A ≥ X
-
-
-
The integers in the two sequences will appear on lines by themselves. You may, however, simply read input using scanf(“%d”,&num).
-
-
Arrays must be dynamically allocated based on the first line of the input.
-
Thoroughly debug your subsequence testing code before attempting to call it from your binary search code. Subsequence testing is easily performed in Ο( A ) time.
-
Test cases are available on the course web page. The GTA may use other cases when checking your submissions.
-
Your program must take time in Ο( A • log( A / X )), i.e. the subsequence test function will be called a logarithmic number of times in the controlling binary search code.
-
Note that if X (i+1) is a subsequence of A, then X (i) is a subsequence of A. Likewise, if X(i) is not
-
-
subsequence of A, then X(i+1) is not a subsequence of A.
-