길이가 긴 단어를 찾는 어려움 다운 오토 마톤이어야하고 Aㅏ\cal A입력

문제 설명 :

허락하다

미디엄

(잠재적으로 결정적이지 않은) 푸시 다운 오토 마톤이어야하고

입력 알파벳입니다. 단어가 있습니까

w∈A∗

|w|≤k

그것은 받아 들여진다

미디엄

?

이 문제가 NP-complete입니까? 연구 되었습니까? 그런 단어를 찾을 수있는 알고리즘이 있습니까?



답변

CFG 언어와 일반 언어의 교차점 계산

∑i=0kA케이

(이것은 상태 수에

케이

“데드 엔드”상태 추가). 이제 결과가 비어 있는지 확인하십시오. 문법으로 변환하십시오 (결과는 다항식 크기를 가질 것이라고 생각합니다).

편집 : Kaveh는 다항식이라고 언급했습니다.

케이

, 그래서 만약

케이

입력으로 주어지면 알고리즘은 지수

|케이|

. 그러나 Kaveh는이 문제를 해결하는 방법을 찾았습니다. 원래 오토 마톤을 CFG로 변환하고 모든 터미널을 고정 터미널로 교체하십시오. 이제 반복 알고리즘을 사용하여 다음과 같이 각 비 터미널에 의해 생성 된 단어의 최소 크기를 찾으십시오.

로 모든 길이를 초기화

그런 다음 명백한 방식으로 모든 길이를 반복적으로 업데이트하십시오.

ㅏ→ㅏ티∏비나는

(순서는 중요하지 않습니다)

에프(ㅏ)=분(에프(ㅏ),티+∑에프(비나는))

. 주장 : 이것은

영형(엔)

반복

비 터미널의 수입니다. 그 이유는 최소 길이 단어를 생성하는 트리에서 비 터미널이 두 번 사용되지 않기 때문입니다. 각 “가장자리”는 처리하는 데 최대 하나의 반복이 필요합니다 (일부 가장자리는 병렬로 “업데이트”될 수 있음).


답변

모든 알파벳 문자를 하나의 특정 문자로 변경하십시오. 이제 단일 문자에 PDA를 정의했습니다. 그 언어는 문맥이없는 문법입니다. 그러나 단일 문자에 대한 컨텍스트 프리 문법은 규칙적입니다. 따라서 CFG를 일반 언어로 변환 한 다음 길이가 k 인 단어가 포함되어 있는지 확인하십시오.

이제 이러한 모든 변환에는 지수 시간이 필요한 경향이 있지만 문제가 NP 완료 인 것 같지는 않습니다. 특히 다항식 시간을

케이

.

내가 틀렸을 수도 있고, 초기의 저격 답변에 대해 사과드립니다 …

BTW, 단일 문자에 대한 CFG가 규칙적이라는 사실은 Parikh의 정리에 따릅니다. 직접적인 증거는 그리 어렵지 않지만. Parikh의 정리에 대한 자세한 내용은 링크를 참조하십시오-그것은 아름다운 결과입니다 … http://www8.cs.umu.se/kurser/TDBC92/VT06/final/3.pdf


답변

아마도 차선책 일 수있는 방법 : Djikstra의 알고리즘을 실행하십시오. 그런 다음 각 최종 상태에 대해 거리를

케이

. 있다면

≤케이

, 동의하기. 받지 않다.

편집 : 위는 NFA에서만 작동합니다! 미안합니다.