Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.03.2013, 14:37   #1
Vladis1av
Пользователь
 
Регистрация: 25.02.2013
Сообщений: 13
По умолчанию Написать программу на C

Даны 2 последовательности "x" и "y". Найти последовательность "z", которую можно получить вычеркиванием элементов как из "x", так и из "y"
Vladis1av вне форума Ответить с цитированием
Старый 03.03.2013, 14:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Наработки есть?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 04.03.2013, 18:29   #3
Vladis1av
Пользователь
 
Регистрация: 25.02.2013
Сообщений: 13
По умолчанию

в данный момент нет
Vladis1av вне форума Ответить с цитированием
Старый 10.03.2013, 14:48   #4
Vladis1av
Пользователь
 
Регистрация: 25.02.2013
Сообщений: 13
По умолчанию

нашел эту программу на паскале:
Пусть x=x1,x2, ... ,xm, y=y1,y2, ... ,yn.

Заведем матрицу A[0..m,0..n]. Элемент A[i,j] будет длиной

максимальной общей подпоследовательности y x1, ... ,xi и y y1, ..., yj. Сначала A[i,0]=A[0,j]=0, i=0, ... ,m, j=0, ... ,n.

Пусть xi=yj, тогда требуется увеличить длину максимальной общей подпоследовательности x1, ... ,xi-1 и y1, ... ,yj-1 на 1: A[i,j]=A[i-1,j-1]+1, если xi=yj.

В случае, если xi<>yj, то, очевидно,

A[i,j]=max{A[i-1,j],A[i,j-1],A[i-1,j-1]},

но так как всегда

A[i-1,j-1]<=A[i,j-1], то A[i,j]=max{A[i-1,j],A[i,j-1]}.

Величина A[m,n] и дает длину максимальной общей подпоследовательности. Найдем саму подпоследовательность. Пусть A[m,n]=d. Двигаясь по последней строке справа налево ищем самый левый элемент в этой строке со значением d. Двигаемся от него вверх по столбцу в поиске элемента столбца с минимальным первым индексом и значением d. Пусть это A[i,j]. Элемент A[i-1,j-1] обязан быть равен d-1, а xi и yi - это последние общие совпадающие элементы в x и y.

Начиная от элемента A[i-1,j-1] повторяем, как было описано выше, движение влево и вверх по матрице, находим предпоследний совпадающий элемент в x и y, и т.д.

Программа:
Код:
for i:=0 to m do A[i,0]:=0;
for j:=0 to n do A[0,j]:=0; for i:=1 to m do
for j:=1 to n do
if x[i]=y[i]
then A[i,j]:=A[i-1,j-1]+1
else A[i,j]:=max(A[i-1,j],A[i,j-1]); 
writeln('Длина последовательности =',A[m,n]); d:=A[m,n]; i:=m; j:=n;
while (d<>0) do begin
while A[i,j-1]=d do j:=j-1;
while A[i-1,j]=d do i:=i-1;
write('Элемент последовательности номер', d,'есть', x[i]);
i:=i-1; j:=j-1; d:=d-1; 
{переход к поиску предшествующего элемента в последовательности}
end;

Последний раз редактировалось Stilet; 10.03.2013 в 16:13.
Vladis1av вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача на множества.Написать программу не позволяющую вводить буквы русского алфавита.(написать подпрограммой используя процедуры ANTON1994 Паскаль, Turbo Pascal, PascalABC.NET 3 09.02.2013 13:53
Написать программу Арсланова Общие вопросы C/C++ 1 25.09.2012 21:38
Написать программу для перевода из 16-ричной системы счисления в 10-тичную, использовать процедурую(написать Delphi) BLADIMIR Помощь студентам 3 07.09.2011 16:35
Написать программу Holzz Фриланс 3 16.07.2011 12:27