, und sind zwei Zeichenfolgen gleicher Länge. Eine Darstellung von zwei Zeichenfolgen ist eine bijektive Abbildung von so dass für jedes .b 1 b 2 … b na i = b p ( i ) i
Es kann mehr als ein Diagramm für dasselbe Zeichenfolgenpaar geben. Zum Beispiel, wenn `abcab` und wir haben und unter anderem.b = p 1 [ 1 , 2 , 3 , 4 , 5 ] → [ 4 , 5 , 1 , 2 , 3 ] p 2 [ 1 , 2 , 3 , 4 , 5 ] → [ 2 , 5 , 1 , 4 , 3 ]cabab
Wir werden sagen, dass das Gewicht eines Anagramms die Anzahl der Schnitte ist, die in der ersten Zeichenfolge ausgeführt werden müssen, um Blöcke zu erhalten, die neu angeordnet werden können, um die zweite Zeichenfolge zu erhalten. Formal ist dies die Anzahl der Werte von für die . Das heißt, er die Anzahl der Punkte ist , bei der ist nicht durch genau 1.Bei Beispiel erhöhen, und , da schneidet einmal in die Brocken und und p_2 Schnitte vier mal in fünf Stücke.12345
123
45
12345
Angenommen, es gibt ein Anagramm für zwei Zeichenfolgen und . Dann muss mindestens ein Anagramm das geringste Gewicht haben. Nehmen wir an, dies ist das leichteste . (Möglicherweise gibt es mehrere leichteste Anagramme. Das ist mir egal, da ich nur an den Gewichten interessiert bin.)
Frage
Ich möchte einen Algorithmus, der bei zwei Strings, für die ein Anagramm existiert, effizient das genaue Gewicht des leichtesten Anagramms der beiden Strings ergibt . Es ist in Ordnung, wenn der Algorithmus auch ein leichtestes Diagramm liefert, muss es aber nicht.
Es ist ziemlich einfach, alle Anagramme zu generieren und zu wägen, aber es kann viele geben, daher würde ich eine Methode bevorzugen, die leichte Anagramme direkt findet.
Motivation
Der Grund, warum dieses Problem von Interesse ist, ist folgender. Es ist sehr einfach, den Computer das Wörterbuch durchsuchen zu lassen und Anagramme zu finden, Wortpaare, die genau dieselben Buchstaben enthalten. Viele der erstellten Anagramme sind jedoch uninteressant. Die längsten Beispiele im zweiten internationalen Wörterbuch von Webster sind:
Cholezystoduodenostomie
Duodenocholezystostomie
Das Problem sollte klar sein: diese uninteressant sind , weil sie einen sehr leichten Anagrammieren dass einfach tauscht die zugeben cholecysto
, duedeno
und stomy
Abschnitte, bei einem Gewicht von 2. Andererseits ist diese viel kürzer Beispiel ist viel mehr überraschend und interessant:
Küste
Schnitts
Hier hat das leichteste Diagramm das Gewicht 8.
Ich habe ein Programm, das diese Methode verwendet, um interessante Anagramme zu lokalisieren, und zwar solche, für die alle Anagramme ein hohes Gewicht haben. Dies geschieht jedoch durch Generieren und Abwägen aller möglichen Anagramme, was langsam ist.
cholecystoduodenostomy
ist ccddeehlmnooooossttuyy
.) Zwei Worte Anagramme sind , wenn und nur wenn sie die gleiche kanonische Form haben. Sie speichern die Wörter in einer Hash-Tabelle, die durch ihre kanonischen Formen gekennzeichnet ist. Wenn Sie eine Kollision finden, erhalten Sie ein Anagramm.