IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Волнистая последовательность
xprogrammer
сообщение 3.11.2006 10:38
Сообщение #1





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


Назовенм последовательность волнистой если для всех кроме первого элемента выполняется: для всех элементов кроме первого и последнего, что либо этот член последовательности больше всех своих соседей, либо меньше.
Например : 12121212121-волнистая
а 123321 - нет
дана последовательность и надо из неё выделить самую большую волнистую подпоследовательность .
Последовательность храниться в массиве помогите хоть алгоритмом.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
xprogrammer
сообщение 3.11.2006 23:25
Сообщение #2





Группа: Пользователи
Сообщений: 3
Пол: Мужской

Репутация: -  0  +


нет, вы неправильно мепня поняяли. Подпоследовательностью последовательности (Xn) я имею ввиду любой упорядоченный набор элементов последовательности (yn) где если Yi , yj ( элементы последовательности) и I>j то номер элемента Yi в последовательности Xn будет больше номера Yj в последовательности Xn
Например:
Xn : 1 2 3 4 5 6 7 8 9 0
Yn : 1 3 5 7 9
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Michael_Rybak
сообщение 4.11.2006 0:42
Сообщение #3


Michael_Rybak
*****

Группа: Модераторы
Сообщений: 1 046
Пол: Мужской
Реальное имя: Michael_Rybak

Репутация: -  32  +


Цитата(xprogrammer @ 3.11.2006 22:25) *

Подпоследовательностью последовательности (Xn) я имею ввиду любой упорядоченный набор элементов последовательности (yn) где если Yi , yj ( элементы последовательности) и I>j то номер элемента Yi в последовательности Xn будет больше номера Yj в последовательности Xn


О, вот это уже поинтереснее smile.gif

Считаем, что в массиве все числа - от 0 до n-1. Если это не так, то понятно, что можно построить биекцию.

Введем понятие верхних и нижних волнистых подпоследовательностей. Верхней называем такую, у которой последнее число *больше* предпоследнего, нижней - такую, у которой последнее число *меньше* предпоследнего. Подпоследовательности длины 0 и 1 являются и верхними, и нижними одновременно.

Заведем два массива: А[0 .. n-1] и В[0 .. n-1]. Изначально A[i] = B[i] = 0 для всех i.

Идем слева направо по входному массиву (напомню, что все числа в нем - от 0 до n-1). После прочтения каждого числа состояние массивов А и В должно быть таким: A[i] - длина максимальной волнистой верхней подпоследовательности в прочитанном куске, оканчивающейся числом i, B[i] - длина максимальной волнистой нижней подпоследовательности в прочитанном куске, оканчивающейся числом i.

В начале все A[i] = B[i] = 0, потому что еще ничего не прочитано. Теперь, пусть мы прочли число x. В результате могут поменяться только значения A[x] и B[x]. Они станут равны:

A[x] = max(B[0], B[1], B[2], .., B[x-1]) + 1

B[x] = max(A[x+1], A[x+2], A[x+3], .. , A[n - 1]) + 1

Действительно, чтобы с помощью х получить наилучшую верхнюю подпоследовательность, нужно приписать х к наилучшей из найденных нижних подпоследовательностей, оканчивающихся числами, меньшими х. И наоборот.

Пройдя слева направо по всему входному массиву, мы заполним постепенно массивы А и В. Теперь наибольшему из всех чисел в А и В соответствует самая длинная волнистая подпоследовательность. Как ее теперь построить - додумаешь сам.

Вот. Это решение очень легко пишется, и работает за квадрат. Если тебе надо за n log n, разберись с этим, и приходи smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
xprogrammer   Волнистая последовательность   3.11.2006 10:38
Michael_Rybak   Идем слева направо по последовательности, и помним...   3.11.2006 11:06
xprogrammer   нет, вы неправильно мепня поняяли. Подпоследовател...   3.11.2006 23:25
Michael_Rybak   Подпоследовательностью последовательности (Xn) я ...   4.11.2006 0:42
volvo   xprogrammer, а теперь перечитай свой первый пост.....   3.11.2006 23:42
xprogrammer   Волнистые: 1 2 1 2 1 2 1 3 2 6 1 8 4 ...   4.11.2006 0:04
Reflex   Ты помоему не прав биекцию ты непосроишь в последо...   4.11.2006 11:45
lapp   Ты помоему не прав биекцию ты непосроишь в послед...   4.11.2006 12:03
Reflex   тогда я не понимаю почему это алгоритм будет работ...   4.11.2006 13:14
Reflex   не понела как он будет работать на 1-2-1-2-1-2-1 п...   4.11.2006 15:04
Гость   Если честно, не могу врубиться в решение Рыбака - ...   4.11.2006 15:37
Michael_Rybak   Если я не прав - скажите, где :) Прав :) *насви...   4.11.2006 17:21
Reflex   program Problem; {$APPTYPE CONSOLE} uses ...   4.11.2006 15:44
lapp   Reflex, я праввильно понял, что ты выдаешь только ...   4.11.2006 16:02
klem4   Что - то вы тут разшлись, может я что не так понял...   5.11.2006 9:57
lapp   может я что не так понял конечно, вот таккой вари...   5.11.2006 12:24
klem4   Именно, я упустил видимо это ? ? Если да, то и...   5.11.2006 12:26


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.06.2025 6:11
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"