Wie in diesem aktuellen XKCD-Strip und diesem aktuellen Blog-Post zu sehenVon Peter Norvig (und einer Slashdot-Geschichte mit letzterem) ist "Regex Golf" (das besser als das Problem der Trennung regulärer Ausdrücke bezeichnet werden könnte) das Rätsel, den kürzestmöglichen regulären Ausdruck zu definieren, der jedes Wort in Satz A und kein Wort in Satz A akzeptiert Set B. Norvigs Beitrag enthält einen Algorithmus zur Generierung eines relativ kurzen Kandidaten. Er merkt an, dass sein Ansatz die Lösung eines NP-vollständigen Set-Cover-Problems beinhaltet. Er weist jedoch auch darauf hin, dass sein Ansatz nicht alle möglichen regulären Ausdrücke berücksichtigt. und natürlich ist er nicht notwendigerweise der einzige Algorithmus, daher kann nicht garantiert werden, dass seine Lösungen optimal sind, und es ist auch möglich, dass ein anderer Algorithmus mit sicherer Polynomzeit äquivalente oder bessere Lösungen findet.
Der Vollständigkeit halber und um zu vermeiden, dass die Optimierungsfrage gelöst werden muss, würde die natürlichste Formulierung für die Trennung regulärer Ausdrücke lauten:
Gibt es bei zwei (endlichen) Mengen und von Zeichenketten über ein Alphabet einen regulären Ausdruck der Länge , der jede Zeichenkette in akzeptiert und jede Zeichenkette in ablehnt ?
Ist etwas über die Komplexität dieses speziellen Trennungsproblems bekannt? (Da ich und als endliche Mengen von Zeichenfolgen angegeben habe, ist der natürliche Größenbegriff für das Problem die Gesamtlänge aller Zeichenfolgen in und ; dies überflutet jeden Beitrag von ). Es scheint sehr mir wahrscheinlich , dass es ist NP-vollständig (und in der Tat würde ich die Reduktion auf eine Art Abdeckung Problem zu sein erwarten) , aber ein paar Recherchen haben nicht aufgedreht etwas besonders nützlich.