Algoritmo Hunt-Szymanski

Origem: Wikipédia, a enciclopédia livre.

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]

História[editar | editar código-fonte]

O algoritmo foi proposto por Harold S. Stone como uma generalização do caso especial resolvido por Thomas G. Szymanski. James W. Hunt refinou a ideia, implementando a primeira versão do algoritmo proposto usado pelo diff em um modelo mais antigo de Douglas McIlroy[5][6][7]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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[editar | editar código-fonte]

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

Referências[editar | editar código-fonte]

  1. «The Hunt-Szymanski Algorithm for LCS» (PDF). Department of Mathematics and Computer Science, University of Southern Denmark. 12 de janeiro de 2017 
  2. Grabowski, Szymon (2016). «New tabulation and sparse dynamic programming based techniques for sequence similarity problems». Discrete Applied Mathematics. 212 (C): 96-103. ISSN 0166-218X 
  3. Aho, A.; Hirschberg, D.; Ullman, J. (1976). «Bounds on the Complexity of the Longest Common Subsequence Problem» (PDF). Journal of the ACM. 23 (1): 1-12. ISSN 0004-5411 
  4. See Section 5.6 of Aho, A. V., Hopcroft, J. E., Ullman, J. D., Data Structures and Algorithms. Addison-Wesley, 1983. ISBN 0-201-00023-7
  5. Hunt, James W.; McIlroy, M. Douglas (junho de 1976). «An Algorithm for Differential File Comparison» (PDF). Bell Laboratories. Computing Science Technical Report. 41 
  6. Imre Simon (2 de abril de 1988). «Sequence Comparison: Some Theory and Some Practice». Universidade de São Paulo 
  7. Szymanski, T. G. (1975) A special case of the maximal common subsequence problem. Technical Report TR-170, Computer Science Lab., Princeton University.