Files

4.3 KiB

Review 8-3

  • Hajin Ju, 2024062806

Problem 1

Fill in the blanks in the following LCS computation

Solution 1

c[i][j] = \text{The length of an LCS of the subsequences} \,X_i\, \text{and}\, Y_j.

$$c[i][j] = \begin{cases} 0 & \text{if}, i = 0 ,\text{or}, j = 0\ c[i-1][j-1] + 1 &\text{if}, i,j > 0 ,\text{and}, x_i = y_j\ max(c[i][j-1], c[i-1][j]) &\text{if}, i, j > 0 ,\text{and}, x_i \neq y_j \end{cases}$$

* y_j B D C A B A
x_i 0 0 0 0 0 0 0
A 0 \uparrow 0 \uparrow 0 \uparrow 0 \nwarrow 1 \leftarrow 1 \nwarrow 1
B 0 \nwarrow1 \leftarrow1 \leftarrow1 \uparrow 1 \nwarrow 2 \leftarrow 2
C 0 \uparrow 1 \uparrow 1 \nwarrow 2 \leftarrow 2 \uparrow 2 \uparrow 2
B 0 \nwarrow 1 \uparrow 1 \uparrow 2 \uparrow2 \nwarrow3 \leftarrow3
D 0 \uparrow1 \nwarrow2 \uparrow2 \uparrow2 \uparrow3 \uparrow3
A 0 \uparrow1 \uparrow2 \uparrow2 \nwarrow 3 \uparrow 3 \nwarrow4
B 0 \nwarrow1 \uparrow2 \uparrow2 \uparrow3 \nwarrow4 \uparrow4

Problem 2

Fill in the blanks in the following multiple LCS computation.

Solution 2

* y_j B D C A B A
x_i 0 0 0 0 0 0 0
A 0 \leftarrow\uparrow 0 \leftarrow\uparrow 0 \leftarrow\uparrow 0 \nwarrow 1 \leftarrow 1 \nwarrow 1
B 0 \nwarrow1 \leftarrow1 \leftarrow1 \leftarrow\uparrow 1 \nwarrow 2 \leftarrow 2
C 0 \uparrow 1 \leftarrow\uparrow 1 \nwarrow 2 \leftarrow 2 \leftarrow\uparrow 2 \leftarrow\uparrow 2
B 0 \nwarrow 1 \leftarrow\uparrow 1 \uparrow 2 \uparrow2 \nwarrow3 \leftarrow3
D 0 \uparrow1 \nwarrow2 \leftarrow\uparrow2 \uparrow2 \uparrow3 \uparrow3
A 0 \uparrow1 \uparrow2 \uparrow2 \nwarrow 3 \leftarrow\uparrow 3 \nwarrow4
B 0 \nwarrow1 \uparrow2 \leftarrow\uparrow2 \uparrow3 \nwarrow4 \leftarrow\uparrow4

Problem 3

Fill in the blanks in the following pseudocode for LCS-LENGTH.

Solution 3

LCS-LENGTH(X, Y)
    m = X.length
    n = Y.length
    let b[1..m, 1..n] and c[1..m, 1..n] be new tables
    for i = 1 to m
        c[i][0] = 0
    for j = 1 to n
        c[0][j] = 0
    for i = 1 to m
        for j = 1 to n
            if X[i] = Y[j]
                c[i][j] = c[i - 1][j - 1] + 1
                b[i][j] = \nwarrow
            else if c[i-1][j] >= c[i][j-1]
                c[i][j] = c[i-1][j]
                b[i][j] = \uparrow
            else
                c[i][j] = c[i][j-1]
                b[i][j] = \leftarrow
    return c, b

Problem 4

Fill in the blanks in the following pseudocode for PRINT-LCS.

Solution 4

PRINT-LCS(b, X, i, j)
    if i = 0 or j = 0
        return
    if b[i][j] == \nwarrow
        PRINT-LCS(b, X, i-1, j)
        print X[i]
    else if b[i][j] == \uparrow
        PRINT-LCS(b, X, i-1, j)
    else
        PRINT-LCS(b, X, i, j-1)