IF096 - Algoritmos e Estruturas de Dados
agosto a dezembro de 1999
Exercício 5
Entrega 30/11
1. Escrever um procedimento linear para, dadas duas
cadeias de caracteres do mesmo comprimento n,
A = a1 a2 ... an e
B = b1 b2 ... bn,
determinar se B é uma rotação
de A. Em outras palavras, o procedimento deve
determinar se existe um valor k, 0 < k < n,
tal que ai = b[(k+i) mod n] + 1,
para todo i entre 1 e n.
Dica:
Leia a Seção 10.2 do livro de Udi Manber.
2. O algoritmo KMP pode ser melhorado para cadeias sobre um alfabeto
binário, fazendo uma modificação durante
a construção da tabela next, adicionando o
caracter que não "casou" ao sufixo da parte conhecida do texto.
Em outras palavras, você vai procurar o maior sufixo da
cadeia T(i-1)ci que casa com um prefixo do
padrão (ci
é o complemento do caracter ti do texto.)
Coloque um contador de comparações, e imprima
o seu valor após processar a cadeia.
3. Faça uma modificação do Algoritmo
Minimum_Edit_Distance, da página 158 do
Manber, para dadas duas
cadeias de caracteres A e B, de n e
m caracteres, respectivamente, dizer qual o custo
mínimo de edição e quais os passos para
transformar a cadeia A na
cadeia B com este custo.
4. A maior subsequência comum de duas sequências T
e P é a maior sequência L que é
simultaneamente uma subsequência de T e de P.
A menor supersequência comum de duas sequências T
e P é a menor sequência L tal que
ambas, T e P, são subsequências de
L.
Escreva algoritmos eficientes para encontrar:
A maior subsequência comum de duas sequências T
e P, e
A menor supersequência comum de duas sequências T
e P.
Dica:
Leia sugestão para o problema 6.51 do livro de Udi Manber.