Объединение совпадающих фрагментов неизвестной строки - PullRequest
3 голосов
/ 06 марта 2020

Я разгадываю загадку, и у меня есть несколько кусочков большой числовой строки c. Первоначально они казались случайными, но через некоторый частотный анализ я узнал, что все они являются кусочками большой строки.

Проблема в том, что эти кусочки могут содержать отдельные части большой строки, но не содержат информацию о том, где они расположены и могут содержать даже отдельные подстроки. Например:

text: 0102030405060708091011121314151617181920
slice 1: 010203041516171819
slice 2: 030405060717181920
slice 3: 060708091011121314
slice 4: 040506071213141516

Обратите внимание, что, сдвинув слайсы, я могу восстановить исходный текст:

slice 1: 01020304                    1516171819
slice 2:     0304050607                  17181920
slice 3:           060708091011121314
slice 4:       04050607        1213141516

Поскольку исходный текст может состоять из сотен или даже тысяч цифр, выполнение этого вручную очень тяжело и отнимает много времени. У меня есть коллекция из 80 фрагментов, и они должны создать объединенную строку, которая является исходным текстом, которого у меня нет.

Я искал некоторые алгоритмы сопоставления строк, такие как самая длинная общая подстрока, но они не покройте разделение ломтиков, чтобы попробовать и соответствовать. Кроме того, алгоритмы сравнения, как правило, не поддерживают слияние нескольких строк одновременно, и два среза содержат слишком мало общего, чтобы это было полезно, обычно давая ложные совпадения, которые в будущем не удаются.

1 Ответ

0 голосов
/ 06 марта 2020

Я бы прокомментировал, если бы у меня была репутация, но эта проблема выглядит аналогично сборке генома из большого количества небольших секвенированных фрагментов. Не уверен, что это новейшая технология, но графики Де Бруджина - это то, как меня учили это делать.

Этот вопрос (о сборке генома - но опять же, возможно, применимый) может помочь: http://rosalind.info/problems/grep/

И подмножество вопросов Розалинд о графах де Бруджина http://rosalind.info/search/?q=%20bruijn

...