Sobes.tech
Junior — Middle

Explique o princípio de funcionamento do algoritmo de busca de substrings de Knuth-Morris-Pratt.

sobes.tech IA

Resposta da IA

O algoritmo de Knuth-Morris-Pratt (KMP) destina-se a procurar uma substring numa string em tempo linear, evitando comparações repetidas de caracteres.

A ideia principal é calcular previamente para a substring um array de funções de prefixo (ou "array π"), que mostra quantos caracteres coincidiram com o início da substring numa comparação falhada. Isto permite, em caso de não coincidência, não regressar ao início na string original, mas deslocar a substring pelo número ótimo de posições.

Exemplo:

  • Texto: "ABABDABACDABABCABAB"
  • Procurando a substring: "ABABCABAB"

O algoritmo primeiro constrói a função de prefixo para a substring, depois percorre o texto comparando os caracteres. Em caso de não coincidência, usa a função de prefixo para determinar a partir de qual carácter da substring continuar a comparação, sem começar do início.

Isto garante uma complexidade de O(n + m), onde n é o comprimento do texto, m é o comprimento da substring, sendo mais eficiente do que a busca ingênua.