yuriyag: (Default)
[personal profile] yuriyag

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


[Дисклаймер: сорри если спрашиваю что-то тривиальное, никогда подобными задачами раньше не занимался]

Date: 2022-01-27 02:36 pm (UTC)
a_p: (Default)
From: [personal profile] a_p
Этой задачей постоянно занимаются биоинформатики (ищут общие последовательности в длинных цепочках). Ключевые слова можно посмотреть вот тут, например: https://www.ncbi.nlm.nih.gov/pmc/articles/PMC1637039/.

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

Date: 2022-01-27 03:03 pm (UTC)
From: [identity profile] yuriyag.livejournal.com
Спасибо, но grep мне кажется не совсем подходит. grep это поиск заданной последовательности, а у меня в задаче нет никакой заданной заранее последовательности, её нужно как раз найти, сравнивая две произвольные цепочки.
Попробую посмотреть статью (с первого взгляда выглядит страшновато :))))

Date: 2022-01-27 03:32 pm (UTC)
a_p: (Default)
From: [personal profile] a_p
мне кажется некоторой неизбежностью последовательный поиск подпоследовательностей одной цепочки в другой.
Кстати, а какова там длина алфавита? В смысле, в твоей задаче последовательности реально составлены из 26 букв?
Точнее, меня интересует вопрос отношения длины алфавита и длины входных последовательностей.

Вообще, можно просто вычитать одну из другой побуквенно с разными сдвигами и участки, соответствующие группам нолей в результате, и будут искомыми общими подпоследовательностями. Это квадратичный метод, но мне что-то непонятно, как быстрее (можно закольцевать длинную строку для некоторого уменьшения циклов сдвига).
Edited Date: 2022-01-27 03:34 pm (UTC)

Date: 2022-01-27 04:01 pm (UTC)
From: [identity profile] yuriyag.livejournal.com
Спасибо!
Смотри ещё какyю прелесть мне Тома насоветовала: Https://qastack.ru/codegolf/182134/greatest-common-substring
Edited Date: 2022-01-27 04:36 pm (UTC)

Date: 2022-01-27 05:09 pm (UTC)
a_p: (Default)
From: [personal profile] a_p
Ну там это скорее упражнение на знание встроенного функционала (или библиотек) разных языков ("составим массив всех подстрок данной входной строки" :). Я бы от всех примеров там (включая С#) ожидал гораздо более медленного исполнения, чем С или С++ имплементации лобового квадратичного, который я описал.

Date: 2022-01-27 05:36 pm (UTC)
From: [identity profile] yuriyag.livejournal.com
Мне изначально нужно было как раз для С++. Нужно будет подумать ).

Date: 2022-01-28 05:25 pm (UTC)
From: [identity profile] yuriyag.livejournal.com
Не сразу сообразил (хотя это очевидно) что когда они пишут "Japt v2.0a0 -hF, 8 байт", то речь идёт о длине строки программы, а уж никак не машинного кода.. ))

Date: 2022-01-28 05:39 pm (UTC)
a_p: (Default)
From: [personal profile] a_p
ага, там используются функции работы со строками (или вообще со списками — в Хаскелле, например).

Date: 2022-01-27 04:43 pm (UTC)
From: [identity profile] yuriyag.livejournal.com
Фантастика! Там можно проиграть код онлайн, я вставил мои примеры — работает!
от же ж люди, иттить

Date: 2022-01-27 05:11 pm (UTC)
a_p: (Default)
From: [personal profile] a_p
сайт отлично сделан, точно

Profile

yuriyag: (Default)
yuriyag

October 2025

S M T W T F S
    1234
567891011
12131415161718
19202122232425
262728293031 

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Mar. 25th, 2026 04:27 am
Powered by Dreamwidth Studios