정규 문법에서 허용되는 단어 개수


26

정규 언어 (NFA, DFA, 문법 또는 정규식)가 주어지면 주어진 언어에서 허용되는 단어 수를 어떻게 계산할 수 있습니까? "정확히 n 개의 문자가있는"및 "최대 n 개의 문자가있는"모두 관심 대상입니다.

Margareta Ackerman 은 NFA가 받아들이는 단어를 열거하는 관련 주제에 관한 두 가지 논문을 가지고 있지만 효율적으로 계산할 수는 없었습니다.

일반 언어의 제한된 특성으로 인해 상대적으로 쉽게 계산할 수있는 것처럼 보입니다. 알고리즘보다 공식을 거의 기대합니다. 불행히도 지금까지 검색 한 내용이 전혀 나타나지 않았으므로 잘못된 용어를 사용해야합니다.


나는 당신이 "크기 의 수용 단어의 수"를 의미한다고 가정합니다 . 다른 사람에 대한 단어를 받아 들일 수 무엇 Σ *nΣ
수레 쉬 벤 카트

답변:


37

초기 상태가 상태 인 DFA의 경우, 상태 i 에서 끝나는 길이 k 의 워드 수 는 A k [ 0 , i ] 이며, 여기서 A 는 DFA의 전송 매트릭스입니다. 행 i 및 열 j 의 숫자는 상태 i 에서 상태 j 로의 전이를 일으키는 다른 입력 기호의 수입니다 . 당신이 길이의 말씀을 받아들이는 셀 수 있도록 정확히 케이 경우에도 쉽게 K0kiAk[0,i]Aijijkk 행렬 전력을 계산하고 수락 상태에 해당하는 항목을 추가하기 만하면 적당히 큽니다.

약간 다른 행렬 로 최대 길이의 단어를 허용하는 경우에도 마찬가지 입니다. 행과 열 모두에있는 셀에 하나, 새 행과 초기 상태의 열에 하나, 다른 모든 셀에는 0을 추가하여 행렬의 추가 행과 열을 추가하십시오. 매트릭스에 대한 이러한 변경의 효과는 각 전력에서 초기 상태에 하나 이상의 경로를 추가하는 것입니다.k

NFA에서는 작동하지 않습니다. 최선의 방법은 DFA로 변환 한 다음 행렬 구동 알고리즘을 적용하는 것입니다.


2
완벽한 답변 : 한번 읽은 후에는 분명합니다.
찰스

1
이 방법은 DFA 이외의 입력이있는 경우 지수 최악의 런타임을 갖습니다. @Charles, 이것이 당신에게 문제가되지 않습니까? 질문에 정규식, NFA 및 문법을 포함시키고 효율적인 방법을 요구하는 것 같습니다.
Raphael

17

하자 상태의 개시와 (결정적) 유한 자동화 될 Q 1 , Q FQδ Q × Σ × Q를 .A=(Q={q1,,qn},Σ,δ,QF)q1QFQδQ×Σ×Q

하자 부터 허용 될 수있는 모든 단어를 생성하는 함수 Q I 는 IS, N 의 급수 전개 계수의 차 [ (Z) N ] Q I = | { w | | = n w  는 q i 에서 허용  } | .Qi(z)qin[zn]Qi=|{w|w|=nw accepted from qi}|

분명히:

Qi(z)=[qiQF]+(qi,a,qj)δxQj(z)

대한 결과 (선형) 방정식 시스템을 풉니 다 (Mathematica 또는 유사한 도구 사용). 그리고, [ z n ] Q 1 이 원하는 양이다.Q1[zn]Q1

이것은 Chomsky와 Schützenberger (1963)에 의해 문법에 도입 된 기술로 되돌아 간다. 유한 오토마타로 쉽게 옮깁니다.

편집 : 당신이 계정에 원하는 경우 -transitions, 단지 요인 생략 X를 해당 전환에 대한 합계에서. 유사하게, "압축 된"모서리가있는 경우, 즉 전환시 기호 a Σ a 단어 w Σ k 대신 xx k로 바꿉니다 .εxaΣwΣkxxk


역사적 메모에 감사드립니다!
Charles

1
어, 이것은 실제로 많은 상황에서 실제로 잘 작동하는 방법입니다 (그리고 일단 얻으면 간단합니다). 예를 들어 똑같은 방식으로 CFG를 수행 할 수 있습니다.
Raphael

1
나는 오해했다. 이 경우 C & S보다 더 접근하기 쉬운 Kuich (1970) 를 추천 합니다. 그는 또한 내가 기억하지 못하는 그의 책에서 이것을 다룬다.
Raphael

1
다항식 시간에 DFA를 만들지 않고 일반 언어로 길이 단어를 셀 수 있다고 말하고 있습니까? MO의 복잡성에 대한 질문 : mathoverflow.net/questions/162186/…n
joro

1
@joro 분명한 문법의 경우, 이것이 사실이라고 생각합니다.
Raphael

7

나는 이것이 어려운 계산 문제라고 생각한다.이 논문을 참조하십시오 : 주어진 길이의 정규 시퀀스의 크기를 계산하는 것은 # P- 완료입니다 : S. Kannan, Z. Sweedyk 및 SR Mahaney 일반 언어로 문자열을 계산하고 무작위로 생성합니다. 이산 알고리즘에 관한 ACM-SIAM 심포지엄 (SODA), 551–557, 1995 쪽.


1
위의 게시물은 주어진 길이가 단항이라고 가정합니다. 대신 길이가 이진이면 문제는 PSPACE-hard입니다. 나는 두 정규 표현식의 동등성을 결정하는 것이 PSPACE-hard라는 증거를 바탕으로 말합니다. 이 축소에서 하나의 reg-ex는 모든 문자열을 허용하고 다른 하나는 입력 w에서 PSPACE 머신 M의 계산 거부 기록이 유효하지 않은 모든 문자열을 허용하도록 구성되었습니다. 두 번째 정규 표현식과 문제에 대한 입력으로 w에 대한 M의 계산 히스토리 길이를 사용하면이 다른 문제도 PSPACE- 어려워집니다.
Mikhail Rudoy

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.