У меня очень длинная последовательность бит, называемая A
, и более короткая последовательность бит, x
. Двухбитовые последовательности одинаковой длины нечетко согласованы, когда после их выравнивания есть k
или меньшее количество несоответствующих бит. Я хочу найти все такие нечеткие вхождения x внутри A.
До сих пор я пробовал наивный подход. Переходите через A, затем для каждого бита, проведите по длине x, подсчитайте количество несоответствующих битов, начинающихся в этой позиции в A, и если оно не превышает k, сообщите об этой позиции. Этот алгоритм неэффективен. Если A имеет бит n_A, а x имеет n_x бит, время работы O(n_A * n_x)
.
Мне сказали, что это можно сделать в O(n_A * log(n_A))
независимо от k
. Предоставленная подсказка - использовать быстрое преобразование Фурье. Помните, что для двух входов и свертка создает , где
аналогично многочленному умножению. Мне непонятно, как использовать этот намек. Любая помощь приветствуется.