Fehler in der String-Distanz-Berechnung

Status
Nicht offen für weitere Antworten.

oldshoe

Bekanntes Mitglied
Irgendwie bekomme ich einen Fehler in der String-Distanz-Berechnung.
Ich habe versucht die Damerau-Levensthein-Distanz zu implementieren und dafür folgenden Code gefunden. Allerdings denke ich, dass das Ergebnis z.B. für "Areal" und "Arel" so wie beim normalen Levensthein =1 sein sollte oder irre ich mich?

hier auch mal der PseudoCode: Damerau-Levenshtein distance - Wikipedia
Java:
public static int damlev(String s, String t) /* never tested! */
	{
		int l1 = s.length();
		int l2 = t.length();
		int n = l1 + 1;
		int m = l2 + 1;
		if (m == 1)
			return n - 1;
		if (n == 1)
			return m -1;
		int[] d = new int[m * n];
		int k = 0;
		for (int i = 0; i < n; i++)
			d[i] = i;
		k = n;
		for (int i = 1; i < m; i++)
		{
			d[k] = i;
			k += n;
		}
		int f = 0, g = 0, h = 0, min = 0, b = 0, c = 0, cost = 0, tr = 0;
		for (int i = 1; i < n; i++)
		{
			k = i;
			f = 0;
			for (int j = 1; j < m; j++)
			{
				h = k;
				k += n;
				min = d[h] + 1;
				b = d[k - 1] + 1;
				if (g < l1 && f < l2)
					if (s.charAt(g) == t.charAt(f))
						cost = 0;
					else
					{
						cost = 1;
						/* Sean's transposition */
						if (j < l2 && i < l1)
								if (s.charAt(i) == t.charAt(f) && s.charAt(g) == t.charAt(j))
								{
									tr = d[(h) - 1]/* + 1*/; // transposition yields deletion cost at next iteration?
									if (tr < min)
										min = tr;
								}
					}
				else
					cost = 1;
				c = d[h - 1] + cost;
				if (b < min)
					min = b;
				if (c < min)
					min = c;
				d[k] = min;
				/*
				System.out.println("i=" + i + ", j=" + j);
				for (int v = 0; v < m; v++)
				{
					for (int w = 0; w < n; w++)
						System.out.print(d[v * n + w] + " ");
					System.out.println();
				}
				*/
				f = j;
			}
			g = i;
		}
		return d[k];
	}
 

Matze75

Neues Mitglied
Hi

dein Progamm funktioniert bei mir einwandfrei mußt nur noch eine main Methode einfügen z.B.:

Java:
public static void main(String[] args) {
	int z=durchschnitt.damlev ("Areal","Aral");
	System.out.println("Levenshtein Distanz:" +z);
}
 

eRaaaa

Top Contributor
hu, also bei mir funktionierts auch.
(auch z.b. eine wirkliche damerau-levenshtein-distanz (beispiel von wikipedia: „Raisch“ ↔ „Rasich“) = 1

Ich habe versucht die Damerau-Levensthein-Distanz zu implementieren und dafür folgenden Code gefunden.

find ich ja mal gut :>

aber irgendwie sieht dein code unnötig kompliziert aus. du könntest eig. FAST den code von wiki 1zu1 übernehmen, c# ist da sehr ähnlich :D
Java:
public class Levensthein {

	public static void main(String[] args) {
		System.out.println(damlev("Areal", "Arel"));
	}

	public static int damlev(String src, String dest) /* never tested! */
	{
		int[][] d = new int[src.length() + 1][dest.length() + 1];
		int i, j, cost;
		char[] str1 = src.toCharArray();
		char[] str2 = dest.toCharArray();
		for (i = 0; i <= str1.length; i++) {
			d[i][0] = i;
		}
		for (j = 0; j <= str2.length; j++) {
			d[0][j] = j;
		}
		for (i = 1; i <= str1.length; i++) {
			for (j = 1; j <= str2.length; j++) {

				if (str1[i - 1] == str2[j - 1])
					cost = 0;
				else
					cost = 1;

				d[i][j] = Math.min(d[i - 1][j] + 1, // Deletion
						Math.min(d[i][j - 1] + 1, // Insertion
								d[i - 1][j - 1] + cost)); // Substitution

				if ((i > 1) && (j > 1) && (str1[i - 1] == str2[j - 2])
						&& (str1[i - 2] == str2[j - 1])) {
					d[i][j] = Math.min(d[i][j], d[i - 2][j - 2] + cost);
				}
			}
		}
		return d[str1.length][str2.length];
	}

}
 

oldshoe

Bekanntes Mitglied
Vielen Dank erstmal für eure Anteilnahme;)
Ich frage mich nur wieso "Areal" und "Arel" mit Damerau-Levensthein = 2 liefert und mit Levensthein =1. Denn der Levensthein-Ansatz wurde doch nur um das Vertauschen 2er Zeichen erweitert und es geht ja um die minimale Anzahl an Operationen.
Jemand eine Idee?
 

eRaaaa

Top Contributor
???:L

System.out.println("Distanz = "+damlev("Areal", "Arel"));

