Come visto in questa recente striscia XKCD e in questo recente post sul blogda Peter Norvig (e una storia di Slashdot con quest'ultima), "regex golf" (che potrebbe essere chiamato il problema della separazione delle espressioni regolari) è l'enigma di definire l'espressione regolare più breve possibile che accetta ogni parola nel set A e nessuna parola in il post di B. Norvig include un algoritmo per generare un candidato ragionevolmente breve e nota che il suo approccio prevede la risoluzione di un problema di Set Cover NP completo, ma è anche attento a sottolineare che il suo approccio non considera ogni possibile espressione regolare, e ovviamente il suo non è necessariamente l'unico algoritmo, quindi le sue soluzioni non sono garantite per essere ottimali, ed è anche possibile che alcuni altri algoritmi in tempo polinomiale possano trovare soluzioni equivalenti o migliori.
Per ragioni di concretezza e per evitare di dover risolvere la domanda di ottimizzazione, penso che la formulazione più naturale della separazione delle espressioni regolari sarebbe:
Dati due insiemi (finiti) e B di stringhe su un po 'di alfabeto Σ , esiste un'espressione regolare di lunghezza ≤ k che accetta ogni stringa in A e rifiuta ogni stringa in B ?
Si sa qualcosa sulla complessità di questo particolare problema di separazione? (Da notare che da quando ho specificato e B come insiemi finiti di stringhe, la nozione naturale di dimensione per il problema è la lunghezza totale di tutte le stringhe in A e B ; questo sommerge qualsiasi contributo da k ). Mi sembra molto probabile che sia NP-completo (e in effetti, mi aspetto che la riduzione sia dovuta a una sorta di problema di copertura) ma alcune ricerche non hanno rivelato nulla di particolarmente utile.