Edit-Distanz
JanisVoigtländer
TehnisheUniversitätDresden
Sommersemester 2007
Problemstellung
Formalisierung
Eziente Berehnung
Retraing
void sort(int L,int R)
{ int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄;
do
{ while (a[i℄<x) i++;
while (a[j℄>x) j--;
...
void sort(int L,int R)
{ int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄;
do
{ while (a[i℄<x) i++;
while (a[j℄>x) j--;
...
void sort(int L,int R)
{ int i,j,w,x,k;
i=L; j=R;
k=(L+R)/2; x=a[k℄;
do
{ while (a[i℄<x) i++;
while (a[j℄<x) j--;
...
void sort(int L,int R) | void sort(int L,int R)
{ int i,j,w,x,k; | { int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄; | i=L; j=R;
do | k=(L+R)/2; x=a[k℄;
{ while (a[i℄<x) i++; | do
while (a[j℄>x) j--; | { while (a[i℄<x) i++;
... | while (a[j℄<x) j--;
| ...
void sort(int L,int R) | void sort(int L,int R)
{ int i,j,w,x,k; | { int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄; | i=L; j=R;
do | k=(L+R)/2; x=a[k℄;
{ while (a[i℄<x) i++; | do
while (a[j℄>x) j--; | { while (a[i℄<x) i++;
... | while (a[j℄<x) j--;
| ...
void sort(int L,int R) | void sort(int L,int R)
{ int i,j,w,x,k; | { int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄; | i=L; j=R;
do | k=(L+R)/2; x=a[k℄;
{ while (a[i℄<x) i++; | do
while (a[j℄>x) j--; | { while (a[i℄<x) i++;
... | while (a[j℄<x) j--;
| ...
void sort(int L,int R) | void sort(int L,int R)
{ int i,j,w,x,k; | { int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄; | i=L; j=R;
do | k=(L+R)/2; x=a[k℄;
{ while (a[i℄<x) i++; | do
while (a[j℄>x) j--; | { while (a[i℄<x) i++;
... | while (a[j℄<x) j--;
| ...
Problem: Abder drittenZeile würdendie Dateienals komplett
vershiedeninterpretiert!
void sort(int L,int R) | void sort(int L,int R)
{ int i,j,w,x,k; | { int i,j,w,x,k;
i=L; j=R; k=(L+R)/2; x=a[k℄; | i=L; j=R;
do | k=(L+R)/2; x=a[k℄;
{ while (a[i℄<x) i++; | do
while (a[j℄>x) j--; | { while (a[i℄<x) i++;
... | while (a[j℄<x) j--;
| ...
Problem: Abder drittenZeile würdendie Dateienals komplett
vershiedeninterpretiert!
Ziel: intelligentererVergleih
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
◮
als mögliheVeränderungen nur Löshung,
Einfügung oderÄnderung einesZeihens
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
◮
als mögliheVeränderungen nur Löshung,
Einfügung oderÄnderung einesZeihens
◮
Anzahl solherOperationen alsVergleihsmaÿ
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
◮
als mögliheVeränderungen nur Löshung,
Einfügung oderÄnderung einesZeihens
◮
Anzahl solherOperationen alsVergleihsmaÿ
Beispiel: Eingabe abbba undabda
mögliheErklärungendes Untershieds:
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
◮
als mögliheVeränderungen nur Löshung,
Einfügung oderÄnderung einesZeihens
◮
Anzahl solherOperationen alsVergleihsmaÿ
Beispiel: Eingabe abbba undabda
mögliheErklärungendes Untershieds:
a b b b a
a b d a
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
◮
als mögliheVeränderungen nur Löshung,
Einfügung oderÄnderung einesZeihens
◮
Anzahl solherOperationen alsVergleihsmaÿ
Beispiel: Eingabe abbba undabda
mögliheErklärungendes Untershieds:
a b b b a
a b d a
a b b b a
a b d a
Abstraktion:
◮
lediglih Vergleih einzelnerZeihen,nihtganzer Zeilen
◮
als mögliheVeränderungen nur Löshung,
Einfügung oderÄnderung einesZeihens
◮
Anzahl solherOperationen alsVergleihsmaÿ
Beispiel: Eingabe abbba undabda
mögliheErklärungendes Untershieds:
a b b b a
a b d a
a b b b a
a b d a
a b b b a
a b d a
Gegeben: har s[n℄, t[m℄;
Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll
Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll 3 Fälle:
◮
s[0℄· · ·
t[0℄
· · ·
Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll 3 Fälle:
◮
s[0℄· · ·
(s[1℄...s[n-1℄)t[0℄
· · ·
(t[1℄...t[m-1℄)Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll 3 Fälle:
◮
s[0℄· · ·
(s[1℄...s[n-1℄)t[0℄
· · ·
(t[1℄...t[m-1℄)◮
s[0℄· · ·
· · ·
Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll 3 Fälle:
◮
s[0℄· · ·
(s[1℄...s[n-1℄)t[0℄
· · ·
(t[1℄...t[m-1℄)◮
s[0℄· · ·
(s[1℄...s[n-1℄)
· · ·
(t[0℄...t[m-1℄)Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll 3 Fälle:
◮
s[0℄· · ·
(s[1℄...s[n-1℄)t[0℄
· · ·
(t[1℄...t[m-1℄)◮
s[0℄· · ·
(s[1℄...s[n-1℄)
· · ·
(t[0℄...t[m-1℄)◮ · · ·
t[0℄
· · ·
Gegeben: har s[n℄, t[m℄;
Gesuht: Distanzd zwishens und tals minimaleAnzahlvon
Edit-Operationen
Idee: zunähstEntsheidung, ob s[0℄und t[0℄einander
gegenübergestellt,odereinesder beiden
gelösht/eingefügtwerdensoll 3 Fälle:
◮
s[0℄· · ·
(s[1℄...s[n-1℄)t[0℄
· · ·
(t[1℄...t[m-1℄)◮
s[0℄· · ·
(s[1℄...s[n-1℄)
· · ·
(t[0℄...t[m-1℄)◮ · · · (s[0℄...s[n-1℄)
t[0℄
· · ·
(t[1℄...t[m-1℄)Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
jGesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
j◮ · · · (s[i℄...s[n-1℄)
t[j℄
· · ·
(t[j+1℄...t[m-1℄)Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
j◮ · · · (s[i℄...s[n-1℄)
t[j℄
· · ·
(t[j+1℄...t[m-1℄)1
+
di,
j+
1Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
j◮ · · · (s[i℄...s[n-1℄)
t[j℄
· · ·
(t[j+1℄...t[m-1℄)1
+
di,
j+
1◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)t[j℄
· · ·
(t[j+1℄...t[m-1℄)Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
j◮ · · · (s[i℄...s[n-1℄)
t[j℄
· · ·
(t[j+1℄...t[m-1℄)1
+
di,
j+
1◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)t[j℄
· · ·
(t[j+1℄...t[m-1℄)d
i
+
1,
j+
1wenn s[i℄==t[j℄
Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
j◮ · · · (s[i℄...s[n-1℄)
t[j℄
· · ·
(t[j+1℄...t[m-1℄)1
+
di,
j+
1◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)t[j℄
· · ·
(t[j+1℄...t[m-1℄)d
i
+
1,
j+
1wenn s[i℄==t[j℄
1
+
di+
1,
j+
1sonst
Gesuht: allgemeinDistanz d
i
,
jzwishen s[i℄...s[n-1℄und
t[j℄...t[m-1℄
Ansatz: Falluntersheidung (wie eben)ergibt:
◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)
· · ·
(t[j℄...t[m-1℄)1
+
di+
1,
j◮ · · · (s[i℄...s[n-1℄)
t[j℄
· · ·
(t[j+1℄...t[m-1℄)1
+
di,
j+
1◮
s[i℄
· · ·
(s[i+1℄...s[n-1℄)t[j℄
· · ·
(t[j+1℄...t[m-1℄)d
i
+
1,
j+
1wenn s[i℄==t[j℄
1
+
di+
1,
j+
1sonst
Sonderfälle: i
=
n oderj=
m:Sonderfälle: i
=
n oderj=
m:◮
s[n℄...s[n-1℄
t[j℄...t[m-1℄
Sonderfälle: i
=
n oderj=
m:◮
...
t[j℄...t[m-1℄
m
−
jSonderfälle: i
=
n oderj=
m:◮
...
t[j℄...t[m-1℄
m
−
j◮
s[i℄...s[n-1℄t[m℄...t[m-1℄
Sonderfälle: i
=
n oderj=
m:◮
...
t[j℄...t[m-1℄
m
−
j◮
s[i℄...s[n-1℄...
n
−
iSonderfälle: i
=
n oderj=
m:◮
...
t[j℄...t[m-1℄
m
−
j◮
s[i℄...s[n-1℄...
n
−
iInsgesamt:
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄1
+
min{
di+
1,
j;
di,
j+
1;
di+
1,
j+
1}
sonstEingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
1
+
1+
min{
d1,
1;
d0,
2;
d1,
2} ;
d1,
1}
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
1
+
1+
min{
d1,
1;
d0,
2;
d1,
2} ;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
1
+
1+
min{
d1,
1;
d0,
2;
d1,
2} ;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
=
min{
2+
min{
1+
min{
d3,
0;
d2,
1;
d3,
1} ;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
1
+
1+
min{
d1,
1;
d0,
2;
d1,
2} ;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
=
min{
2+
min{
1+
min{
d3,
0;
d2,
1;
d3,
1} ;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
= · · ·
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
1
+
1+
min{
d1,
1;
d0,
2;
d1,
2} ;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
=
min{
2+
min{
1+
min{
d3,
0;
d2,
1;
d3,
1} ;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
= · · ·
Problem: mehrfahe Berehnung dergleihen Werte
Eingabe: s[0℄...s[6℄=abbba und t[0℄...t[4℄=abda
Berehnung:
d
0
,
0=
min{
1+
d1,
0;
1+
d0,
1;
d1,
1}
=
min{
1+
1+
min{
d2,
0;
d1,
1;
d2,
1} ;
1+
d0,
1;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
1
+
1+
min{
d1,
1;
d0,
2;
d1,
2} ;
d1,
1}
=
min{
2+
min{
d2,
0;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
=
min{
2+
min{
1+
min{
d3,
0;
d2,
1;
d3,
1} ;
d1,
1;
d2,
1} ;
2
+
min{
d1,
1;
d0,
2;
d1,
2} ;
1
+
min{
d2,
1;
d1,
2;
d2,
2}}
= · · ·
Problem: mehrfahe Berehnung dergleihen Werte
Lösung: dynamisheProgrammierung
Idee:
◮
Speiherung aller d i,
jin Tabelle
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
b 5 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
4
b 5 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
3 4
b 5 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
2 3 4
b 5 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
1 2 3 4
b 5 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin
{
1+
di+
1,
j;
1+
di,
j+
1;
di+
1,
j+
1}
wenns[i℄==t[j℄+ { + ; + ; + + }
Idee:
◮
Speiherung aller d i,
jin Tabelle
◮
Berehnung in geeigneterReihenfolge
Beispiel:
a b b b a
a
2 1 2 3 4
b 5 4 3 2 2 1 2 3
d 6 5 4 3 2 1 1 2
a 6 5 4 3 2 1 0 1
7 6 5 4 3 2 1 0
d
i
,
j=
m
−
j wenni=
nn
−
i wennj=
mmin