Comme on le voit dans cette récente bande XKCD et ce récent article de blogde Peter Norvig (et une histoire de Slashdot mettant en vedette ce dernier), "regex golf" (qui pourrait mieux être appelé le problème de séparation des expressions régulières) est le casse-tête de définir l'expression régulière la plus courte possible qui accepte chaque mot de l'ensemble A et aucun mot de le poste de B. Norvig comprend un algorithme pour générer un candidat raisonnablement court, et il note que son approche consiste à résoudre un problème de NP Set complet, mais il prend également soin de souligner que son approche ne prend pas en compte toutes les expressions régulières possibles, et bien sûr, ce n'est pas nécessairement le seul algorithme, donc ses solutions ne sont pas garanties d'être optimales, et il est également possible qu'un autre algorithme à temps polynomial assurément puisse trouver des solutions équivalentes ou meilleures.
Pour le concret et pour éviter d'avoir à résoudre la question d'optimisation, je pense que la formulation la plus naturelle de la séparation des expressions régulières serait:
Étant donné deux ensembles (finis) et de chaînes sur un alphabet , existe-t-il une expression régulière de longueur qui accepte chaque chaîne de et rejette chaque chaîne de ?B Σ ≤ k A B
Connaît-on la complexité de ce problème de séparation particulier? (Notez que puisque j'ai spécifié et comme ensembles finis de chaînes, la notion naturelle de taille pour le problème est la longueur totale de toutes les chaînes en et ; cela submerge toute contribution de ). Il me semble très probable qu'il est NP-complet (et en fait, je m'attendrais à ce que la réduction soit à une sorte de problème de couverture), mais quelques recherches n'ont rien trouvé de particulièrement utile.B A B k