Alternative zum Hamming-Abstand für Permutationen

8

Ich habe zwei Saiten, von denen eine eine Permutation der anderen ist. Ich habe mich gefragt, ob es eine Alternative zur Hamming-Distanz gibt, bei der anstelle der Mindestanzahl an erforderlichen Substitutionen die Mindestanzahl an Translokationen ermittelt wird, die erforderlich sind, um von Zeichenfolge a zu Zeichenfolge b zu wechseln .

Meine Zeichenfolgen sind immer gleich groß und ich weiß, dass es keine Fehler / Ersetzungen gibt.

Beispiel:

1 2 3 4 5
3 2 5 4 1

Dies würde mir zwei geben:

3 2 5 4 1 (start)
-> 3 2 1 4 5 
-> -> 1 2 3 4 5

Wenn dies bereits in R implementiert ist, wäre das noch besser.

user1357015
quelle
3
Sieht so aus, als ob Sie die Bearbeitungsentfernung (auch bekannt als Levenshtein-Entfernung) möchten?
Siehe diese Frage zu Stackoverflow .
Die Unfun Cat
2
In Ihrem speziellen Beispiel, in dem die Zeichen der Zeichenfolge eine implizite Reihenfolge haben, möchten Sie möglicherweise Inversionen zählen. en.wikipedia.org/wiki/Inversion_(discrete_mathematics)
Joe
1
Es kann unaufrichtig sein, alle diese Distanzfunktionsmetriken aufzurufen, da viele die Dreiecksungleichung möglicherweise nicht befolgen.
Nicholas Mancuso
1
Mit Translokation meinen Sie das Spiegelbild eines Teils der Sequenz?
HighBandWidth

Antworten:

3

Das Finden der minimalen Entfernung wird als "Sortieren nach Translokation" bezeichnet. Teil eines Abstracts aus einem Papier :

"Bei zwei signierten multichromosomalen Genomen Pi und Gamma mit demselben Gensatz besteht das Problem der Sortierung nach Translokationen (SBT) darin, eine kürzeste Sequenz von Translokationen zu finden, die Pi in Gamma umwandeln, wobei die Länge der Sequenz als Translokationsentfernung bezeichnet wird zwischen Pi und Gamma. 1996 gab Hannenhalli erstmals die Formel der Translokationsentfernung an, auf deren Grundlage eine Ö(n3)Algorithmus für SBT wurde angegeben. Im Jahr 2005 haben Anne Bergeron et al. hat dieses Problem erneut aufgegriffen und einen elementaren Beweis für die Formel der Translokationsentfernung gegeben, die zu einer neuen führtÖ(n3) Algorithmus für SBT. "

Was hier als "Translokation" bezeichnet wird, wird als Transposition bezeichnet, dh als Permutation von genau zwei Elementen in einer Liste in traditioneller kombinatorischer Sprache.

Bitweise
quelle
Genau das brauche ich! Kennen Sie zufällig eine funktionierende Implementierung in C oder R? Es scheint keinen in der Zeitung zu geben!
user1357015
@ user1357015 google es ein bisschen und schaue durch ihre Referenzen, ich bin sicher, dass Sie eine Implementierung finden werden. Ich werde auch schauen. Beachten Sie auch die letzte Zeile, die von jemandem hinzugefügt wurde - möglicherweise suchen Sie nach etwas anderem, das als "Umkehrung" bezeichnet wird. Pavel Pevzner hat mehrere Artikel dazu.
Bitweise
@ user1357015 hat hier Python-Code gefunden und dies könnte auch hilfreich sein.
Bitwise
@Bitwise Beachten Sie, dass Stack - Überlauf ist die Website , die Sie für den tatsächlichen Code zu gehen.
Raphael
0

Wir müssen die minimale Anzahl von Transpositionen finden, die eine Zeichenfolge benötigen ein zu einer anderen Zeichenfolge b, wo ein,bsind Permutationen. Es sieht so aus, als würden Sie nach dem Mindestabstand zwischen zwei gegebenen Eckpunkten suchenein,bS.n im vollständigen Transpositionsgraphen, der der Cayley-Graph von ist S.n generiert durch die Menge aller Transpositionen.

Ashwin Ganesan
quelle