Вопрос к программистам

Jan 27, 2022 14:17


Как правильно называется (или, иными словами - что мне забивать в поисковик ) следующая задача: нужно найти общее подмножество (или подмножества) в двух произвольных строках символов. Например: абыверлаг - кудывермак, ититьеготак - майнготизтит.
Понятно что-то придумать самому можно, но возможно есть какие-то наработки которые позволяют ( Read more... )

Leave a comment

Comments 10

a_p January 27 2022, 14:36:56 UTC
Этой задачей постоянно занимаются биоинформатики (ищут общие последовательности в длинных цепочках). Ключевые слова можно посмотреть вот тут, например: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1637039/.

Ещё, по-моему, может помочь внимательное изучение хорошей реализации grep :)

Reply

yuriyag January 27 2022, 15:03:47 UTC
Спасибо, но grep мне кажется не совсем подходит. grep это поиск заданной последовательности, а у меня в задаче нет никакой заданной заранее последовательности, её нужно как раз найти, сравнивая две произвольные цепочки.
Попробую посмотреть статью (с первого взгляда выглядит страшновато :))))

Reply

a_p January 27 2022, 15:32:03 UTC
мне кажется некоторой неизбежностью последовательный поиск подпоследовательностей одной цепочки в другой.
Кстати, а какова там длина алфавита? В смысле, в твоей задаче последовательности реально составлены из 26 букв?
Точнее, меня интересует вопрос отношения длины алфавита и длины входных последовательностей.

Вообще, можно просто вычитать одну из другой побуквенно с разными сдвигами и участки, соответствующие группам нолей в результате, и будут искомыми общими подпоследовательностями. Это квадратичный метод, но мне что-то непонятно, как быстрее (можно закольцевать длинную строку для некоторого уменьшения циклов сдвига).

Reply

yuriyag January 27 2022, 16:01:36 UTC
Спасибо!
Смотри ещё какyю прелесть мне Тома насоветовала: Https://qastack.ru/codegolf/182134/greatest-common-substring

Reply


Leave a comment

Up