Ich versuche zu finden, wie viele Zeichen ich löschen müsste, um die beiden Wörter gleich zu machen. Zum Beispiel "at", "cat" wäre 1, weil ich das c löschen könnte, "boat" und "got" wäre 3, weil ich die b, a und g löschen könnte, um es zu ot zu machen. Ich lege die Wörter in ein Wörterbuch mit ihrer Zählung als Wert. Dann iteriere ich über das Wörterbuch und sehe, ob dieser Schlüssel in dem anderen Wörterbuch existiert, ansonsten füge ich 1 zu der Differenz hinzu. Ist das ein sehr ineffizienter Algorithmus?Löschabstand zwischen Wörtern
Aber es überschätzt die Anzahl der Löschungen, die ich brauche.
def deletiondistance(firstword, secondword):
dfw = {}
dsw = {}
diff = 0
for i in range(len(firstword)):
print firstword[i]
if firstword[i] in dfw:
dfw[firstword[i]]+=1
else:
dfw[firstword[i]]=1
for j in range(len(secondword)):
if secondword[j] in dsw:
dsw[secondword[j]] +=1
else:
dsw[secondword[j]]=1
for key, value in dfw.iteritems():
if key in dsw:
#print "key exists"
pass
else:
diff +=1
print "diff",diff
Ihr Algorithmus ist eindeutig falsch: 'deletiondistance ("Hallo", "Hallo, Welt")' gibt '0'. – DyZ
Es macht nur ein Wort. – justcurious
Derselbe Unterschied: 'Deletedistance (" Hello "," Helloworld ")' gibt '0'. – DyZ