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
la source
Réponses:
En supposant la variante TCS de l'expression régulière, le problème est en effet NP-complet.
Nous supposons que nos regex contiennent
et rien d'autre. La longueur d'une expression régulière est définie comme le nombre de caractères de . Comme dans la bande dessinée, nous considérons une expression régulière pour correspondre à un mot, si elle correspond à une sous-chaîne du mot. (La modification de l'une de ces hypothèses ne devrait influer que sur la complexité de la construction ci-dessous, mais pas sur le résultat général.)Σ
Le fait qu'il soit en NP est simple, comme expliqué dans les commentaires (vérifiez un candidat-RE en le traduisant en NFA et en l'exécutant sur tous les mots de et ).BA B
Afin de montrer la dureté NP, nous réduisons la couverture Set:
Nous traduisons une entrée pour Set cover en une pour regex golf comme suit:
Cette réduction est évidemment en P et l'équivalence est également assez simple à voir:
la source