Die Regeln für die Konstruktion eines netten Wortes implizieren, dass jedes nette Wort mit "a" beginnt und mit "b" endet. Daher gibt es eine eindeutige (bis Sequenzing - Regel 3) Dekomposition eines netten Wortes in nette Unterwörter: finde alle "ab" s, und versuche dann, sie mit Regel 2 zu erweitern, und folge sie mit Regel 3. Wir kann diese Zerlegung über einen Baum ausdrücken (n Zweige zur wiederholten Anwendung von Regel 3).
Im Baumkontext drückt die "~" Relation einfach isomorphe Bäume aus, denke ich (wobei die Verzweigungsreihenfolge keine Rolle spielt).
BEARBEITEN: wie bereits erwähnt, spielt die Reihenfolge der Zweige eine Rolle.
Ich werde versuchen, das Problem zu lösen, wie im ursprünglichen Link angegeben (die 2 Definitionen von "nett" stimmt nicht überein).
Zuerst Ähnlichkeit zwischen zwei Wörtern X und Y, mit DP.
Definieren Sie f(a, b, n)
als die Funktion, die angibt, dass X[a..a+2n-1]
Y[b..b+2n-1]
ähnlich ist und dass beide Unterwörter nett sind.
f(a, b, 0) = 1.
für n> 0,
f(a, b, n) = f1(a, b, n) or f2(a, b, n) or f3(a, b, n)
f1(a, b, n) = x[a] == y[b] == 'a' and x[a+2n-1] == y[b+2n-1] == 'b' and f(a+1, b+1, n-1)
f2(a, b, n) = any(1 <= k < n) f(a, b, k) and f(a+2k, b+2k, n-k)
f3(a, b, n) = any(1 <= k < n) f(a, b+2(n-k), k) and f(a+2k, b, n-k)
Ich denke, diese ist O (n^4) (urgh).
Für den zweiten Teil, wenn Sie die Wörter als ein Graph mit Kanten darstellen, die die Ähnlichkeitsrelation darstellen, versuchen Sie im Wesentlichen, die maximale unabhängige Menge zu finden, denke ich. Wenn ja, viel Glück! Es ist NP-hart (dh keine bekannt bessere Lösung als alle Kombinationen zu versuchen) im allgemeinen Fall, und ich sehe keine Eigenschaften, die es leichter in diesen machen :(
EDITED, um die Definition zu machen die Ähnlichkeit automatisch Nettigkeit prüft es ist ganz einfach
EDITED noch einmal wegen meiner Dummheit
Wer stimmte schließen: natürlich ist es eine echte Frage es ist ein Problem in einem Programmierwettbewerb - wenn.... das ist keine relevante Frage zu SO, dann weiß ich nicht, was ist. –
eigentlich die Definition von "nett" ist nicht das gleiche wie die ursprüngliche Problemstellung. Diese Definition lässt nur eine gerade Anzahl von Buchstaben zu! – lijie
@lijie: "Wenn es so viele Buchstaben a wie b hat", so muss die Anzahl der Buchstaben gerade sein. –