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

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

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

> алгоритмы поиска
сообщение
Сообщение #1


Пионер
**

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

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


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


Пионер
**

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

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


Спасибочки большое!!!)))
ну да, это уже все сложно, но ради интереса попробую разобраться)))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

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


Цитата(*оля* @ 21.05.2010 20:57) *
это уже все сложно, но ради интереса попробую разобраться)))
Ты обязательно попробуй, но сначала я бы советовал разобраться с тем, что ты сама сделала )). Можно дать несколько советов?

Посмотри - это твой код, немного улучшенный:
const
n=10;
var
a,b: array [1..n] of integer;
i,j,k,kmax: integer;

begin
for i:=1 to n do read(a[i]);
for j:=1 to n do read(b[j]);
kmax:=0;
for i:=1 to n do
for j:= 1 to n do begin
k:=0;
while a[i+k]=b[j+k] do Inc(k);
if k>kmax then kmax:=k
end;
writeln(kmax)
end.

Далее, в порядке "прихода в голову", а не в порядке важности:

1. Всегда старайся избегать явного указания чисел в программе, заводи константы (у меня - n).

2. Почему у тебя по i цикл while, а по j - for?

3. ВСЕ переменные перед использованием должны быть инициированы (у тебя не инициированы k и kmax).

4. Твои if и while внутри цикла выполняют выполняют одну и ту же функцию - объедини их )).

5. Избегай лишних переменных.

6. Не нужно дважды объявлять один тип там, где это _не_нужно_. Формально твои а и а1 принадлежат к разным типам. Тут это не важно, но в принципе может вызвать проблемы.

7. форматирование кода - не для красоты, оно имеет четкие правила, которых необходимо придерживаться - иначе утонешь в коде большем, чем одна страница.. Возьми за пример мой код, попробуй вывести правила из его формата.

А вообще - +1 за то, что сама решаешь )).


--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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


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

 





- Текстовая версия 5.05.2024 21:18
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name