liefert mir 1. so wie es sein soll und so wie es auch von dir vermutet wird :D
hast du vllt ein tippfehler bei dir in einem der strings? :>
 

oldshoe

Bekanntes Mitglied
ja super, das ist mir auch eben aufgefallen! Deine Version liefert =1 aber meine vorgeschlagene liefert = 2 also war meine auch fehlerhaft!
Vielen Dank!:toll::toll::toll:
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
T String Array Fehler beim Index Java Basics - Anfänger-Themen 3
N Fehler bei string Attribut! Java Basics - Anfänger-Themen 18
D Fehler: String zu Integer Java Basics - Anfänger-Themen 7
M Compiler-Fehler Fehler bei String-Arrays Java Basics - Anfänger-Themen 3
D Fehler bei String eingabe via Scanner Java Basics - Anfänger-Themen 6
W Klassen Fehler bei public void setLabelText(JLabel label, String text) Java Basics - Anfänger-Themen 11
S String.format Fehler Java Basics - Anfänger-Themen 12
V Variablen String zu Double, Merkwürdiger Fehler Java Basics - Anfänger-Themen 6
F Problem: Verschlüsselung von String in Array Fehler Java Basics - Anfänger-Themen 2
Chocola Datums-String mit "ungültigem Anhängsel" wird ohne Fehler geparsed. Kann man dies irgendwie beheben? Java Basics - Anfänger-Themen 3
M Compiler-Fehler Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 2
B Array fehler bei string split Java Basics - Anfänger-Themen 4
T Fehler beim Konvertieren (String --> Float) Java Basics - Anfänger-Themen 5
S Arrays - Fehler bei der Verarbeitung: For input string: "Berlin" Java Basics - Anfänger-Themen 14
StupidAttack Fehler: String index out of range:7 Java Basics - Anfänger-Themen 10
Eldorado Fehler bei String.split Java Basics - Anfänger-Themen 4
K Fehler Meldung java.lang.NumberFormatException: empty String Java Basics - Anfänger-Themen 1
I String, Split, match, wo liegt mein Fehler ? Java Basics - Anfänger-Themen 4
T String splitten und auf fehler abfragen Java Basics - Anfänger-Themen 3
S java.lang.String Fehler bei DB Abfrage Java Basics - Anfänger-Themen 4
F Kann mir jemand bei dem Fehler helfen? Java Basics - Anfänger-Themen 6
Juelin jedit Fehler beim starten Java Basics - Anfänger-Themen 2
I Frage Thymeleaf -> Fehler ignorieren und mit "" ersetzen? Java Basics - Anfänger-Themen 15
E Matrizenmultiplikation Fehler Java Basics - Anfänger-Themen 0
Z Fehler Zeiterfassungsprogramm Anzeige Java Basics - Anfänger-Themen 3
C SwingWorker mit Fehler Java Basics - Anfänger-Themen 2
monsterherz Fehler Semikolon fehlt - ich weiss aber nicht wo da noch eines hin sollte... Java Basics - Anfänger-Themen 21
G Compiler-Fehler Fehler in Zeile 1 beheben, wie? Java Basics - Anfänger-Themen 9
W Fehler in der Datei pom.xml Java Basics - Anfänger-Themen 19
marcelnedza Finde meinen Fehler in einer Methode nicht, Java Karol Java Basics - Anfänger-Themen 15
monsterherz einfache Methode mit Fehler den ich nicht finde Java Basics - Anfänger-Themen 21
monsterherz if / else if mit Fehler den ich leider nicht finde Java Basics - Anfänger-Themen 11
N Interpreter-Fehler Compiler zeigt keine Fehler an, aber das Programm läuft nicht (BlueJ) Java Basics - Anfänger-Themen 2
ohneInformatik; Dynamische Zinsen. Wo liegt der Fehler? Java Basics - Anfänger-Themen 4
Fiedelbambu deriveFont Fehler wer kann Helfen? Java Basics - Anfänger-Themen 4
I Ical4j / Kalender einlesen von URL - Fehler: "Unparseable date" Java Basics - Anfänger-Themen 16
Lion.King Fehler in double und int Java Basics - Anfänger-Themen 7
H BlueJ: was genau ist hier der Fehler? Java Basics - Anfänger-Themen 14
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
D Datentypen LocalDate.parse() ergibt Fehler Java Basics - Anfänger-Themen 5
stormyark Fehler beim überschreiben einer Variable Java Basics - Anfänger-Themen 1
N Fehler "Cannot instantiate the type" Java Basics - Anfänger-Themen 3
L Ich weis nicht was der Fehler ist! Java Basics - Anfänger-Themen 14
L30nS JNI Fehler, JRE und JDK Java Basics - Anfänger-Themen 8
E Executable jar file fehler Java Basics - Anfänger-Themen 9
S Fehler beim Programm Java Basics - Anfänger-Themen 2
U Warum kriege ich hier eine nullpointer exception, sehe den Fehler nicht (swing) Java Basics - Anfänger-Themen 1
J Syntax-Fehler? Java Basics - Anfänger-Themen 2
Jose05 Fehler im Programm feststellen Java Basics - Anfänger-Themen 2
S Methoden 2 non-static Methoden, trotzdem Fehler "non static method can not be referenced from a static context" Java Basics - Anfänger-Themen 9
G Taschenrechner ergibt Fehler in if-Abfrage Java Basics - Anfänger-Themen 6
I Fehler bei for-Schleife Java Basics - Anfänger-Themen 6
lol5443 Tic Tac Toe Fehler Java Basics - Anfänger-Themen 5
K Fehler bei der Implementierung Java Basics - Anfänger-Themen 6
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
W Verschachtelte If-else --> finde meinen Fehler nicht Java Basics - Anfänger-Themen 30
J Fehler bei array aus anderer Klasse Java Basics - Anfänger-Themen 3
H Fehler bei integer Division Java Basics - Anfänger-Themen 28
C Fehler beim erstellen eines Objektes Java Basics - Anfänger-Themen 3
N Was bedeutet dieser Fehler Java Basics - Anfänger-Themen 2
fuerteb Compiler-Fehler Methode wird nicht bzw. als Fehler erkannt Java Basics - Anfänger-Themen 4
Lion.King Fehler Java Basics - Anfänger-Themen 5
AlexG. Nullpointer exeption Fehler Java Basics - Anfänger-Themen 0
C Fehler im Code Java Basics - Anfänger-Themen 10
J Anfänger, Fehler; "Der Hund liegt begraben" Java Basics - Anfänger-Themen 3
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
V Wer findet den Fehler :) Java Basics - Anfänger-Themen 12
B ArrayIndexOutOfBoundsException, ich finde den Fehler nicht? Java Basics - Anfänger-Themen 10
A Compiler Fehler - not a statement Java Basics - Anfänger-Themen 2
Arita welche Fehler gibt es noch? wie kann ich es noch vervollständigen Java Basics - Anfänger-Themen 15
S Fehler bei Code mit SubStrings für mich nicht auffindbar. Java Basics - Anfänger-Themen 4
S Kriege Fehler "Exception in thread" beim Benutzen von SubStrings. Java Basics - Anfänger-Themen 2
H Logik Fehler erkennen Java Basics - Anfänger-Themen 21
T Fehler in Caesar-Chiffre Java Basics - Anfänger-Themen 7
R Fehlermeldung aber WO liegt der Fehler? Java Basics - Anfänger-Themen 7
B Nicht reproduzierbarer Fehler bei Kompilierung - Shortcut "Bereinigung" Compiler ? Java Basics - Anfänger-Themen 4
Nerdinfekt BMI Rechner, fehler beim Zurückgeben des Strings? Java Basics - Anfänger-Themen 2
pumpgun99 Fehler Meldung "else without if" Java Basics - Anfänger-Themen 3
P Was bedeutet dieser Fehler? Java Basics - Anfänger-Themen 31
KogoroMori21 Java Datum Differenz (kleiner Fehler) Java Basics - Anfänger-Themen 10
N java.util.InputMismatchException Fehler Java Scanner Java Basics - Anfänger-Themen 5
H Fehler: NullPointerException und ich weiß net warum Java Basics - Anfänger-Themen 4
R Ich sehe meinen fehler nicht Java Basics - Anfänger-Themen 8
Johannes_ece Fehler: Application Terminated (TypeError): var$0.$moveToolTo is not a function Java Basics - Anfänger-Themen 4
GermanPie Fehler in Putty (kein Hauptmanifestattribut, in jar) Java Basics - Anfänger-Themen 4
M Scannen von *.txt - Dateien; wo sind der oder die Fehler? Java Basics - Anfänger-Themen 4
P Methoden aufrufen - Fehler Java Basics - Anfänger-Themen 20
JavaClap "Bruchrechner" liefert Fehler/keine Ausgabe bei Addition und Subtraktion Java Basics - Anfänger-Themen 0
B if Clause Fehler Java Basics - Anfänger-Themen 2
G Fibonacci Zahlenreihe Fehler Java Basics - Anfänger-Themen 4
A Fehler beim Ausführen einer class Datei Java Basics - Anfänger-Themen 6
B Fehler, aber ich weiß nicht warum Java Basics - Anfänger-Themen 3
C system cannot be resolved Fehler in Eclipse Java Basics - Anfänger-Themen 18
J Fehler im Code, aber ich weiß nicht wieso! Java Basics - Anfänger-Themen 6
M Compiler-Fehler Fehler beim Ausführen des Codes Java Basics - Anfänger-Themen 25
M While-Schleifen-Fehler Java Basics - Anfänger-Themen 4
N Fehler bei JUnit Test Java Basics - Anfänger-Themen 5
C Projekte in 2 versch. Arbeitsbereichen: auf ein Projekt verweisen (ohne Fehler zu bekommen) Java Basics - Anfänger-Themen 8
R Java SQL Fehler! Java Basics - Anfänger-Themen 4
L non-static Fehler Java Basics - Anfänger-Themen 16

Ähnliche Java Themen

Neue Themen


Oben