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

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

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

> алгоритмы поиска
*оля*
сообщение 16.05.2010 18:37
Сообщение #1


Пионер
**

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

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


если даны два списка чисел и нужно найти наибольшую одинаковую последовательность чисел, например, если дано:
1 2 3 4 5 6
1 2 6 2 3 4
то должен вывести 234
подскажите пожалуйста, каким алгоритмом тут лучше воспользоваться?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 27.05.2010 12:36
Сообщение #2


Гость






*оля*, а причина - тривиальна, и Андрей уже говорил о ней: обнулить kmax надо. Если б ты это сделала в программе, то при оборачивании куска программы циклом, задумалась бы, а не надо ли инициализацию переменной делать внутри цикла. А так - нет и нет ее, и ничего не приходит в голову... Все просто:

{ Вот начало твоего цикла }
sum := 0;
repeat

kmax := 0; { <--- Фокус вот в этом !!! }

p := L.first;
{ ... }

Добавляешь инициализацию и все работает.

Теперь - почему это НЕ работало без обнуления переменной... Хотя нет. Давай, не я расскажу тебе, почему это не работало, а ты разберешься и расскажешь? Договорились?

Добавлено через 7 мин.
P.S. Если тебе надо удалять подпоследовательность из обоих списков - я бы вынес этот код в отдельную процедуру и вызывал бы ее дважды с разными параметрами. Так будет лучше.
 К началу страницы 
+ Ответить 
*оля*
сообщение 28.05.2010 19:07
Сообщение #3


Пионер
**

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

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


Цитата(volvo @ 27.05.2010 12:36) *

Добавляешь инициализацию и все работает.


да, действительно работает!)
Цитата(volvo @ 27.05.2010 12:36) *

Теперь - почему это НЕ работало без обнуления переменной... Хотя нет. Давай, не я расскажу тебе, почему это не работало, а ты разберешься и расскажешь? Договорились?


yes2.gif , просто мы каждый раз искали наибольшую общую подстроку заново, и поэтому на входе kmax должно было ровняться 0, а до исправления ошибки оно в начале цикла ровнялось длине предыдущей подстроки. И следовательно условие k > kmax не может больше выполниться.
Ну вот, наверное, так)

Спасибо большое, я эту ошибку без вашей помощи не нашла бы!)

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
*оля*   алгоритмы поиска   16.05.2010 18:37
*оля*   попробовала написать программу для 2х массивов, к...   16.05.2010 20:48
volvo   Это задача о Наибольшей Общей Подпоследовательност...   16.05.2010 21:32
TarasBer   > не подскажете где ошибка? Ну, например, что...   17.05.2010 13:49
*оля*   в другой книге написано в одной строчке по-другому...   18.05.2010 21:34
TarasBer   > в другой книге написано в одной строчке по-др...   19.05.2010 9:34
*оля*   все, в своем не совсем удачном алгоритме нашла еще...   19.05.2010 12:12
TarasBer   > Поэтому не могу найти алгоритм, который подой...   19.05.2010 12:44
*оля*   Пока что есть O(m*n*min(m,n)), короче кубическая...   19.05.2010 21:40
TarasBer   А, в википедии же есть аналогичный алгоритм, но ка...   20.05.2010 9:52
TarasBer   http://e-maxx.ru/algo/suffix_automata Тут уже за ...   20.05.2010 15:02
*оля*   Спасибочки большое!!!))) ну да, это у...   21.05.2010 19:57
Lapp   это уже все сложно, но ради интереса попробую разо...   22.05.2010 4:21
*оля*   Можно дать несколько советов? Буду только бла...   22.05.2010 11:35
*оля*   что-то совсем у меня со списками ничего не получае...   23.05.2010 15:45
volvo   Естественно. Вот при работе со списками как раз ну...   23.05.2010 16:09
*оля*   [code=pas] p := L.first; while p <> nil ...   24.05.2010 15:28
*оля*   Спасибо большое!!! теперь все стало го...   23.05.2010 16:20
volvo   *оля*, тут возможны 2 варианта... Первый (я буду ...   24.05.2010 16:39
*оля*   volvo, вы как всегда меня спасаете, спасибо большо...   24.05.2010 19:34
volvo   А что будет делать этот цикл, расскажешь? Чего ты ...   24.05.2010 19:55
*оля*   А что будет делать этот цикл, расскажешь? Чего ты...   24.05.2010 20:00
volvo   Ну, так и будет, если не ошибаюсь: sum := 0; repe...   24.05.2010 20:30
*оля*   Ну, так и будет, если не ошибаюсь: [code=pas]sum...   25.05.2010 17:57
volvo   Полный код (в виде PAS-файла) присоедини, посмотри...   25.05.2010 18:09
*оля*   Полный код (в виде PAS-файла) присоедини, посмотр...   25.05.2010 19:07
volvo   *оля*, а причина - тривиальна, и Андрей уже говори...   27.05.2010 12:36
*оля*   Добавляешь инициализацию и все работает. да, д...   28.05.2010 19:07
Lapp   Спасибо большое, я эту ошибку без вашей помощи не...   29.05.2010 1:32
*оля*   А между тем, на нее было указано еще в посте №13....   1.06.2010 8:10


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

 



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