поиск символьных последовательностей |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
поиск символьных последовательностей |
c-chopper |
Сообщение
#1
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
:low:
Найти наиболее длинную последовательность символов, которая встречается в данном текстовом файле (без переводов строк, размер не более 10 килобайт) более одного раза. единственное, что приходит в голову(пока, по крайней мере) это тупой перебор комбинаций символов. но это неправильно. прошу помощи :molitva: -------------------- artificial intelligence
|
Altair |
Сообщение
#2
|
Ищущий истину Группа: Пользователи Сообщений: 4 825 Пол: Мужской Реальное имя: Олег Репутация: 45 |
Предлагаю такой способ.
Сначала выделяем вообще все подпоследовательности символов (последовательностть символов это более или 2 идущих подряд одинаковых симв), а затем имею все подпоследовательнотсти ищем ту, что нужно. а вот тебе пример как разбить на подпоследовательности: (процедура выделяет подпоследовательности) var s:string; то есть что бы сохранить последовательности надо вместо {*****}writeln(ss);{*****} описать процедуру сохранения где-то (все равно где - список, массив) слова ss... -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Atos |
Сообщение
#3
|
Прогрессор Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
Надо уточнить : имеется в виду последовательность одинаковых символов или последовательность любых символов? В первом случае работает вариант, который дал Oleg_Z, а во втором ... тут всё гораздо интереснее... надо подумать B)
|
c-chopper |
Сообщение
#4
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
Цитата имеется в виду последовательность одинаковых символов или последовательность любых символов? любых, к сожалению как вам такой вариант: сохраняем текст в массив типа char. берём его первый элемент(первую букву текста) и идём по массиву до первого совпадения. далее проверяем совпадают ли символы, следующие за найденными. если да, то запоминаем где-нить полученную последовательность. далее проверяем следующую букву, если совпадает- добавляем её к последовательности, если нет- продолжаем поиск дальше по массиву. большой минус- придётся пробегать по массиву хз сколько раз.... а массив не маленький- 10кб -------------------- artificial intelligence
|
volvo |
Сообщение
#5
|
Гость |
А как это отработает на таком массиве, например:
"abacbcbcbcddabacbcbcbcde" Выдаст подпоследовательность "ab"? Но ведь есть еще "abacbcbcbcd" !!! |
c-chopper |
Сообщение
#6
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
найдёт ab, проверит какая буква следует за b обоих случаях, обнаружит совпадение, добавит найденную букву в получаемую строку и продолжит так дальше до несовпадения. в итоге и должно получиться "abacbcbcbcd"
Сообщение отредактировано: c-chopper - -------------------- artificial intelligence
|
volvo |
Сообщение
#7
|
Гость |
Кстати, посмотри что я нашел: http://www.hardline.ru/1/11/1352/1750-5.html... Почитай, может натолкнет на идею?
|
Atos |
Сообщение
#8
|
Прогрессор Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
Цитата Кстати, посмотри что я нашел: Хорошая статья! Да, и ещё момент тут надо уточнить: последоватьльности могут пересекаться? То есть, считаем мы, что в строке abababa две последовтельности ababa , или нет? |
c-chopper |
Сообщение
#9
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
Atos
необходимо найти самую длинную. в данном случае очевидно только abababa volvo, спасибо. но 10кб текста это около 10000 символов. а BP такие здоровые массивы(10000х10000) не понимает , а с деревьями я вообще ничего не понял -------------------- artificial intelligence
|
volvo |
Сообщение
#10
|
Гость |
Нет, я тебе как раз и дал ссылку, чтобы ты попробовал с деревьями разобраться... С матрицами при таких объемах конечно не получится... Да и просто проходами по массиву (это то же самое, что матрица, только в другой форме...)
|
Atos |
Сообщение
#11
|
Прогрессор Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
Цитата Atos необходимо найти самую длинную. в данном случае очевидно только abababa Так ведь в твоём задании "Найти наиболее длинную последовательность символов, которая встречается <... > более одного раза" Сама abababa, очевидно, только один раз. |
c-chopper |
Сообщение
#12
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
угу... я почему-то решил, что abababa часть строки %)
-------------------- artificial intelligence
|
c-chopper |
Сообщение
#13
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
:fire:
program individualnoe_n14; ета фигня работает в TMT Pascal Lite в районе 1 секунды, а в долбанном BP от 5 до 10 с хвостом. проверять препод будет в борланде. после чего повесит мя на мышином кабеле. SOS если не хотите писать прогу, то хоть популярно растолкуйте алгоритм из приведённой выше ссылки. а то для первого курса сложновато как-то... мы по строкам галопом пробежали... и всяких подстрок с суффиксами и расширениями строки не проходили.... я как только начинаю читать тут же "повисаю" от кол-ва незнакомых терминов... -------------------- artificial intelligence
|
Atos |
Сообщение
#14
|
Прогрессор Группа: Пользователи Сообщений: 602 Пол: Мужской Реальное имя: Михаил Репутация: 9 |
На первый беглый взгляд:
1) Можно открыть файл как нетипизированный с длиной записи 1, и вместо read использовать BlockRead, копируя в массив не по одному символу, а сразу весь файл. Получится чуть быстрее, правда, скорее всего, ненамного. Но и на доли секунды оптимизировать не помешает. 2) Код ^char Зачем??? У тебя и без этого массив динамический. Используя вместо char указатель на char, ты теряешь и время на выделение памяти под каждый символ, и время на переход по адресу в куче при каждом обращении к нему, и до 40 килобайт места в куче (каждый указатель весит 4 байта)3) Чего -то с самим алгоритмом не того... Надо разобраться, он вообще правильно работает? Счас скачаю, попробую у себя посмотреть. Мне самому эта задача интересна, скачал статью по той ссылке, чтобы дома на досуге разобраться, но чего-то не то с кодировкой оказалось c-chopper, тебе к какому дню надо сдать? Попробую сочинить чего-нито. З.Ы. Кстати, всё-таки сомнительно, чтобы от первокурсников требовалось применять деревья в задании. Наверное, уложиться в 1 секунду можно постараться как-нибудь по-другому... |
c-chopper |
Сообщение
#15
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
Цитата Чего -то с самим алгоритмом не того... Надо разобраться, он вообще правильно работает? вроде да.... генерил файл, вставлял туда несколько повторяющихся слов разной длины- всё нашёл правильно(т.е. самое длинное)...Цитата тебе к какому дню надо сдать? 6 июня последний срок(лучше раньше, есессно). а у меня ещё, как говорится, конь не валялся... ну или малость повалялся =) и ушёлЦитата Кстати, всё-таки сомнительно, чтобы от первокурсников требовалось применять деревья в задании. Наверное, уложиться в 1 секунду можно постараться как-нибудь по-другому... требуется... и рекурсия соответственно тоже... в задании правда не оговорено ни время работы прогрраммы, ни средства, но.... это зачёт, поэтому, вероятно, надо бы использовать всё, что изучили... я сегодня это дело попробую выяснить... -------------------- artificial intelligence
|
c-chopper |
Сообщение
#16
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
использовать можно всё, что считаешь нужным.
Сообщение отредактировано: c-chopper - -------------------- artificial intelligence
|
volvo |
Сообщение
#17
|
Гость |
Цитата если не хотите писать прогу, то хоть популярно растолкуйте алгоритм из приведённой выше ссылки. Да пойми ты, что НЕ ДОЛЖЕН тебе никто ничего растолковывать. Иди в "Задачи на заказ", плати деньги, и потом будешь ТРЕБОВАТЬ. |
c-chopper |
Сообщение
#18
|
Группа: Пользователи Сообщений: 9 Пол: Мужской Репутация: 0 |
да ничего я не требую!
я лишь попросил. понятно, что не каждый захочет работать неизвестно для кого и безвозмездно(лень там.. или из принципа)... я и не претендую... просто попросил знатоков растолковать непонятное... а если не так выразился- что ж, извините пожалуйста.... я же никого не заставляю... -------------------- artificial intelligence
|
Текстовая версия | 16.05.2024 10:00 |