Distância Mínima de Edição
Profa. Sandra de Amo
Bacharelado em Ciência da
Computação - UFU
Problema de otimização a resolver
Dadas duas palavras w1 e w2 determinar o quão próximas elas são.
Que medida utilizar para determinar a distância entre duas palavras ?
Medida natural e intuitiva: o custo de alinhar as palavras, isto é, o
custo de colocar uma sobre a outra, combinando letra a letra.
Exemplo:
w1 = SNOWY
w2 = SUNNY
• Qual o custo de transformar w1 em w2 ?
• Existem diversas maneiras de fazer isto, cada uma tendo um custo.
• Precisamos encontrar a maneira com custo mínimo
Exemplos de transformações e
seus respectivos custos
S
_ N O
W Y
S
U N N
_
Y
_ S
N O
S U N
_
W
_ Y
_
N Y
= match !!
= match !!
= inserção (I)
=1
= inserção (I)
=2
= deleção (D)
=1
= deleção (D)
=2
= substituição (S)
=1
Custo = 3
= substituição (S)
=1
Custo = 5
Distância de Edição
• Dist_edit (w1,w2) = menor custo de se transformar
w1 em w2
• Método “força bruta” para determinar Dist_edit
– Todo problema de otimização tem solução do tipo “força bruta”
• Considera-se todas as possiveis maneiras de se transformar
w1 em w2
• Calcula-se o custo de cada maneira
• Considera-se o menor custo
• Solução eficiente: usando Programação Dinâmica !
Aplicações
• Como corrigir automaticamente uma palavra w mal escrita ?
– Verifica-se em um dicionário se a palavra w existe.
– Caso não exista, constrói-se uma lista de palavras do dicionário que
estão próximas (no dicionário) = [ w1, w2, ... , wn]
– Calcula-se para cada wi, dist_edit(w, wi)
– Sugere-se o wi com menor dist_edit(w,wi)
• Exemplo:
w = graf
Palavras próximas: grafo, girafa, garra, grafite
Qual a mais próxima ?
• Como determinar se um determinado texto w1 é plágio de um outro
texto w2 ?
– Se dist_edit(w1,w2) < K, onde K é dado
Aplicações
• Biologia Computacional:
– Como alinhar duas sequências de nucleotídeos ?
Resultado do alinhamento
Problema de otimização a resolver
Problema P:
Input: dois strings x = (x1,...,xn), y = (y1,...,ym)
Output: x’ = (x’1,...,x’k), y’ = (y’1,...,y’k), k ≥ m, tal que custo(x’,y’) é
minimo (= dist_edit(x,y) )
x’1 x’2
y’1 y’2
x’3
y’3
x’k
y’k
Custo(x’,y’) = Σi=1k custo(x’i,y’i)
Custo(xi,yi) = 1 se x’i =‘-’ e y’i = yp (inserção de caracter yp)
ou x’i = xp e y’i = ‘-’ (remoção de carater xp)
ou x’i  y’i e ambos  ‘-’
Custo(xi,yi) = 0 se x’i = y’i
Como projetar o algoritmo de PD para
resolver o problema P ?
Problema P
• E(n,m) = custo mínimo do alinhamento
• Subproblemas E(i,j), com i ≤ n, j ≤ m
• Como ordenar os subproblemas ?
• Como resolver completamente cada subproblema, em
ordem crescente, executando uma função que envolve
os resultados dos subproblemas já resolvidos
anteriormente ?
0
0
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
I
A
L
E(11,10) = custo minimo de um alinhamento
3 possibilidades de alinhamento
0
1)
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
0
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
I
A
L
3 possibilidades de alinhamento
0
1)
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
0
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
I
A
L
Custo = diff(x[11], y[10] ) +
+ CUSTO de alinhar prefixos (EXPONENTIA, POLYNOMIA) =
= 0 + E(10, 9)
3 possibilidades de alinhamento
0
2)
0
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
A
L
I
-
3 possibilidades de alinhamento
0
2)
0
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
A
L
I
-
Custo = 1 + CUSTO de alinhar prefixos (EXPONENTIA, POLYNOMIAL) =
= 1 + E(10, 10)
3 possibilidades de alinhamento
0
3)
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
-
0
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
I
A
L
3 possibilidades de alinhamento
0
3)
1
2
3
4
5
6
7
8
9
10
11
E
X
P
O
N
E
N
T
I
A
L
-
0
1
2
3
4
5
6
7
8
9
10
P
O
L
Y
N
O
M
I
A
L
Custo = 1 + CUSTO de alinhar prefixos (EXPONENTIAL, POLYNOMIA) =
= 1 + E(11, 9)
Fórmula
E(m,n) = min {diff(x[m],y[n]) + E(m-1,n-1), 1 + E(m,n-1), 1+ E(m-1,n) }
primeiro alinh.
seg. alinh.
terc. alinh.
Em geral:
E(i,j) = min { diff(x[i],y[j]) + E(i-1,i-1), 1 + E(i,j-1), 1+ E(i-1,j) }
Em que ordem resolver os
subproblemas ?
Soluções dos subproblemas
Algoritmo e sua complexidade
Complexidade = O(m) + O(n) + O(m.n) = O(m.n)
Um alinhamento com custo mínimo
=6
E
X
- -
P
O
N
E
N
-
T
P
O
L
Y
N
O
M
I
I
A
L
A
L
Como obter todos os alinhamentos com custo minimo
só olhando para o quadro dos custos ?
Download

Distância Mínima de Edição