Dificuldade ★★☆
3 minutos de Leitura 🕒
O Algoritmo Rabin-Karp é um algoritmo de casamento de padrões criado por Richard Karp e Michael Rabin em 1987. Esse algoritmo funciona deslizando uma janela de comparação pelo texto de entrada e usando uma função de hash para decidir quando uma comparação entre o trecho de texto e o padrão buscado deve ser feita.
O desempenho do Algoritmo Rabin-Karp é impactado pela eficiência da função hash utilizada. O desejado é que essa função possua um curto de computação baixo ao mesmo tempo que gere poucas colisões, evitando assim a verificação de correspondências negativas entre o trechos de texto e o padrão buscado. Algumas funções hash para o Algoritmo Rabin-Karp popularmente usadas são:
Função de Hash Simples: Esta função pode ser implementada como a soma dos valores ASCII dos símbolos no padrão buscado.
Função de Hash Polinomial – Esta função é baseada em polinômios e pode ser implementada como a soma dos produtos dos valores ASCII dos símbolos no padrão buscado por potências de uma base.
Funções de Hash Padrão – Funções de hash como SHA-1, SHA-256 e MD5.
O caso médio para o Algoritmo Rabin-Karp acontece quando o padrão buscado está no texto de entrada e a função de hash utilizada gera poucas colisões, evitando que verificações de correspondências falso positivas sejam feitas. Nesse cenário, o desempenho do algoritmo é linear no número de comparações, em função do comprimento m
do texto de entrada e do comprimento n
do padrão buscado:
O(m + n)
comparaçõesO pior caso para o Algoritmo Rabin-Karp acontece quando o padrão buscado não está no texto de entrada e a função de hash utilizada gera muitas colisões, fazendo com que uma verificação de correspondência seja feita a cada trecho de texto considerado. Nesse cenário, o desempenho do algoritmo é quadrático no número de comparações, em função do comprimento m
do texto de entrada e do comprimento n
do padrão buscado:
O(mn)
comparaçõesVeja o código completo no GitHub.