Informelle Problemstellung:
Bei einer gegebenen Zeichenfolge, z. B. , möchten wir einige Buchstaben rot und einige Buchstaben blau (und einige überhaupt nicht) färben, sodass das Lesen nur der roten Buchstaben von links nach rechts dasselbe Ergebnis ergibt wie das Lesen nur der blauen Buchstaben.
Im Beispiel könnten wir sie folgendermaßen einfärben:
Wir sagen daher, dass eine wiederholte Folge von ACCABBAB ist . Es ist auch eine am längsten wiederholte Folge (die leicht zu überprüfen ist).A C C A B B A B
Können wir die längsten wiederholten Teilfolgen effizient berechnen?
Formale Frage:
Ist es NP-schwer, sich für eine Zeichenkette und ein k zu entscheiden , ob eine wiederholte Folge der Länge in der Zeichenkette existiert?
- Wenn ja: Welches Problem kann auf dieses Problem reduziert werden?
- Wenn nicht: Was ist ein effizienter Algorithmus? (Natürlich kann dieser Algorithmus dann verwendet werden, um eine längste wiederholte Teilsequenz zu berechnen.)
Bonus-Frage:
Wird es immer eine wiederholte Folge der Länge wenn die Größe des Alphabets durch eine Konstante begrenzt ist?
(Dies gilt bekanntermaßen für binäre Alphabete.)
Bearbeiten 2: Die negative Antwort auf die Bonusfrage ist bereits für Alphabete mit einer Größe von mindestens . Tatsächlich gibt es für Alphabete der Größe Σ Zeichenfolgen mit den längsten wiederholten Teilfolgen mit einer Länge von lediglich O (n · Σ ^ {- 1/2}) . Zufällige Zeichenfolgen genügen, um dies zu zeigen. Das Ergebnis gab es bereits, aber ich habe es übersehen.Σ O ( n · Σ - 1 / 2 )
Bearbeiten: Hinweis:
Einige Leute meinen "Teilzeichenfolge", wenn sie "Teilfolge" sagen. Ich nicht. Dies ist nicht das Problem, zweimal einen Teilstring zu finden.