Delphi-Forum.de Delphi-Library.de
C-Sharp-Forum.de C-Sharp-Library.de
Registrieren Login Suche Hilfe Sitemap
Levenshteinalgorithmus - StackOverflow
spacer
Autor Nachricht
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Di 16.02.10 14:46  Antworten mit Zitat Beitrag melden
Implementierung der Levenshtein-Distanz-Berechnung, Programm schmiert bei der Zuweisung des Ergebnisses mit einem StackOverflow ab ... ich weiß nicht, warum -.-

ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
function IsSpellingCorrect(FVoc, FUser: AnsiString): Integer;
var
I, J, X, Y: Integer;
Res: array of array of Integer;
begin
X := Length(FVoc);
Y := Length(FUser);

// Tabelle erstellen
SetLength(Res, X, Y);
for I := 0 to X - 1 do
Res[I, 0] := I; // Elemente löschen

for J := 0 to Y - 1 do
Res[0, J] := J; // Elemente einfügen

for J := 1 to Y - 1 do
begin
for I := 1 to X - 1 do
begin
if FVoc[I] = FUser[J] then
Res[I, J] := Res[I-1, J-1] // Diagonal laufen
else
Res[I, J] := Min(Res[I-1, J] + 1, Res[I, J-1] + 1, Res[I-1, J-1] + 1);
end;
end;
Result := Res[X-1, Y-1];
end;


Algo korrigiert, falls jmd braucht


Zuletzt bearbeitet von Mashalla am Di 16.02.10 15:12, insgesamt 3-mal bearbeitet
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator

Beiträge: 7412
Erhaltene Danke: 16
Dabei seit: 22.11.2002
Wohnort: Düsseldorf

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Di 16.02.10 14:51  Antworten mit Zitat Beitrag melden
Du setzt die Größe des Arrays auf X mal Y, greifst aber auch auf das Element mit Index X/Y zu. Das letzte Element in einem Array hat aber den Index X-1 bzw. Y-1. ;-)

_________________
Oel ngati kameie.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Di 16.02.10 14:59  Antworten mit Zitat Beitrag melden
Selber Fehler trotz Korrektur, gleiche Stelle ...

Aber danke für den Hinweis, die Zuweisung war so natürlich falsch ;)
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator

Beiträge: 7412
Erhaltene Danke: 16
Dabei seit: 22.11.2002
Wohnort: Düsseldorf

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Di 16.02.10 15:04  Antworten mit Zitat Beitrag melden
In den Schleifen steckt der Fehler aber auch noch drin. ;-)

_________________
Oel ngati kameie.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Bergmann89
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 1050
Erhaltene Danke: 2
Dabei seit: 07.03.2006


Win XP Prof
Delphi 7 Personal
BeitragVerfasst: Di 16.02.10 15:05  Antworten mit Zitat Beitrag melden
Hey,

also ich kann mir jetz auch nich richtig erklären, warum er den Stack voll packt, aber hast dus schonma mit nem größeren Stack versucht? Vlt ist er ja wirklich einfach voll. Muss ja nich die Folge einer Endlosschleife sein...

MfG Bergmann

_________________
Ich weiß nicht viel lern aber dafür umso schneller^^
Private Nachricht sendenPosting in privater Nachricht zitieren
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Di 16.02.10 15:11  Antworten mit Zitat Beitrag melden
Ach klar ... hatte nur 4 Stunden Schlaf und vorher ne Klausur xD

Warum kommt eigentlich keine Fehlermeldung, wenn ich einen Wert an eine Stelle im Array schreiben will und das Array nicht die erforderliche Länge hat?
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator

Beiträge: 7412
Erhaltene Danke: 16
Dabei seit: 22.11.2002
Wohnort: Düsseldorf

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Di 16.02.10 15:13  Antworten mit Zitat Beitrag melden
Vermutlich weil diese Prüfung in den Optionen deaktiviert ist. Kann man aber anschalten. ;-)

_________________
Oel ngati kameie.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Di 16.02.10 16:58  Antworten mit Zitat Beitrag melden
Jo, lag daran. In TDE ist alles standardmäßig deaktiviert wie ich gerade merke ^^ Danke
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Mi 17.02.10 20:39  Antworten mit Zitat Beitrag melden
Habe jetzt übrigens die ganzen nativen Exceptions vom Debugger behandeln lassen, erhalte jetzt aber auch erst zur Laufzeit eine Zugriffsverletzung, wenn ich auf einen Arrayindex außerhalb der Grenze zugreife. Sollte da nicht der Compiler eingreifen?
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Kha
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic star
Moderator

Beiträge: 2865
Erhaltene Danke: 11
Dabei seit: 12.11.2005
Wohnort: Brackenheim

Win 7
F#, C# (VS2010)
BeitragVerfasst: Mi 17.02.10 20:49  Antworten mit Zitat Beitrag melden
Die wenigstens Compiler führen eine komplette Static Code Analysis durch ;) . In offensichtlichen Fällen wie deinem wäre es vielleicht noch machbar, aber generell ist das weder trivial noch vom Zeitaufwand her bei jedem Kompilieren akzeptabel.

