КМП. В этой реализации понятны почти все пункты, за исключением того момента когда мы в случае неравенства букв в позициях m и i и неравенства переменной m нулю, назначаем ей значение из массива по индексу на единицу меньшую: m = aux[m-1]. Почему просто его не обнулить?
def lsp_table_creator(W):
aux = [0] * len(W)
i = 1
m = 0
while i < len(W):
if W[i] == W[m]:
m += 1
aux[i] = m
i += 1
elif W[i] != W[m] and m != 0:
m = aux[m-1]
else:
aux[i] = 0
i += 1
return aux
Если обнулить, неправильно посчитаешь функцию для строки abaa
А в чем смысл этого присваивания m=aux[m-1] простыми словами?
Мы поняли, что самый длинный префикс нам не подходит, поэтому теперь мы пробуем продолжить префикс префикса, и так далее
Обсуждают сегодня