Stellen Sie sich eine Liste von Wörtern haben:Finden äquivalente Wörter in einer Liste durch willkürliche Zuordnung
['cat', 'ant', 'bro', 'gro']
eine beliebige Abbildung verwenden, die wir selbst {'c'=>'a', 'a'=>'n', 't'=>'t' }
konstruieren, können wir ‚Katze‘ auf ‚Ameise‘ Karte, und in ähnlicher Weise Wir können eine beliebige Zuordnung finden, um 'bro' in 'gro' umzuwandeln.
Dies ist die Idee, Wörter zu finden, die gleichwertig sind. Ich schrieb eine Funktion, die zwei Wörter vergleicht und prüft, ob sie äquivalent durch eine Mapping-I on the fly konstruieren:
def compareWords(w1, w2):
mapping = {}
for i in xrange(0, len(w1)):
if w1[i] in map:
if mapping[w1[i]] == w2[i]:
continue
else:
return False
else:
mapping[w1[i]] = w2[i]
return True
Beispiel Eingabe:
['cat', 'ant', 'bro', 'gro']
Beispiel Ausgang:
[['cat','ant'], ['bro', 'gro']]
Die Verwendung dieser Funktion für jedes Wortpaar in der Liste, um eine Ausgabeliste von Listen äquivalenter Wörter zurückzugeben, läuft in O (n^2), da jedes Paar t benötigt o verglichen werden. Ich habe diesen Teil, bei dem ich diese Methode oben verwende, nicht in der Eingabeliste implementiert und die Ausgabeliste generiert, da diese Methode nicht der effiziente Vergleich ist, nach dem ich suche. Gibt es eine Möglichkeit in O (n) Zeit äquivalente Wörter in dieser Liste zu finden?
Weitere Erläuterung: Wenn ich eine Liste von Worten, und ich möchte alle „gleichwertig“ Worte zu finden, würde ich brauchen, um die Kontrollen in Wortpaaren zu machen. Wenn alle Buchstaben der Wörter, die ich vergleiche, eindeutig sind, dann ist ein anderes Wort in der Liste nur äquivalent zu diesem ersten Wort, wenn alle Buchstaben in dem zweiten Wort ebenfalls eindeutig sind. Daher kann abc auf xyz abgebildet werden, wenn xyz in der Liste ist. xyz kann auf pqr abgebildet werden, wenn sich xyz in der Liste befindet. In Anbetracht dessen sind abc, xyz und pqr alle gleichwertig. Das ist die Art von Gruppierung, nach der ich suche.
soll die map erzeugt werden oder ist sie vordefiniert? Warum initialisierst du es als leeres Diktat neu? Man könnte es auch 'Mapping' nennen, da' map' mit der eingebauten Funktion kollidiert. – Bahrom
Ich folge nicht, was ist die Eingabe und Ausgabe des Algorithmus. Sie suchen nach einer Zuordnung, nach der Sie jedes Wort einem Wort zuordnen können? Wenn es nicht minimal sein muss: 'return {a, ..., z} X {a, ..., z}'. Wenn es minimal sein muss, ist Ihr Algorithmus falsch. – amit
Bitte liefern Sie ein Beispiel mit Ein- und Ausgabe – niklas