_________________
>λ=
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
jakobwenzel
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Nussknacker 2009 - 1. Rang

Beiträge: 1888
Erhaltene Danke: 1
Dabei seit: 21.06.2005
Wohnort: Ingelheim

XP home, ubuntu
BDS 2006 Prof
BeitragVerfasst: Mi 17.02.10 20:51  Antworten mit Zitat Beitrag melden
Wenn du ein Array fester Länge hast und auf einen konstanten Index zugreifst sollte er schon meckern, aber in diesem Fall wäre das mit mehr Aufwand verbunden.

_________________
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Do 18.02.10 00:21  Antworten mit Zitat Beitrag melden
Jo, verstehe. Ganz oder gar nicht und im Falle vom Turbo Delphi Compiler eben gar nicht :)
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 914
Erhaltene Danke: 1
Dabei seit: 07.09.2005
Wohnort: Münster

WinXp,PuppyLinux
Turbo Delphi, FreePascal
BeitragVerfasst: Do 18.02.10 09:57  Antworten mit Zitat Beitrag melden
Hallo,

Wie oft machen Strings als Wertparameter Aerger....
Probiere mal const oder var vor den zu uebergebenden Strings, dann werden diese nicht auf dem Stack erzeugt.
ausblenden Delphi-Quelltext markieren
1:
function IsSpellingCorrect(CONST FVoc, FUser: AnsiString): Integer;

alternativ, aber schlechter, außer man ändert wirklich was an den Strings, in der letzten Zeilen die neu geschaffenen Strings FVoc, FUser loeschen
ausblenden Delphi-Quelltext markieren
1:
2:
3:
4:
    Result := Res[X-1, Y-1]; 
FVoc :='';
FUser :='';
end;


Das MIN mit drei eingabedaten arbeitet kannte ich noch nicht.
ausblenden Delphi-Quelltext markieren
1:
2:
3:
Res[I, J] := Min(Res[I-1, J] + 1, Res[I, J-1] + 1, Res[I-1, J-1] + 1);
aber ueberall ein +1 macht keinen Sinn
Res[I, J] := Min( Res[I-1, J], Res[I, J-1] , Res[I-1, J-1] ) +1;


Gruß Horst
Private Nachricht sendenPosting in privater Nachricht zitieren
Mashalla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star

(Threadstarter)

Beiträge: 47
Dabei seit: 18.07.2006


Windows 7 Professional
Delphi 7 Enterprise, Turbo Delphi Explorer 2006
BeitragVerfasst: Do 18.02.10 10:06  Antworten mit Zitat Beitrag melden
Die Min-Funktion ist selbst programmiert, standardmäßig funktioniert die nur mit 2 Parametern und ich arbeite in meinem Fall mit den Parametern weiter, deswegen hatte ich keine konstanten Parameter verwendet :)
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 914
Erhaltene Danke: 1
Dabei seit: 07.09.2005
Wohnort: Münster

WinXp,PuppyLinux
Turbo Delphi, FreePascal
BeitragVerfasst: Do 18.02.10 10:16  Antworten mit Zitat Beitrag melden
Hallo,
Zitat:
nd ich arbeite in meinem Fall mit den Parametern weiter, deswegen hatte ich keine konstanten Parameter verwendet

Bezieht sich auf die Strings?

Gruß Horst

Kaaaafffeeeee...
Private Nachricht sendenPosting in privater Nachricht zitieren
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star

Beiträge: 914
Erhaltene Danke: 1
Dabei seit: 07.09.2005
Wohnort: Münster

WinXp,PuppyLinux
Turbo Delphi, FreePascal
BeitragVerfasst: Do 18.02.10 13:38  Antworten mit Zitat Beitrag melden
Hallo,

wieso ist jetzt ein beantwortet Haekchen dran?
Aber, weder Delphi noch freepascal, fordern unmäßig Stackspeicher an.
Also war es ein fasch benannter Zugriffsfehler oder der Teil, der den Fehler produziert, liegt woanders.

Gruß Horst
Einloggen, um Attachments anzusehen!
Private Nachricht sendenPosting in privater Nachricht zitieren
Gausi
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Moderator

Beiträge: 7412
Erhaltene Danke: 16
Dabei seit: 22.11.2002
Wohnort: Düsseldorf

Win XP, Win 7
D7 PE, RAD Studio 2009 Professional
BeitragVerfasst: Do 18.02.10 14:03  Antworten mit Zitat Beitrag melden
Nun, es sieht so aus, als wäre die Fehlermeldung "Stackoverflow" in diesem Fall auf ein wildes Überschreiben des Speichers zurückzuführen, was durch die falschen Array-Grenzen verursacht wurde. Ein Schreiben jenseits der Arraygrenzen kann alles mögliche an Fehlern zur Folge haben.

Das war dann hier wohl kein wirklicher Stackoverflow, sah aber so aus. ;-)

_________________
Oel ngati kameie.
Private Nachricht sendenPosting in privater Nachricht zitieren Webseite dieses Mitglieds besuchen
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
Beiträge vom vorherigen Thema anzeigen:   
home home