Segundo seminário informal (mas formal!) do Grupo de Teoria da Computação Algoritmos Para Pesquisa Aproximada em Palavras Rodrigo Miranda Mestrado em Informática Universidade de Brasília UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Sumário Distância de edição entre duas palavras Algoritmo de programação dinâmica Similaridade e Alinhamento Algoritmo de programação dinâmica com espaço O(n) Acelerando a programação dinâmica com árvores de sufixos Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Distância de Edição entre 2 palavras Dadas duas palavras t e p, definimos a distância de edição D(t, p) entre elas como a quantidade mínima de operações necessárias para transformar t em p ou vice-versa. As operações podem ser: Substituição (Replacement) Inserção (Insertion) Remoção (Deletion) Pareamento (Match) A operação de pareamento não é contada na distância de edição. Valores menores indicam menor distância de edição Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Distância de Edição entre 2 palavras - Exemplo Sejam t= ontologico e p= antologia Podemos transformar t em p com 3 operações: r m m m m m m m r d o n t o l o g i c o a n t o l o g i a E podemos transformar t em p com 3 operações: r m m m m m m m i r a n t o l o g i a o n t o l o g i c o Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Distância de Edição - Cálculo Sejam as palavras p = t1...tm e p = p1...pn Calculamos a matriz D0...m, 0...n onde D(i,j) é a distância de edição entre t1...ti e p1...pj Acrescentamos uma coluna e uma linha (j=0 e i=0, respectivamente) e podemos calcular a matriz com as distâncias de edição entre t e p com o seguinte algoritmo: j , se i 0 D(i, j ) i, se j 0 minD(i 1, j 1)d (i, j ), D(i 1, j ) 1, D(i, j 1), caso contrário onde d (i, j ) 0 se ti p j , ou 1 caso contrário. Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Distância de Edição – Algoritmo O algoritmo pode ser implementado de forma eficiente usando técnicas de programação dinâmica, dadas t e p: Criamos a matriz D0..m,0..n Para i = 0..m faça D[i,0] = i Para j = 0..n faça D[0,j] = j Para i = 1..m faça Para j = 1..n faça Se t[i]=p[j] então d=0 senão d=1 D[i,j]=MIN(D[i-1,j-1]+d,D[i-1,j]+1,D[1,j-1]+1) Podemos recuperar o transcrito de edição acrescentando ponteiros de traceback à matriz. Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Distância de Edição - Exemplo 0 a 1 n 2 t 3 o 4 l 5 o 6 g 7 i 8 a 9 o n t o l o g i 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 2 3 3 4 5 1 2 3 4 5 2 1 2 3 4 3 2 1 2 3 4 3 2 1 2 5 4 3 2 1 6 5 4 3 2 7 6 5 4 3 6 7 8 6 7 8 5 6 7 4 5 6 3 4 5 2 3 4 1 2 3 2 1 2 Algoritmos para pesquisa aproximada em palavras c o 9 10 9 10 8 9 7 8 6 7 5 6 4 5 3 4 2 3 2 3 Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Distância de Edição – Análise do Algoritmo Complexidade de tempo: O(mn) Complexidade de espaço O(mn) para armazenar a tabela de programação dinâmica Para palavras muito grandes (o espaço é limitante: Duas palavras p e t, cada uma com 106 caracteres, o tamanho da matriz será de 106 x 106 = 1012 Se cada caractere ocupar 1 byte de memória, a matriz para p e t ocupará 1 terabyte! Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Similaridade Variação do problema de distância de edição Usamos uma função s(a,b), s:s x sN, e o peso g representando o peso de um espaço (remoção ou inserção). Valores usuais para s(a,b) são -1 se a ≠ b e +1 se a = b, e g = -2 Dadas as palavras t e p, a similaridade será dada por V(t,p) Valores maiores indicam maior similaridade Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Similaridade - Cálculo Dadas as palavras p e t, a função s(a,b) e o peso g de um espaço, calculamos a similaridade V(t,p) sobre a matriz V0...m, 0...n onde V(i,j) é a similaridade entre t1...ti e p1...pj, e V(t,p)=V(m,n): j.g , se i 0 V (i, j ) i.g , se j 0 max V (i 1, j 1) s (t , p ),V (i 1, j ) g ,V (i, j 1) g , caso contrário i j Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Alinhamento Alinhamento global Alinhar as duas palavras de forma completa Usa-se o algoritmo de cálculo da similaridade com os ponteiros de traceback. Alinhamento semi-global (|p| < |t|) Identificar ocorrências da palavra p em t com similaridade mínima k (também podemos dizer com no máximo k diferenças) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Alinhamento Alinhamento local Identificar subpalavras de t e p com alto grau de similaridade, achamos i, j tal que V(i,j)≥k Usamos uma variação do algoritmo de cálculo de similaridade com ponteiros de traceback Alteramos o algoritmo tal que V(i,j)≥0 para todo i=0...m, j=0...n A recuperação dos alinhamentos é feita a partir de cada i,j, seguindo os ponteiros de traceback até que V(i,j)=0 Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Alinhamento Alinhamento Global Alinhamento Local Alinhamento Semi-Global Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Para calcular somente a similaridade (ou distância de edição), é preciso apenas usar 2 linhas da matriz, a corrente e a anterior, de forma que a complexidade de espaço se torna linear. Para recuperar o alinhamento usando espaço linear precisamos usar algumas observações para alterar o algoritmo (Hirschberg) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Dada a palavra s=s1...sn, dizemos que sr=sn...s1 é a palavra reversa de s. Dadas as palavras t e p, definimos Vr(i,j) como a similaridade de tr1... tri e pr1... pr j (ou seja, é a similaridade dos últimos i caracteres de t e os últimos j caracteres de p). Dadas t e p e a matriz V de similaridade, vale a seguinte relação: V(m,n) =max0≤k≤m[V(m/2,k)+Vr(m/2,n-k)] Isso significa que existe uma posição k* entre 0 e mque maximiza V(m/2,k)+Vr(m/2,n-k), ou seja, existe um alinhamento ótimo de t e p passa pela célula V(m/2,k*). Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Primeira parte do Algoritmo Podemos achar k* na linha m/2 da matriz usando O(mn) e O(n) espaço. Usamos o algoritmo de programação dinâmica para calcular V(m/2, k) e Vr(m/2,n-k) O espaço usado é linear porque só precisamos de 2 linhas, incluindo dois conjuntos de ponteiros de traceback Uma vez encontrado k*, na linha m/2, seguimos o primeiro conjunto de ponteiros de traceback a partir de (m/2,k*) até uma célula (m/2 -1, k1) De forma similar, usamos o segundo conjunto de ponteiros de traceback a partir de (m/2,k*) até uma célula (m/2 + 1, k2) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Completando o Algoritmo Até este passo no algoritmo obtivemos 3 pontos do alinhamento ótimo global, e podemos dividir o problema restante em dois subproblemas: i) ii) encontrar o alinhamento ótimo entre t1...tm/2-1 e p1....pk1 encontrar o alinhamento ótimo entre tm/2+1...tm e pk2....pn Cada subproblema pode ser resolvido com o mesmo algoritmo, recursivamente Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Algoritmo Dadas t e p, de tamanho m e n respectivamente AlinhamentoPalavras(t,p,m0,m1,n0,n1,V0,V1) h = (m1-m0)/2 Para j = 0..(n1-n0) faça V0[i] = j*g(), V1[i] = j*g() Para i = 1..h faça Para j = 1..(n1-n0) Calcule a sim. da linha i e mantendo os ponteiros de traceback usando V1 e V0 Repita usando i = m..h (decrementando i) Encontre k* tal que V(h,k*) + Vr(h,n-k*) é máximo Siga os ponteiros de traceback a partir de k* e guarde o subcaminho subcaminho_k* formado desde k1 até k2 (k1 onde o traceback a partir de k* seguir para a linha h-1, k2 onde o traceback a partir de k* seguir para a linha h+2) subcaminho_k1 = AlinhamentoPalavras(t,p,m0,h-1,n0,k1) subcaminho_k2 = AlinhamentoPalavras(t,p,h+1,m1,k2,n1) Retorne o subcaminho concatenando subcaminho_k1, subcaminho_k* e subcaminho_k2, nessa ordem A chamada inicial seria AlinhamentoPalavras(t,p,1,m,1,n,V0,V1) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) 0 0 k1 k* k2 n m/2-1 m/2 m/2+1 m Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Análise do Algoritmo Análise de Tempo O trabalho executado pelo algoritmo é o trabalho da programação dinâmica mais o trabalho de cada chamada recursiva, que nos dá uma relação de recorrência da seguinte forma: T(mn) = mn + T(A) + T(B), onde A e B são os subproblemas Cada A e B corresponde à execução do algoritmo sobre metade das linhas e uma quantidade variável de colunas, mas como as colunas de A e B não se sobrepõe, a quantidade total de colunas de A e B ≤ m, de forma que o trabalho total T(A)+T(B) ≤ T(mn/2). Isso nos dá uma relação de recorrência da forma: T(mn) = mn + T(mn/2) Resolvendo a relação de recorrência chegamos à complexidade de tempo do algoritmo: T(mn) ≤ 2mn Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Programação Dinâmica com espaço O(n) Análise do Algoritmo Análise de Espaço Para o passo de programação dinâmica, precisamos de 2 vetores de O(n) elementos, incluindo os os ponteiros de traceback O alinhamento pode ser armazenado em O(m), onde m≥n O espaço gasto na pilha de execução do algoritmo será O(log2m), porque cada chamada recursiva será feita com metade das linhas anteriores Assim o espaço total S será: S = O(n) + O(m) + O(log2m) = O(m) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Árvores de Sufixo Uma árvore de sufixos T para uma palavra t=t1...tm é uma árvore com raiz com exatamente m folhas numeradas 1 a m Cada nó interno da árvore com exceção da raiz tem pelo menos 2 ramos e cada ramo é rotulado com uma subpalavra de t Se dois ramos partem do mesmo nó de T, então seus rótulos diferem pelo menos no primeiro caractere Para qualquer caminho da raiz até uma folha i de T, a concatenação dos rótulos dos ramos nos dá um i-ésimo sufixo de t (ti...tm) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Árvores de Sufixo Exemplo Árvore de sufixoS para a string GATGACCA$: GA C A TGACCA$ $ CA$ A$ CCA$ 9 $ CCA$ 6 7 1 8 4 TGACCA$ 5 TGACCA$ 3 2 Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Árvores de Sufixo Características Podem ser construidas com tempo O(m) O espaço utilizado também é O(m), embora m seja multiplicado por um fator grande (em geral 14 a 20) A pesquisa de qualquer padrão p=p1...pn leva exatamente n comparações no pior caso, para qualquer tamanho de t Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Dada um texto t e um padrão p, queremos buscar todas as ocorrências de p em t com no máximo k diferenças (substituição, remoção, inserção) Os espaços no fim de t não contam como diferenças Também chamado de alinhamento semi-global Podemos resolver com programação dinâmica em O(mn) Usamos uma árvore de sufixos para acelerar a programação dinâmica (Landau/Vishkin) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Usamos as diagonais da tabela de programação dinâmica A diagonal principal da tabela consiste das células (i,i), para 0 ≤ i ≤ n ≤ m Numeramos as diagonais acima da diagonal principal de 1 a m sendo a diagonal que inicia na célula (0,i) a diagonal i Numeramos as diagonais abaixo de -1 a –n, sendo a diagonal que inicia na célula (i,0) a diagonal -i Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Um d-caminho na tabela de PD é um caminho que inicia na linha 0 e contém um total de d substituições e espaços. Um d-caminho é o mais longo na diagonal i se termina na diagonal i e o índice da coluna onde termina é maior que o de todos os outros d-caminhos que terminam em i Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Diagonais na matriz de Programação Dinâmica Em verde um (d-1)-caminho que é o mais longo na diagonal i 0 i-1 i i+1 Algoritmos para pesquisa aproximada em palavras c Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Temos um d-caminho mais longo na diagonal i, quando d=0, é o maior prefixo comum de ti...tm e p1...pn Se d>0, então obtemos o d-caminho mais longo na diagonal i a partir de 3 (d-1)-caminhos: O (d-1) caminho mais longo na diagonal i-1, extendido em uma célula para a direita para a célula (a,b) O (d-1) caminho mais longo na diagonal i+1, extendido em uma célula para baixo para a célula (c,d) O (d-1) caminho mais longo na diagonal i, extendido em uma célula na diagonal (representando uma substituição) para a célula (e,f) Quando temos todos os k-caminhos mais longos nas diagonais – n a m identificamos todas as posições onde p ocorre em t com no máximo k diferenças Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Diagonais na matriz de Programação Dinâmica Em verde um (d-1)-caminho que é o mais longo na diagonal i 0 i-1 i i+1 Algoritmos para pesquisa aproximada em palavras c Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças – Algoritmo Temos então uma versão em alto nível do algoritmo para resolver o problema da pesquisa aproximada com k diferenças: Para d=0...k faça: Para i = -n ... m faça: A partir do mais longo (d-1) caminho nas diagonais i-1, i e i+1 encontre o mais longo d-caminho na diagonal i Cada caminho que chega à linha n numa coluna c define uma ocorrência de p em t com no máximo k diferenças O que falta é uma maneira eficiente de calcular a extensão máxima na diagonal Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Usando Árvores de Sufixos Construímos uma árvore de sufixos P para p Calculamos em tempo O(m) dois vetores l e q onde l(i) é o comprimento da maior subpalavra de t iniciando na posição i que também é substring de p, e q(i) é a posição inicial de uma dessas subpalavras de p. Fazemos a busca da maior extensão comum de ti...tm e pj...pn buscando o lowest-common-ancestor (lca) das folhas q(i) e j de P, e usando o menor valor entre m(i) e lca(q(i),j). Podemos calcular o lca em P de duas palavras de p em O(1) após pré-processamento de P em tempo O(n) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Usando Árvores de Sufixos Combinando o algoritmo descrito com a capacidade de encontrar a maior extensão comum de duas subpalavras de t e p em tempo O(1) temos que a complexidade de tempo do algoritmo será: Pré-processamento de p e t para gerar os vetores l e q: O(m) Construção da árvore de sufixos P de p: O(n) Pré-processamento de P para obter o lca de duas folhas em tempo O(1): O(n) Algoritmo de pesquisa aproximada O(k(m+n)) = O(km) Logo, temos que a complexidade total de tempo será: O(m + n + km) = O(km) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Usando Árvores de Sufixos A complexidade de espaço sera similar. Os vetores l e q usam espaço O(m) a árvore de sufixos P usa espaço O(n) para guardarmos (m+n) passos dos d-caminhos para k diferentes valores de d temos que o espaço necessário será de O(km) O espaço total será então: O(m + n + km) = O(km) Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Pesquisa aproximada com k diferenças Usando Árvores de Sufixos Algumas observações Na prática, o método só é eficiente para m e n grandes e k < n (Baeza-Yates) Apesar de usar espaço O(km), por usar árvores de sufixo, existe um multiplicador grande de km embutido Precisa ser modificado para tratar o problema de alinhamento (baseado em similaridade) Não resolve para o alinhamento local Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Conclusão Para um determinado problema com solução em programação dinâmica, podemos análisá-lo com cuidado e buscar uma solução que melhor o uso de espaço gastando um pouco mais de tempo Podemos usar técnicas para acelerar a programação dinâmica, combinando estruturas de dados avançadas, realizando a programação dinâmica implicitamente Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004 UNIVERSIDADE DE BRASÍLIA SEGUNDO SEMINÁRIO INFORMAL (MAS FORMAL!) DO GRUPO DE TEORIA DA COMPUTAÇÃO Bibliografia GUSFIELD, Dan. Algorithms on Strings, Trees and Sequences. 1997. Cambridge University Press LANDAU, G. e VISHKIN, U. Introducing efficient parallelism into approximate string matching and a new serial algorithm in Proceedings of the eighteenth annual ACM symposium on Theory of computing. 1986. ACM Press BAEZA-YATES, R. e GONNET, G. 1994. Fast string matching with mismatches in Information and Computation 108, 2, 187-199. Preliminary version as Tech. Rep. CS88-36, Data Structuring Group, Univ. of Waterloo, Sept. 1988. Algoritmos para pesquisa aproximada em palavras Rodrigo Miranda – Outubro/2004