Скорее нет. На Харьковских сборах по программированию была задачка про короля и принца: нужно было узнать, является ли принц его сыном. Для этого требовалось вывести максимумальное число совпадающих символов при всех циклических сдвигах (например, для ATTA и TGAA это число — 3).
Не знаю, коррелирует ли это как-то с биологией. Думаю, что нет.
Просто думаю, что там всё-таки не циклические сдвиги, а что-нибудь другое. Например, где-нибудь квадраты вылезут (количество совпадающих A в квадрате, умножить на 17 плюс еще-что-нибудь).
это несложная задача — одну строку удваиваем, и ищем в ней вторую например используя «Префикс-функция. Алгоритм Кнута-Морриса-Пратта» e-maxx.ru/algo/prefix_function
Либо я не понял алгоритм, либо Вы не поняли задачу.
Например, есть строки ATTA и TGAA. Удвоили первую: ATTAATTA
И вот ответ в задаче: ATTAATTA
*TGAA***
Не дописал:
КМП «споткнётся» на символах T/G и не станет дальше проверять. Если бы требовалось найти сдвиг такой, что строки совпадут, да — КМП бы рулил.
да… что-то я непонял задачу
теперья ее понял и вот мой вариант решения:
удвоить и первую и вторую строку и найти «наибольшую общую подпоследовательность» и поделить это число на 2
Если будет плохо работать с double (хотя там в комментариях пишут, что получили ОК) — можно пробовать long double. А еще я в следующем топике расскажу, как писать FFT в целых числах.
Еще из оптимайзов по длинной арифметике есть следующий: сделать базу не 10, а, например 103. Тогда «длина» числа сокращается в три раза, а операции выполняются с такой же скоростью — это существенно.
эй, то что автор топика освоил содержание первых двух курсов университета, ещё не делает его учёным! освоить линейную алгебру и математический анализ может каждый!
Использовал как-то БПФ в реализации длинной арифметики, умножение чисел. Выгода по времени начиналась где-то с 1000 битных числел по основанию 32, т.е. для многочленов это с 32 коэфициентами.
Я лично люблю в учебных целях — развивает мозг и выпрямляет руки.
Да и на олимпиадах библиотеки особо не поюзаешь. К тому же всегда интересно, как работает. Иногда даже можно какую-нибудь функцию обогнать.
Хорошая статья! Хотя всё это уже знал из университетского курса, было интересно посмотреть на эволюцию программы на C++.
Неплохо было бы в конце статьи сослаться на книжки Кормена и др. «Алгоритмы: построение и анализ» и Уоррена «Алгоритмические трюки для программистов» для заинтересовавшихся темой.
Надеюсь, не забросите это дело и расскажете побольше об интересных применениях БПФ.
На отборочном туре facebook hackercup предшествующем онсайту сего мероприятия была задача которая решалась БПФ. Никогда не забуду эти 1.5 часа написания и отладки. Наизусть я эту штуку не знал, да еще голова болела адски, да еще с нуля писал, на яве. Но она прошла и я побывал в калифорнии ^_^
Быстрое умножение многочленов при помощи преобразования Фурье — это просто