Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Алгоритмы > Поиск закономерностей в последовательности |
Автор: MastEdm 2.5.2010, 13:23 | ||
Добрый день. Есть последовательность символов. В ней нужно попытаться найти закономерности. Интересуют закономерности типа циклов. В простейшем случае точные циклы (то есть точное совпадение символов). Посложнее: "циклы" вида
где x, y, z - подпоследовательности исходной последовательности; a, b, c - некоторые произвольные числа; f - некоторая функция. В случае с точным циклом f(x, a) = x Подскажите, в каком направлении копать? |
Автор: esperanto 3.5.2010, 21:04 |
Наверное если вы спросите на более понятном языке, вам смогут помочь |
Автор: MastEdm 3.5.2010, 21:44 |
Приведу пример: Пусть есть последовательность: 'sdfaqwertyqwertyqwertydsdf'. Алгоритм должен найти в ней повторенную трижды подпоследовательность 'qwerty'. Это случай для "точного цикла" (в кавычках, потому что не знаю как это правильно называется) А для такой последовательности: "zxabcaabcbabcdabceqw" - циклом будет подпоследовательность "abc*", где * - произвольный символ. Уточню также, что подпоследовательностью в данной задаче я считаю подряд идущие символы исходной последовательности. |
Автор: _Y_ 3.5.2010, 23:09 | ||||||
Может стоит покопать в направлении биоинформатики? Например применяется такой способ. Последовательности расставляются в виде заголовков по вертикали и горизонтали, отмечаются одинаковые символы. Вот что получается в первом варианте:
Во втором варианте
Потом смотришь последовательности из крестиков по диагонали. Где последовательность достаточной длины и с малым количеством пропусков, там и сходство. Вот простейший Java код, который это делает:
|
Автор: MastEdm 4.5.2010, 09:02 |
_Y_, спасибо, интересный подход, посмотрю на эту тему. Правда тут сложность квадратичная получается, но по-любому наверное можно соптимизировать ![]() |
Автор: _Y_ 4.5.2010, 10:17 | ||
Наверное. Это же алгоритм в основном для визуализации. Что знал - доложил ![]() |