home *** CD-ROM | disk | FTP | other *** search
- (**** Gewichtete Levenshtein-Distanz ****)
- (**** mit Berücksichtigung von Wildcards ****)
- (**** ----- Ausgangsversion ----- ****)
- (**** Autor : Jörg Michael, Hannover ****)
- (**** Datum : 4. Februar 1993 ****)
-
- const maxlen = 50;
- p0 = 1; (**** Ersetzen ****)
- q0 = 1; (**** Einfügen ****)
- r0 = 1; (**** Löschen ****)
-
- type maxstring = string [maxlen];
- var wort, muster: maxstring;
-
- function MIN (x,y,z: integer): integer;
- begin
- if (x < y) then y := x;
- if (y < z) then MIN := y else MIN := z
- end;
-
- function WLD (var wort,muster: maxstring): integer;
- var c: char;
- i,j,lw,lm: integer;
- pp,p,q,r: integer;
- d: array [0..maxlen, 0..maxlen] of integer;
- begin
- lw := length (wort);
- lm := length (muster);
- d[0,0] := 0;
- for i := 1 to lw do d[i,0] := d[i-1,0] + r0;
-
- for j := 1 to lm do
- begin
- c := muster[j];
- if (c = '*') or (c = '?') then p := 0 else p := p0;
- if (c = '*') then q := 0 else q := q0;
- if (c = '*') then r := 0 else r := r0;
- d[0,j] := d[0,j-1] + q;
-
- for i := 1 to lw do
- begin
- (**** d[i,j] := Minimum dreier Zahlen ****)
- if (wort[i] = muster[j]) then pp := 0 else pp := p;
- d[i,j] := MIN (d[i-1,j-1] +pp, d[i,j-1] +q, d[i-1,j] +r)
- end
- end;
- WLD := d[lw,lm]
- end;
-
- begin
- (**** Hauptprogramm ****)
- write ('Wort : '); readln (wort);
- write ('Muster : '); readln (muster);
- write ('Distanz: ', WLD (wort,muster))
- end.
-