Na ciência da computação, o algoritmo Hunt-Szymanski,[1][2] também conhecido como algoritmo Hunt-McIlroy, é uma solução para o problema de maior subsequência comum. Foi um dos primeiros algoritmos não heurísticos usados no diff. Até hoje, variações desse algoritmo são encontradas em sistemas de controle de versão incrementais, software wiki e softwares de pesquisa da filogenética molecular.
O pior caso de complexidade para este algoritmo é , mas na prática é esperado[3][4]
A descrição do algoritmo surgiu como um relatório técnico por Hunt e McIlroy. No ano seguinte, uma variação do algoritmo foi publicada em um artigo em conjunto de Hunt e Szymanski.
Algoritmo
O algoritmo Hunt-Szymanski é uma modificação da solução básica ao problema da maior subsequência comum, de complexidade . A modificação precisa de menos espaço e menos tempo para as entradas típicas.
Consideremos que seja a i-ésima linha do primeiro arquivo
E que seja a j-ésima linha do segundo arquivo.
Então será o tamanho da maior subsequência comum para as primeiras linhas do primeiros arquivo e as primeiras linhas do segundo arquivo
Exemplo
Uma tabela mostrando os passos que um algoritmo básico de maior subsequência comum deve fazer.
Considere os arquivos e
contém essas 3 linhas:
E contém essas outras 3:
Os passos que o algoritmo deve seguir para determinar o tamanho da maior subsequência comum para ambos os arquivos são mostrados no diagrama. O algoritmo mostra corretamente que a maior subsequência de ambos os arquivos são 2 linhas.
Complexidade
O primeiro algoritmo tinha no pior caso uma complexidade de tempo e espaço de (veja a notação grande-O), onde é o número de linhas do arquivo e é o número de linhas para um arquivo . Enquanto o algoritmo de Hunt-Szymanski tem no pior caso uma complexidade de tempo de e uma complexidade de espaço de , embora ele supere regularmente o pior caso com entradas típicas
↑Szymanski, T. G. (1975) A special case of the maximal common subsequence problem. Technical Report TR-170, Computer Science Lab., Princeton University.