Трудность найти слово длины не более

10

Постановка задачи :

Позволять M быть (потенциально недетерминированным) автоматом и Aбыть его входным алфавитом. Есть ли словоwA улица |w|k что принято M ?

Эта проблема NP-полная? Было ли это изучено? Есть ли алгоритм, позволяющий найти такое слово?

Ламин
источник
Разве алгоритм Джикстры не может добиться цели? (Скорее всего, я здесь что-то недопонимаю!)
alpoge
длина не более k"?
alpoge
Не за что, Каве. Да, я забыл "максимум", я снова отредактировал.
Ламин
1
Ответ прост - это домашний вопрос?
Сариэль Хар-Пелед
Есть ли у нас доступ к описанию автоматов или у нас есть только черный ящик?
Рафаэль

Ответы:

9

Вычислите пересечение вашего языка CFG с обычным языком Σязнак равно0КAК (это означает умножение количества штатов на kи добавление состояния "тупик"). Теперь проверьте, является ли результат пустым: конвертируйте в грамматику (я думаю, что результат будет иметь полиномиальный размер) и «возвратите» от производства epsilon.

Редактировать: Каве упомянул, что это полином в k, так что если k в качестве входных данных, алгоритм экспоненциально в |К|, Однако Каве нашел способ это исправить. Преобразуйте оригинальный автомат в CFG и замените все терминалы фиксированным терминалом. Теперь используйте итерационный алгоритм, чтобы найти минимальный размер слова, генерируемого каждым нетерминалом, следующим образом.

Инициализируйте все длины с и затем итеративно обновлять все длины очевидным способом: с учетом производства AaTΠВя (порядок не имеет значения), положить f(A)=min(е(A),T+Σе(Вя)), Требование: это сходится вО(N) итерации, где Nколичество нетерминалов. Причина в том, что в дереве, генерирующем слово минимальной длины, нетерминал не используется дважды; для обработки каждого «ребра» требуется не более одной итерации (некоторые ребра могут «обновляться» параллельно).

Юваль Фильмус
источник
Я тоже считаю, что трансформация КПК CFG является полиномом. Спасибо! Так что проблема вп,
Ламин
Хорошо, так как есть способ вычислить непосредственно самую низкую длину, |k|не является входом. Но я не понимаю, почему замена всех терминалов на фиксированные. Алгоритм должен корректно работать с оригинальными терминалами.
Ламин
Вы правы, это на самом деле не имеет значения.
Юваль Фильмус
5

Измените все символы алфавита на один конкретный символ. Теперь у вас есть КПК, определенный для одного символа. Его язык - это контекстно-свободная грамматика. Тем не менее, контекстно-свободная грамматика над одним символом является регулярной. Итак, конвертируйте CFG в обычный язык, а затем проверьте, содержит ли он слово длины k.

Теперь все эти преобразования требуют экспоненциального времени, но мне кажется маловероятным, что проблема в NP завершена. Особенно если вы позволите полиномиальное время вk,

Возможно, я ошибаюсь, и я прошу прощения за мой начальный отрывочный ответ ...

Кстати, тот факт, что CFG над одной буквой является регулярным, следует из теоремы Париха. Хотя прямое доказательство не так уж сложно. Смотрите ссылку для более подробной информации о теореме Париха - это прекрасный результат ... http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf

Сариэль Хар-Пелед
источник
Нет, я не студент Проблема, которую я упомянул, изначально была проблемой сети, которая смоделирована как автоматическая. Я бы просто знал, стоит ли искать полиномиальное решение или нет.
Ламин
5
Разве этот ответ не должен быть комментарием?
Александр Бондаренко
2
Да, это должно. Сариэль, не могли бы вы переместить это в комментарий или дать ответ?
Суреш Венкат
@Suresh: Вы можете знать об этом, но теперь модераторы могут превратить ответ в комментарий .
Цуёси Ито
Я переместил оригинальный ответ в комментарий. Это новый ответ.
Суреш Венкат
0

Вероятно, неоптимальный метод: запустить алгоритм Джикстры. Затем для каждого конечного состояния сравните расстояния сК, Если естьК, прими. Отклонить.

РЕДАКТИРОВАТЬ: вышеупомянутое работает только для NFAs! Прости за это.

alpoge
источник
(но определенно много времени!)
alpoge
Я не уверен, что алгоритм Дейкстры может решить проблему. Он может найти кратчайший путь между начальным и конечным состояниями. Конечно, слово, которое может быть принято по этим путям, может быть сгенерировано. Но эти пути элементарны, и слова могут быть приняты неэлементарными путями; в противном случае проблема определения, может ли контекстно-свободная грамматика генерировать какое-либо слово, была бы разрешима, но это не так.
Ламин
Проверка на пустоту для КЛЛ разрешима, нет?
alpoge
(Прости меня снова, если я неправильно понял!)
alpoge
Что ж, для этого можно использовать алгоритм «маркировки» (с учетом CFG) - маркировать терминалы, затем маркировать вещи, которые выводят терминалы, затем маркировать вещи, которые производят вещи, которые отмечены, и т. Д., Пока процесс не завершится, и затем проверить если начальная переменная помечена. Кроме того, игнорируйте мой ответ - это то, что вы должны сделать для NFA (конечно, не для КПК!).
alpoge