Eine Mischung aus zwei Zeichenfolgen wird gebildet, indem die Zeichen in eine neue Zeichenfolge eingefügt werden, wobei die Zeichen der einzelnen Zeichenfolgen in der angegebenen Reihenfolge bleiben. Zum Beispiel MISSISSIPPI
ist ein Shuffle von MISIPP
und SSISI
. Lassen Sie mich einen String als Quadrat bezeichnen, wenn er aus zwei identischen Strings besteht. Zum Beispiel ABCABDCD
ist quadratisch, weil es sich um ein Shuffle von ABCD
und handelt ABCD
, aber die Zeichenfolge ABCDDCBA
ist nicht quadratisch.
Gibt es einen schnellen Algorithmus, um festzustellen, ob eine Zeichenfolge quadratisch ist, oder ist sie NP-hart? Der offensichtliche Ansatz der dynamischen Programmierung scheint nicht zu funktionieren.
Auch werden die folgenden besonderen Fälle schwer sein: (1) Zeichenkette , in denen jedes Zeichen höchstens erscheint vier sechs Mal, und (2) Saiten mit nur zwei unterschiedlichen Charakteren. Wie Per Austrin weiter unten ausführt, kann der Sonderfall, in dem jedes Zeichen höchstens viermal vorkommt, auf 2SAT reduziert werden.
Update: Dieses Problem hat eine andere Formulierung, die einen Härtenachweis erleichtern kann.
Man betrachte einen Graphen G, dessen Eckpunkte die ganzen Zahlen 1 bis n sind. Identifizieren Sie jede Kante mit dem tatsächlichen Abstand zwischen ihren Endpunkten. Wir sagen, dass zwei Kanten von G verschachtelt sind, wenn ein Intervall das andere enthält. Zum Beispiel sind die Kanten (1,5) und (2,3) verschachtelt, aber (1,3) und (5,6) nicht und (1,5) und (2,8) nicht. Eine Übereinstimmung in G ist nicht verschachtelt, wenn kein Kantenpaar verschachtelt ist. Gibt es einen schnellen Algorithmus, um festzustellen, ob G eine nicht verschachtelte perfekte Übereinstimmung aufweist, oder ist das Problem NP-schwer?
Das Entmischen eines Strings entspricht dem Auffinden einer nicht verschachtelten perfekten Übereinstimmung in einer disjunkten Cliquen-Union (mit Kanten zwischen gleichen Zeichen). Insbesondere eine unshuffling binär ist entsprechende Zeichenfolge eine nicht verschachtelte perfekte Abstimmung in disjunkter Vereinigung von zu finden zwei Cliquen. Aber ich weiß nicht einmal, ob dieses Problem für allgemeine Grafiken oder für interessante Grafikklassen schwierig ist.
Es gibt einen einfachen Polynom-Zeit-Algorithmus, um perfekte Nicht- Kreuzungs- Übereinstimmungen zu finden .
Update (24.06.2013): Das Problem ist behoben! Es gibt nun zwei unabhängige Beweise dafür, dass die Identifizierung quadratischer Zeichenfolgen NP-vollständig ist.
Im November 2012 kündigten Sam Buss und Michael Soltys eine Reduzierung von 3-Partitionen an , was zeigt, dass das Problem selbst für Zeichenfolgen über ein 9-stelliges Alphabet schwierig ist. Siehe "Ein Quadrat zu mischen ist NP-schwer ", Journal of Computer System Sciences 2014.
Im Juni 2013 veröffentlichten Romeo Rizzi und Stéphane Vialette eine Reduktion des längsten gemeinsamen Folgeproblems . Siehe " Zum Erkennen von Wörtern, die Quadrate für das Shuffle-Produkt sind ", Proc. 8. Internationales Informatik-Symposium in Russland , Springer LNCS 7913, S. 235–245.
Es gibt auch einen einfacheren Beweis , dass die Suche nach nicht-verschachteltem perfekt passenden NP-schwer ist , aufgrund Shuai Cheng Li und Ming Li im Jahr 2009. Siehe „ Auf zwei offene Problemen von 2-Intervall - Muster “, Theoretische Informatik 410 (24-25 ): 2410–2423, 2009.
quelle
Antworten:
Michael Soltys und mir ist es gelungen zu beweisen, dass das Problem der Bestimmung, ob eine Zeichenfolge als quadratische Mischung geschrieben werden kann, NP-vollständig ist. Dies gilt auch für ein endliches Alphabet mit nur verschiedenen Symbolen, obwohl unser Beweis für ein Alphabet mit Symbolen geschrieben wurde. Diese Frage ist noch offen für kleinere Alphabete, beispielsweise mit nur Symbolen. Wir haben nicht das Problem , unter der Einschränkung , dass jedes Symbol betrachtet erscheint nur mal (oder, allgemeiner, eine konstante Anzahl von Malen); also diese frage ist noch offen.9 2 67 9 2 6
Der Beweis verwendet eine Reduktion von Partition. Es ist zu lang, um hier etwas zu posten, aber ein Vorabdruck mit dem Titel "Eine Zeichenfolge entmischen ist -hard" ist auf unseren Webseiten unter folgender Adresse verfügbar:NP3 NP
http://www.math.ucsd.edu/~sbuss/ResearchWeb/Shuffle/
und
http://www.cas.mcmaster.ca/~soltys/#Papers .
Der Artikel wurde im Journal of Computer System Sciences veröffentlicht:
http://www.sciencedirect.com/science/article/pii/S002200001300189X
quelle
Für den Sonderfall, den Sie erwähnen, wenn jedes Zeichen höchstens viermal vorkommt, gibt es eine einfache Reduktion auf 2-SAT (es sei denn, ich vermisse etwas ...), wie folgt:
Der entscheidende Punkt ist, dass es für jedes Zeichen (höchstens) zwei gültige Möglichkeiten gibt, die Vorkommen des Zeichens abzugleichen (die dritte Möglichkeit ist das Verschachteln). Verwenden Sie eine boolesche Variable, um darzustellen, welche der beiden Übereinstimmungen ausgewählt wurde. Nun ergibt eine Zuweisung zu diesen Variablen ein gültiges Auflösen der Zeichenfolge, wenn für jedes Kantenpaar, das verschachtelt ist, nicht beide ausgewählt wurden. Diese Bedingung kann durch eine Disjunktion der Variablen (möglicherweise negiert) entsprechend den zwei beteiligten Zeichen genau beschrieben werden.
quelle
Hier ist ein Algorithmus, der eine gewisse Chance hat, korrekt zu sein, obwohl es schwierig zu beweisen scheint, und ich würde das Haus nicht darauf wetten ...
Nach der gierigen Auswahl löschen wir den Graphen erneut und so weiter. Der Prozess endet, wenn der Graphen (hoffentlich) eine perfekte Übereinstimmung ohne Verschachtelung darstellt.
Zuerst dachte ich, das wäre ungefähr so, als hätte man einen kleinen Ausblick auf den gierigen Algorithmus und würde nicht wirklich funktionieren, aber ich fand es überraschend schwierig, ein Gegenbeispiel zu finden.
quelle
Die von Sam Buss und mir im November 2012 vorgeschlagene Lösung (die zeigt, dass ein Quadrat in NP-hard durch Reduzierung von 3-Partition entmischt wird) ist jetzt ein im Journal of Computer System Sciences veröffentlichter Artikel:
http://www.sciencedirect.com/science/article/pii/S002200001300189X
quelle
Romeo Rizzi und Stéphane Vialette beweisen, dass das Erkennen von quadratischen Zeichenfolgen in ihrem 2013 erschienenen Aufsatz " Über das Erkennen von Wörtern, die Quadrate für das Zufallsprodukt sind " NP-vollständig ist , indem sie das längste binäre Teilfolgeproblem reduzieren. Sie geben an, dass die Komplexität des Unmischens einer binären Zeichenfolge noch offen ist.
Ein noch einfacherer Beweis dafür, dass das Finden einer nicht verschachtelten perfekten Übereinstimmung NP-vollständig ist, wird von Shuai Cheng Li und Ming Li in ihrer Arbeit von 2009 " Über zwei offene Probleme von 2-Intervall-Mustern " gegeben. Sie verwenden jedoch eine von der Bioinformatik übernommene Terminologie. Anstelle von "Perfect Non-Nested Matching" nennen sie es das "DIS-2-IP- -Problem". Die Äquivalenz zwischen den beiden Problemen wird von Blin, Fertin und Vialette beschrieben :{<,≬}
Update (25. Februar 2019): Bulteau und Vialette haben gezeigt, dass das Entscheidungsproblem beim Entmischen einer binären Zeichenfolge in ihrem Artikel NP-vollständig ist. Das Erkennen von binären Mischquadraten ist NP-schwer .
quelle
Hilft das?
http://users.soe.ucsc.edu/~manfred/pubs/J1.pdf
quelle
NIEMALS VERSTÄNDNIS, DIESE ANTWORT IST FALSCH. Bei Eingabe von "AABAAB" schlägt dies fehl: Wenn die ersten beiden A gierig miteinander verglichen werden, ist es unmöglich, die verbleibenden Symbole zuzuordnen. Ich lasse es lieber liegen, als es zu löschen, damit andere nicht den gleichen Fehler machen.
Es scheint mir immer sicher zu sein, jedes nachfolgende Zeichen des vermeintlichen Quadrats gierig einem anderen gleichen Zeichen zuzuordnen, das sich in einer möglichst frühen Position befindet. Das heißt, ich denke, der folgende lineare Zeitalgorithmus sollte funktionieren:
Durchlaufen Sie jede Position i in der Eingabezeichenfolge, i = 0, 1, 2, ... n. Überprüfen Sie für jede Position i, ob diese Position bereits mit einer früheren Position in der Zeichenfolge abgeglichen wurde. Wenn nicht, vergleichen Sie es mit einem gleichen Zeichen, das nach der letzten bereits übereinstimmenden Position kommt und ansonsten so früh wie möglich in der Zeichenfolge ist. Wenn für ein Zeichen keine Übereinstimmung gefunden wird, deklarieren Sie, dass die Eingabe kein Quadrat ist. Andernfalls handelt es sich um den Zeichensatz im ersten Paar jeder Übereinstimmung.
Hier ist es in Python:
Hier ist i die Hauptschleifenvariable (die Position, mit der wir übereinstimmen wollen), j ist ein Zeiger auf das Array von übereinstimmenden Paaren, der die Überprüfung beschleunigt, ob die Position i bereits übereinstimmt, und k ist ein Index, der zum Suchen verwendet wird das Zeichen, das mit dem Zeichen an Position i übereinstimmt. Es ist eine lineare Zeit, da i, j und k durch die Zeichenfolge monoton ansteigen und jede Iteration der inneren Schleife eine von ihnen erhöht.
quelle
Update: Es ist nicht sinnvoll, über die Schwierigkeit zu sprechen, eine perfekte Übereinstimmung zu finden, die nicht verschachtelt und nicht gekreuzt ist, wenn die Bezeichnungen von 1 bis n reichen, da es nur eine solche gibt. (Ja, ich mache mir selbst einen Kick.) Es wäre jedoch sinnvoll, wenn man einen größeren Bereich auf den Etiketten ansieht ... also sehe ich immer noch Hoffnung, aber es könnte doch ziemlich sinnlos sein. Ich würde das sicherlich noch weiter verfolgen müssen.
Ich kann mir vorstellen, warum es schwierig sein könnte, ein Matching zu finden, das nicht verschachtelt und nicht kreuzt. Lassen Sie mich ein solches Matching als disjunktes Matching bezeichnen . Ich bin mir nicht sicher, inwieweit dies hilft, aber ich möchte die Argumentation trotzdem vorstellen. (Ich möchte darauf hinweisen, dass meine Argumentation in der jetzigen Form nicht vollständig ist und das Detail, das ich auslasse, möglicherweise von entscheidender Bedeutung ist. Ich stelle mir jedoch vor, dass dies ein Anfang sein könnte.)
Ich werde mit einem etwas anderen Problem beginnen. Gibt es bei einem Graphen dessen Kanten mit Farben gefärbt sind und dessen Eckpunkte mit bis , eine disjunkte Übereinstimmung, die genau eine Kante jeder Farbe enthält? Dieses Problem scheint NP-schwer zu sein (das Argument dafür ist sowohl vollständig als auch unkompliziert - es sei denn, mir fehlt etwas). Die Reduktion spuckt einen Graphen aus, der eine disjunkte Vereinigung von Cliquen darstellt.k 1 nG k 1 n
Die Reduktion beruht auf Disjoint Factors , einem NP-vollständigen Problem, das in [1] eingeführt wurde. Eine Instanz von disjunkten Faktoren wird durch eine Zeichenfolge über einem Alphabet der Größe , und die Frage ist, ob es disjunkte Faktoren gibt, wobei ein Faktor eine Teilzeichenfolge ist, die mit demselben Buchstaben beginnt und endet. und zwei Faktoren sind unzusammenhängend, wenn sie sich in der Zeichenfolge nicht überlappen (beachten Sie, dass insbesondere das Verschachteln ebenfalls nicht zulässig ist).kk k
Lassen Sie mich mit die Elemente des großen Alphabets bezeichnen, die der Disjoint Factors-Instanz zugeordnet sind.a1,…,ak k
Erstellen Sie bei einer Instanz von disjunkten Faktoren, dh einer Zeichenfolge mit der Länge , ein Diagramm mit Scheitelpunkten mit Scheitelpunktbezeichnungen von bis . Fügen Sie eine Kante zwischen den Eckpunkten und wenn die entsprechenden Positionen den gleichen Buchstaben haben (sagen Sie ), und färben Sie die Kante mit Farbe .n n 1 n u v ai (u,v) i
Der Nachweis der Reduktion ergibt sich im Wesentlichen aus den Definitionen. Bei disjunkten Faktoren haben wir eindeutig ein disjunktes farbiges Matching, wählen Sie lediglich die durch die disjunkten Faktoren gegebenen Kanten aus, und es ist leicht zu erkennen, dass das resultierende Matching sowohl bunt als auch disjunkt ist. Wenn es umgekehrt eine disjunkte farbige Übereinstimmung gibt, haben wir k disjunkte Faktoren, einen für jeden Buchstaben, weil die Übereinstimmung bunt ist (und daher einen Faktor pro Buchstabe auswählt) und disjunkt ist (so dass sich die entsprechenden Faktoren nicht überlappen würden) ).k k k
Nehmen Sie die folgenden Änderungen an der so erstellten Grafik vor , um die Farben zu entfernen und die Übereinstimmung zu perfektionieren, wenn auch in einem möglicherweise größeren Bereich :
Es sei die Teilmenge von Eckpunkten mit Bezeichnungen, die Positionen sind, die dem Buchstaben . Wenn hat Eckpunkte, fügen Sie dann neue Eckpunkte und induziert ein komplettes zweiteiliges Graphen zwischen und den neu hinzugekommenen Ecken. Wiederholen Sie dies natürlich für jeden Buchstaben.Ua a Ua A (A−2) Ua
Grob gesagt müssen die neu eingeführten Scheitelpunkte mit den Scheitelpunkten von abgeglichen werden, wenn der Graph eine perfekte Übereinstimmung hervorrufen soll. Mit eines Scheitelpunktpaars werden alle Scheitelpunkte gesättigt, und die Kante zwischen den verbleibenden Scheitelpunkten entspricht dem Disjunktionsfaktor . Ich habe die Zahlen, die man mit den neu hinzugefügten Eckpunkten verknüpfen muss, nicht ausgearbeitet ... beachte, dass sie so sein müssen, dass die resultierende Übereinstimmung disjunkt ist. Ich habe nur das Gefühl (lese: hoffe), dass es getan werden kann!Ua
[1] Zu Problemen ohne Polynomkerne : Hans L. Bodlaender, Rodney G. Downey, Michael R. Fellows und Danny Hermelin, J. Comput. Syst. Sci.
quelle
Der Ansatz funktioniert nicht: Das Zerlegen eines gemischten Quadrats durch Herausnehmen zweier übereinstimmender Buchstaben führt nicht zu gemischten Quadraten ... Siehe Radus Kommentare unten.
Ein Vorschlag mit Bereich Verkettungs Grammatiken (RCG siehe http://hal.inria.fr/inria-00073347/en/ ): IchΣ
bin‘habe den Eindruck, dass die folgende einfache RCG Ihre Sprache über einen endlichen‚Quadrate gemischt‘erkennt Alphabet , BEARBEITET nach Radus erstem Kommentar: wobei Bereich über und das bezeichnet Zeichenfolge.Die Grammatik prüft mit dem zweiten Prädikat, ob ein Buchstabe des ersten Wortvorkommens mit dem gleichen Buchstaben des zweiten Wortvorkommens übereinstimmt. Dann wird erraten, wie der Rest der verbleibenden ersten , dh mit einem Teil des Restes, nämlich , . Alles vor gehört daher zur ersten ; Wir nennen es und wir vermuten, dass es mit einem Suffix ab . Beachten Sie, dass und möglicherweise Buchstaben aus beiden Instanzen des Wortes enthalten, und nur Buchstaben aus der ersten Instanz.X1 Y1 Y1 X2 Y2 Y1 Y2 X1 X2
Zum Beispiel ist hier eine mögliche Ableitung Ihres Strings :abcabdcd
Für ist0011
Nun zeigen Boullier in dem zuvor verknüpften Papier , dass es ein dynamisches Programmierung Polynomialzeitalgorithmus für RCG, das Ihre Frage beantwortet , ob die obige GrammatikX Y
istrichtig war. Die Idee ist, dass, obwohl ich oben die Instanzen der Variablen , usw. als Zeichenfolgen dargestellt habe, es sich tatsächlich um Intervalle innerhalb der Eingabezeichenfolge handelt, die ordnungsgemäß tabelliert werden können.quelle
Update: Wie Tsuyoshi Ito in den Kommentaren ausführt, hat dieser Algorithmus eine exponentielle Laufzeit.
Ursprünglicher Beitrag:
Hier ist, wie ich das in der realen Welt programmieren würde.
Wir erhalten eine Zeichenkette S = (S [1], ..., S [n]). Für jedes Präfix S_r = (S [1], ..., S [r]) gibt es eine Menge {(T_i, U_i)} von Zeichenfolgenpaaren, so dass S_r eine Mischung von (T_i, U_i) ist. und T_i ist ein Präfix von U_i (dh U_i 'beginnt mit' T_i '). S_r selbst ist genau dann ein Quadrat, wenn diese Menge ein Paar (T_i, U_i) mit T_i = U_i enthält.
Nun müssen wir nicht alle diese Paare erzeugen; wir müssen nur das Suffix V_i jeder Zeichenkette U_i erzeugen, die durch Entfernen ihrer Kopie von T_i erhalten wird. Dadurch wird eine (möglicherweise exponentielle) Anzahl irrelevanter Duplikate beseitigt. Jetzt ist S_r genau dann ein Quadrat, wenn diese Gruppe von Suffixen die leere Zeichenfolge enthält. So wird der Algorithmus:
Zum Beispiel, wenn S AABAAB ist:
Wir können alle Suffixe verwerfen, die länger als die Hälfte der Eingabezeichenfolge sind. Dies vereinfacht Folgendes:
Ich habe dies in C ++ programmiert und es funktioniert an allen hier angegebenen Beispielen. Ich kann den Code posten, wenn jemand daran interessiert ist. Die Frage ist: Kann die Größe von SuffixSet schneller als polynomial wachsen?
quelle
EDIT: Dies ist eine falsche Antwort.
Sylvain schlug ein RCG vor, das für diese "Shuffle Squares" leider nicht geeignet war. Ich denke jedoch, dass es einen gibt (EDIT: kein RCG, siehe Kurts Kommentare unten!) , Der wie folgt aussieht:
Hier ist eine Ableitung für (ein Gegenbeispiel zu RCG):100110101010
Ich habe keinen formalen Beweis dafür erarbeitet, dass diese Grammatik tatsächlich genau die "Zufallsquadrate" erfasst, aber es sollte nicht zu schwer sein. Sylvain erwähnte bereits, dass das Entscheidungsproblem für RCGs polynomisch ist.
quelle