Изменения

Перейти к: навигация, поиск

Задача о наименьшей суперпоследовательности

142 байта добавлено, 23:25, 23 декабря 2017
Нет описания правки
===Восстановление ответа===
Для восстановления ответа заведем массив <tex> prev[0 \dots n][0\dots m] </tex>, где <tex>prev[i][j]</tex> будет означать индексы в массиве равняться: <tex>scs</texprev[i][j] =\begin{cases} 1, & x[i] == y[j] \\ 2, & x[i] \neq y[j], sc[i - 1][j] >sc[i][j - 1] \\ 3, при которых достигалось наименьшее значение & x[i] \neq y[j], sc[i - 1][j] <tex>scssc[i][j- 1]\\ \end{cases}</tex> По этим данным можно узнать, какой символ был добавлен в наименьшую общую суперпоследовательность.
===Псевдокод===
'''if''' x[i] == y[j]
scs[i][j] = 1 + scs[i - 1][j - 1]
prev[i][j] = pair(i - 1, j - 1)
'''else'''
'''if''' scs[i - 1][j] <= lcs[i][j - 1]
scs[i][j] = 1 + scs[i - 1][j]
prev[i][j] = pair(i - 1, j)2
'''else'''
scs[i][j] = 1 + scs[i][j - 1]
prev[i][j] = pair(i, j - 1)3
'''fun''' printLCS(n: '''int''', m: '''int'''): ''<font color="green">// вывод SCS</font>''
ans = [] ''<font color="green">// массив ответа </font>''
'''while''' i > 0 '''and''' j > 0
'''if''' prev[i][j] == pair(i - 1, j - 1)
ans.append(x[i])
i -= 1
j -= 1
'''else'''
'''if''' prev[i][j] == pair(i - 1, j)2
ans.append(x[i])
i -= 1
63
правки

Навигация