Download as odt, pdf, or txt
Download as odt, pdf, or txt
You are on page 1of 2

Formulera rekursionen (partDist i programmet) s kompakt som mjligt med matematisk notation.

PD(0,m) = m
PD(n,0) = n
PD(n, m) = PD(n-1, m-1) + PD(n-1, m) + PD(n, m-1) + 1
Berkna partDist("labd", "blad", x, y) fr alla x och y mellan 0 och 4 och fr in vrdena i en matris M. Vad blir M?
0 1 2 3 4
1 1 1 2 3
2 2 2 1 2
3 2 3 2 2
4 3 3 3 2
Vad r det allts metoden partDist(w1, w2, x, y) berknar?
Levenshteinavstnd mellan strngarna w1 och w2. Dvs. antal operationer (utbyte, tillgg, borttagning) som behver gras
p w2 fr att f w1. (och egentligen vice versa.)
Visa att tidskomplexiteten fr Distance(w1, w2) r Omega(2^max(n,m)) i vrsta fallet, dr n r antalet bokstver i
w1 och m r antalet bokstver i w2.
D m och n vxer sig riktigt stora grenar sig rekursionen tre gnger per tecken i lngsta strngen. Detta ger en exekvering
p 3^max(n,m). I det fall d ena ordet r ohyggligt lngt, och andra ordet tomt kommer varje rekursivt anrop till partDist
med noll i ena termen exekveras p konstant tid, d det triggar basfallet. Detta ger, i bsta vrstafall en exekvering med tv
frgreningar per tecken i lngsta strngen, och resulterar i Omega(2^max(n,m)).
Visa hur man kan spra vilka editeringsoperationer som grs i den kortaste editeringsfljden frn "labd" till
"blad" genom att titta p matrisen M.
(M(i,j) r rutan i matrisen med de koordinaterna)
Hela kolumen M(4, _) visar att enbart borttagning av a frn strngen "labd" resulterar i fler n en redigering. Detta innebr
att tv av tecknen i "labd" redan str p rtt plats. Tittar man p M(3, 4), "labd" "bla" r det sjlvklart att "d" mste bort, och
"b" flyttas. (en borttagning, ett tillgg), vilket resulterar i tre operationer. nr "d" tillggs p "bla"->"blad" terstr bara flytt
av "b", dvs. tv operationer. Allts r kortaste editeringsfljden frn "labd" till "blad" som fljer:
"labd" -> "lad" (1) -> "blad" (2)

Visa med pseudokod hur rekursionen kan berknas med dynamisk programmering, dvs hur en matris M kan
skapas.
M <- Matrix of size (m, n) initialized to zero
for i = 1 to m
// if first string is empty.
M[i, 0] = i
for j = 1 to n
// if other string is empty.
M[0, j] = j

for x = 1 to n

for y = 1 to m
//if theres no difference in edits from last measured strings
if firstword[x] = secondword[y]
M[x,y] = M[x-1, y-1]
strings
1]+1)

else //if adding letters changed the difference between the


diff <- min( M[x-1, y-1]+1, M[x-1, y]+1,
//smallest of ^swapping
M(x, y) = diff

^removing

M[x, y^adding

//M now contains the correct levenshtein distance matrix

Analysera tidskomplexiteten fr att bestmma editeringsavstndet mellan ett n-bokstavsord och ett m-bokstavsord
med dynamisk programmering.
Algoritmen tar (n + m + n*m + c) , dr c r ngon tid det tar att generera matrisen. Asymptotiskt dominerar termen n*m
vilket ger algoritmen en tidskomplexitet p O(n*m)
Berkna dynprogmatrisen fr editeringsavstndet mellan "labs" och "blad".
0 1 2 3 4
1 1 1 2 3
2 2 2 1 2
3 2 3 2 2
4 3 3 3 3
Vilken del av matriserna fr "labd"-"blad" och "labs"-"blad" skiljer?
Enbart "sista rutan", M[4,4], skiljer d det krvs ett utbyte av "s" -> "d" i det senare fallet.
Allmnt sett, vilken del av matriserna fr Y-X och Z-X skiljer nr orden Y och Z har samma frsta p bokstver?
Generellt, de delar av matrisen dr minst ena indexen r strre n p.

You might also like