tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
2
ZUGRIFFE
1404
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Sinex Sinex ist offline Rookie
    Registriert seit
    May 2009
    Beiträge
    8
    Ich habe hier eine Implementierung für die Lvenshtein-Distanz in Delphi gefunden: http://www.delphipraxis.net/post471225.html

    function Levenshtein(const str1, str2: string): integer;
    var
    delta: array of integer;
    len1, len2: integer; // length of str1, str2
    idx1, idx2: integer; // index into str1, str2
    clast, cnew: integer; // last/next cost
    begin
    len1 := Length(str1);
    len2 := Length(str2);
    if (len1 = 0) and (len2 = 0) then
    Result := 0
    else if (len1 = 0) or (len2 = 0) then
    Result := 100
    else
    begin
    SetLength(delta, len2 + 1);

    for idx2 := 0 to len2 do
    delta[idx2] := idx2;

    for idx1 := 1 to len1 do
    begin
    clast := delta[0];
    delta[0] := idx1;

    for idx2 := 1 to len2 do
    begin
    cnew := clast + Ord(str1[idx1] <> str2[idx2]);
    if delta[idx2] + 1 < cnew then
    cnew := delta[idx2] + 1;
    if delta[idx2 - 1] + 1 < cnew then
    cnew := delta[idx2 - 1] + 1;
    clast := delta[idx2];
    delta[idx2] := cnew;
    end;
    end;

    Result := delta[len2] * 100 div len2;
    (* Alternativ:
    if len2 > len1 then
    Result := delta[len2] * 100 div len2
    else
    Result := delta[len2] * 100 div len1;
    *)
    end;
    end;

    Ich verstehe nun einige Sachen nicht:
    1. delta[0] := idx1; //wieso? auf delta[0] wird doch nie zugegriffen
    2. cnew := clast + Ord(str1[idx1] <> str2[idx2]); müsste doch dann beim Schleifendurchlauf den Wert immer weiter erhöhen, ausser ich vergleich 'ttttt' mit 'tttttttt', wie verhindern diese beiden vergleiche dies (3.)
    3. Warum vergleich ich gerade mit delta[idx2] + 1und delta[idx2 - 1] + 1 ?

    Sinex
     

  2. #2
    vop vop ist offline Mitglied Platin
    Registriert seit
    Mar 2004
    Beiträge
    676
    Hi

    Ich empfehle dir, den Code mal im Debugger Schritt für Schritt durchzugehen, dann siehst du wie er arbeitet.
    vop
     

  3. #3
    Sadi al Wadidrah Sadi al Wadidrah ist offline Mitglied Silber
    Registriert seit
    Jun 2005
    Ort
    Schweiz
    Beiträge
    65
    Sagt dir Dynamische Programmierung etwas? Vielleicht hilft es, mal die Tabelle aufzuzeichnen anhand eines Beispiels aufzuzeichnen: http://www-igm.univ-mlv.fr/~lecroq/seqcomp/node2.html

    Macht der Code überhaupt, was er soll?
     
    Lächle, morgen wird alles noch schlimmer ...

Ähnliche Themen

  1. Xpresso - Farbe in Abhängigkeit zu Distanz?
    Von margoyle im Forum Cinema 4D
    Antworten: 0
    Letzter Beitrag: 20.02.10, 13:16
  2. Wlan Netzwerk über große Distanz (ca. 800 m)
    Von beyoNd im Forum Netzwerke
    Antworten: 7
    Letzter Beitrag: 04.12.09, 23:20
  3. Antworten: 4
    Letzter Beitrag: 08.01.09, 17:59
  4. Levenshtein in SQL-Abfrage
    Von tombe im Forum Relationale Datenbanksysteme
    Antworten: 8
    Letzter Beitrag: 03.06.08, 00:04
  5. Distanz zwischen Pixeln vergrößern - After Effects
    Von Chickow im Forum Videoschnitt, Videotechnik & -produktion
    Antworten: 1
    Letzter Beitrag: 10.04.08, 17:35

Stichworte