Нечеткое согласование бит

У меня очень длинная последовательность бит, называемая 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. Предоставленная подсказка - использовать быстрое преобразование Фурье. Помните, что для двух входов enter image description here и enter image description here свертка создает enter image description here, где

qqn

аналогично многочленному умножению. Мне непонятно, как использовать этот намек. Любая помощь приветствуется.

Ответ 1

Обратный x, замените каждый бит b на (-1) ** b и сверните. Я позволю вам объяснить вашу домашнюю работу, что делать дальше.