Dureté de trouver un mot de longueur au plus acceptée par un automate pushdown non déterministe

10

Énoncé du problème:

Soit un automate de refoulement (potentiellement non déterministe) et soit son alphabet d'entrée. Y a-t-il un mot st accepté par ?A w A | w | k MMAwA|w|kM

Ce problème est-il NP-complet? At-il été étudié? Existe-t-il un algorithme permettant de trouver un tel mot?

Lamine
la source
L'algorithme de Djikstra ne devrait-il pas faire l'affaire? (Je me
trompe
"longueur au plus "? k
alpoge
Je vous en prie, Kaveh. Oui, j'ai oublié "tout au plus", j'ai retravaillé.
Lamine
1
La réponse est simple - est-ce une question de devoirs?
Sariel Har-Peled
Avons-nous accès à la description des automates ou l'avons-nous uniquement en boîte noire?
Raphael

Réponses:

9

Calculez l'intersection de votre langage CFG avec le langage régulier (cela revient à multiplier le nombre d'états par et à ajouter un état "impasse"). Vérifiez maintenant si le résultat est vide: convertissez-le en grammaire (je pense que le résultat aura une taille polynomiale) et "retour en arrière" des productions epsilon. ki=0kAkk

Edit: Kaveh a mentionné qu'il s'agit d'un polynôme en , donc si est donné en entrée, l'algorithme est exponentiel en. Cependant, Kaveh a trouvé un moyen de le réparer. Convertissez l'automate d'origine en CFG et remplacez tous les terminaux par un terminal fixe. Utilisez maintenant un algorithme itératif pour trouver la taille minimale d'un mot généré par chaque non-terminal, comme suit.k | k |kk|k|

Initialisez toutes les longueurs avec , puis mettez à jour toutes les longueurs de manière évidente: étant donné une production (l'ordre n'a pas d'importance), mettez . Revendication: cela converge en itérations, où est le nombre de non-terminaux. La raison en est que dans un arbre générant le mot de longueur minimale, aucun non-terminal n'est utilisé deux fois; chaque "arête" prend au plus une itération à traiter (certaines arêtes peuvent être "mises à jour" en parallèle).AatBiO ( n ) nf(A)=min(f(A),t+f(Bi))O(n)n

Yuval Filmus
la source
Je pense aussi que la transformation PDA CFG est polynomiale. Merci! Donc , le problème est dans . PP
Lamine
Ok, puisqu'il existe un moyen de calculer directement la plus petite longueur,n'est pas une entrée. Mais je ne comprends pas pourquoi remplacer tous les terminaux par un fixe. L'algorithme doit fonctionner correctement avec les terminaux d'origine. |k|
Lamine le
Tu as raison, ça n'a pas d'importance.
Yuval Filmus du
5

Remplacez tous les caractères de l'alphabet par un seul caractère spécifique. Maintenant, vous avez PDA défini sur un seul caractère. Son langage est une grammaire sans contexte. Cependant, la grammaire sans contexte sur un seul caractère est régulière. Donc, convertissez le CFG dans un langage normal, puis vérifiez s'il contient un mot de longueur k.

Maintenant, toutes ces conversions nécessitent généralement un temps exponentiel, mais il me semble peu probable que le problème soit NP complet. Surtout si vous autorisez le temps polynomial en .k

Je me trompe peut-être, et je m'excuse pour ma réponse snippy initiale ...

BTW, le fait qu'un CFG sur une seule lettre soit régulier découle du théorème de Parikh. Bien qu'une preuve directe ne soit pas trop difficile. Voir le lien pour plus de détails sur le théorème de Parikh - c'est un beau résultat ... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf

Sariel Har-Peled
la source
Non, je ne suis pas étudiant. Le problème que j'ai mentionné est initialement un problème de réseau modélisé comme un automate. Je voudrais juste savoir si cela vaut la peine de chercher une solution polynomiale ou non.
Lamine
5
Cette réponse ne devrait-elle pas être un commentaire?
Oleksandr Bondarenko
2
Oui, ça devrait. Sariel, pouvez-vous déplacer ceci vers un commentaire ou fournir une réponse?
Suresh Venkat
@Suresh: Vous en êtes peut-être conscient, mais les modérateurs peuvent désormais transformer une réponse en commentaire .
Tsuyoshi Ito
J'ai déplacé la réponse originale à un commentaire. Ceci est une nouvelle réponse.
Suresh Venkat
0

Une méthode probablement sous-optimale: exécutez l'algorithme de Djikstra. Ensuite, pour chaque état final, comparez les distances avec . S'il y en a , acceptez. Rejeter.kkk

EDIT: ce qui précède ne fonctionne que pour les NFA! Désolé pour ça.

alpoge
la source
(mais définitivement poly-time!)
alpoge
Je ne suis pas sûr que l'algorithme de Dijkstra puisse résoudre le problème. Il peut trouver le chemin le plus court entre l'état initial et l'état final. Bien sûr, un mot qui peut être accepté par ce chemin peut être généré. Mais ces chemins sont élémentaires, et les mots peuvent être acceptés par des chemins non élémentaires; sinon, le problème de déterminer si une grammaire sans contexte peut générer n'importe quel mot serait décidable, mais ce n'est pas le cas.
Lamine
Les tests de vide pour les LFC sont décidables, non?
alpoge
(Pardonnez-moi encore si je me
méprends
Eh bien, on peut utiliser un algorithme de `` marquage '' pour cela (étant donné le CFG) - marquer les terminaux, puis marquer les choses qui dérivent des terminaux, puis marquer les choses qui ont dérivé les choses qui sont marquées, etc. jusqu'à la fin du processus, puis vérifier si la variable de début est marquée. Aussi, ignorez ma réponse - c'est ce que vous devez faire pour un NFA (certainement pas pour un PDA!).
alpoge