Этого треда уже нет.
Это копия, сохраненная 4 декабря 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
30 Кб, 820x387
A, G, T, C substring, Min hamming distance биоинформатик #565400 В конец треда | Веб
Задали задачу, про _неточный_ поиск подстроки s2 в строке s1
Я прочитал в вики про https://en.wikipedia.org/wiki/Approximate_string_matching
И по ссылкам оттуда, например Bitap

Но это не подошло. У этих алгоритмов сложность порядка |s1| * |s2|, а требуется O(n log(n)). Что такое правда неясно, но наверное имели ввиду длину |s1|.
Есть всякие алгоритмы быстрого поиска подстрока в строке за O(N) и O(N-1), но в требуется полное совпадение, а не нахождение максимального.
Каким алгоритмом можно решить такую задачу? Есть ли ключевые слова для гугла? ( fuzzy search, как видно я попробовал, но неудачно, находятся алгоритмы сложнее чем просят ).

Писать за меня код не надо, я просто не знаю в какую сторону думать

--------------------------------------------
Условие задачи:

Известно, что каждая клетка организма человека содержит ДНК, которая представляет из себя цепочку нуклеотидов, кодируемых символами A, G, T, C, и, кроме того, что эти цепочки у близких родственников должны быть похожими.
Для определения того, принадлежат ли два заданных ДНК s1 и s2 близким родственникам, вам нужно решить следующую задачу. Необходимо найти такую позицию i (позиции нумеруются с единицы) в строке s1, что, если приложить s2 к s1, начиная с позиции i, то, во-первых, каждому символу s2 будет соответствовать какой-то символ s1 (то есть s2 не выйдет за пределы s1), а во-вторых, количество соответствующих друг другу совпадающих символов в s1 и s2 будет максимально возможным. Другими словами, мощность множества {j: s2[j] = s1[j+i]} — максимально возможная из всех таких i. Если таких позиций i несколько, найдите первую из них.
Решение должно работать за O(n log n) в худшем случае

ввода: На входе две непустые строки s1 и s2 длины не более 200 000, причем s2 не длиннее, чем s1.
вывод: Выведите номер искомой позиции.
#2 #565403
Я б построил сначала словарь всех возможных вхождений до определённой длины (например первые двойки-тройки-четвёрки) и прошёл бы по второй строке. Получился бы список кандидатов на детальное сравнение.
#3 #565416
Если посчитать кросс-корреляцию через преобразование Фурье, будет как раз n*log(n).
#4 #565435
>>565400 (OP)
Может попробуешь префиксое дерево?
#5 #565491
Longest Common Subsequence
#6 #565931
См. >>565929 няша.
#7 #578175
>>565400 (OP)
Ну что, ОП, зашла задача? Я чето втыкаю сижу, а осталось 4 часа всего.
Тред утонул или удален.
Это копия, сохраненная 4 декабря 2015 года.

Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее

Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
« /pr/В начало тредаВеб-версияНастройки
/a//b//mu//s//vg/Все доски