Изменения

Перейти к: навигация, поиск
Псевдокод
== Псевдокод ==
 Размещаем граничные случаи: <tex>F(I, I) = 1</tex> и <tex>F(I, J) = 0</tex>, если <tex>I > J</tex>. Теперь в рассматриваемой подстроке отделяем первый символ. Есть две возможности (какая из них реализуется, пока не знаем). Отделенный символ не участвует в образовании максимального подпоследовательностиПриведем псевдокод заполнения массива длин подпоследовательностей-палиндрома — тогда <tex>F(I, J) = F(I + 1, J)</tex>. Если же участвует, то ищем в подстроке с конца символ, совпадающий с отделенным (пусть его позиция <tex>K</tex>), тогда <tex>F(I, J) = 2 + F(I + 1, K – 1)</tex>. Надо предусмотреть еще случай <tex>I = K</tex>, а затем отсекать рекурсию.Получается следующая функцияпалендромов:
<code>
procedure FillPalMatrix(s: string); Function F(i, for j):= 1 to n do begin if LMat[ij, j] :=1; for i:= j -1downto 1 do begin count:= Mat[i + 1, j]; k t:= j; while Ss[it] <> Ss[ki] k--do dec(t); R1 found:= F(t - i + 1, j); if t >= i <> k R2 + 2 then found:= F(Mat[i + 1, k t - 1) ] + 2 else R2 = 1; if R1 > R2 L[i, j] count < found then count:= R1found; else LMat[i, j] := R2 return L[i, j]count;
</code>
Анонимный участник

Навигация