Учитывая строку запроса Q длины N и список L из M последовательностей длины точно N, то какой наиболее эффективный алгоритм найдет строку в L с наименьшим числом позиций несоответствия Q? Например:
Q = "ABCDEFG";
L = ["ABCCEFG", "AAAAAAA", "TTAGGGT", "ZYXWVUT"];
answer = L.query(Q); # Returns "ABCCEFG"
answer2 = L.query("AAAATAA"); #Returns "AAAAAAA".
Очевидным способом является проверка каждой последовательности в L, что делает поиск O (M * N). Есть ли способ сделать это в сублинейное время? Меня не волнует, есть ли большие первоначальные затраты на организацию L в некоторой структуре данных, потому что она будет запрашиваться много раз. Кроме того, обработка привязанных баллов произвольно в порядке.
Изменить: Чтобы уточнить, я ищу расстояние Хэмминга.