유한 한 유한 문자열 세트가 주어지면 문법을 구성하는 알려진 방법이 있습니까?


10

내 독서에서 대부분의 문법은 무한한 수의 문자열을 생성하는 데 관심이있는 것 같습니다. 다른 방법으로 일하면 어떻게 되나요?

길이가 m 인 n 개의 문자열이 주어진 경우 해당 문자열을 생성하는 문법과 해당 문자열 만 생성 할 수 있어야합니다.

이를위한 알려진 방법이 있습니까? 이상적으로는 연구 할 수있는 기술 이름입니다. 또는 그러한 방법을 찾기 위해 문헌 검색을 어떻게해야합니까?


5
사소한 : 문자열의 BNF 테이블을 구성하십시오.
— Joshua

문자열은 정의에 의해 유한합니다. 그리고 당신이 그것에 대한 유한 한 설명이 없다면 무한한 세트를 "제공"할 수 없습니다.
— vonbrand

답변:


11

무한한 정규 언어에 대한 문법을 ​​유도하는 것은 어렵고이 문제와는 상당히 다릅니다.
— reinierpost

나는이 질문에 올바른 대답을하지는 않지만 (명백한 것처럼 해결할 수는 있지만) 더 연구해야 할 용어를 제공하기 때문에이 질문을 올바르게 표시하고 있습니다.
— 구스타프 버트 람

8

문자열의 수는 유한 말 세트의 경우 당신은 항상 모든 문자열을 생성 문맥 자유 문법을 가지고 올 수는하자 다음 규칙이 될 수있는 비 터미널이 될 . 유한 한 문자열 집합의 경우 해당 문자열 만 허용하는 유한 상태 오토마타를 만들 수도 있습니다. 따라서 유한 문자열 세트의 경우는 사소합니다.S={s1,s2....sm}AA→s1|s2|...sn


파싱 ​​교과서를 검토해야한다고 생각합니다. 돌이켜 보면이 대답은 명백해 보입니다. 감사합니다!
— 구스타프 버트 람

3

여러 가지 방법이 있으므로 결과의 품질에 대한 추가 기준을 부과해야합니다.

  1. 목록 : 언어의 각 문자열 에 대해 규칙 가 있어야합니다 . 시작 비 터미널 이라고하자 . 끝난.wS→wS
  2. 접두사 트리 : 언어로 된 문자열의 각 접두사 에 비 터미널 있습니다. 가 기호 인 언어의 각 문자열 에 대해 규칙이 있습니다. 언어의 각 문자열 에 대해 규칙 . 하자 시작 비단합니다. 끝난.wXww1xw2xXw1→xXw2wXw→ϵXϵ
  3. 접미사 트리 : 동일, 반대로.
  4. 최소한의 규칙으로 최소 크기의 문법을 생성하도록 보장 된 알고리즘을 적용합니다. 이것이 얼마나 어려운지 모르겠습니다.

네, 첫 번째 답변 후 추가 기준을 부과해야한다는 것이 명백했지만 첫 번째 답변 후 질문을 변경하는 것은 불공평했습니다.
— 구스타프 버트 람

아직도, 나는 주어진 유한 한 문자열 집합에 대한 최소 문법을 찾는 시간 복잡성을 알고 싶습니다 ... 문자열의 총 길이 또는 결과의 총 길이로 가정 해 봅시다.
— reinierpost

3

당신이 요구하는 것은 검색 색인과 유사합니다. 실제로 유한 상태 변환기를 작성하여 텍스트를 인식하는 데 사용할 수 있습니다. 예를 들어 Lucene은이 알고리즘을 사용합니다. http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

실용적으로 사용하려면 Andrew Gallant가 작성한이 블로그 게시물을 확인하십시오. Automata 및 Rust가있는 인덱스 1,600,000,000 키

이 글에서 그는 모든 단어를 인식 할 수 있도록 텍스트 모음에 FSA를 구성하는 방법을 설명합니다. 최종 결과는 미리 정렬 된 키로부터 선형 시간과 일정한 메모리로 대략 최소 FST를 구성하는 것입니다.

FSA 공유 접두사 및 접미사

구현은 그의 fst라이브러리 에서 사용할 수 있습니다 : https://github.com/BurntSushi/fst


1

reinierpost가 제기 한 질문에 대한 답변으로 원래 질문에도 답변합니다.

우리는 다음과 같이 사전 오토 마톤을 구성합니다 :

  1. 정확히 첫 번째 문자열을 읽고 받아들이는 오토 마톤을 구성하십시오.
  2. 다음 문자열의 경우 문자가 전환 될 때까지 자동 문자로 읽습니다. 나머지 문자열에 대해 새 분기를 시작하십시오. 모든 문자열이 처리 될 때까지 반복

오토 마톤의 최대 크기는 입력 문자열의 총 길이입니다. 일정한 시간에 전환을 시뮬레이션하고 새로운 전환을 만들 수 있다고 가정하면 런타임은 입력 문자열의 총 길이입니다. 최상의 경우 나 최악의 경우는 없습니다.

이 오토 마톤은 최소입니다. 일반적인 경우에 오토마타와 문법은 거의 일대일로 대응하기 때문에 문법에서도 마찬가지입니다.


감사. 이 질문에 대답하는 한 : 이것이 reinierpost에 어떤 영향을 미치는지 알 수 없습니다. 또한 다른 답변에 대한 답변이나 다른 답변에 대한 답변을 원하지 않습니다. 토론 포럼이 아닙니다. 그렇게하는 방법은 새로운 질문을 게시 한 다음 스스로 대답하는 것입니다. 나는 분명하지 않을 수도 있음을 알고 있습니다. [그 말은 reinierpost가 궁금했던 문제에 대한 귀하의 답변이 어떻게 답변되는지 모르겠습니다. reinierpost의 답변 끝에 문제는 최소한의 규칙을 가진 문법을 찾는 것이 었습니다. 귀하의 답변은 최소한의 상태로 DFA를 구축하는 방법을 보여줍니다. (계속)
— DW

1
물론 해당 DFA를 일반 문법으로 변환 할 수 있지만 문법의 규칙 수 측면에서 최소가 될 것이라고 생각하는 이유는 무엇입니까? 증거가 필요한 것 같습니다.]
— DW

내 대답이 기여하는 것은 런타임이라고 생각합니다. 당신 말이 맞아요, 내가 말하는 몇 가지 증거가 필요합니다. 그러나 Finite Automata 전환과 정규 문법 규칙 간의 일치는 매우 분명합니다 (후자가 대부분의 정의에서와 같이 규칙 당 하나의 터미널 만 생성 할 수있는 경우). 그러면 내 문법보다 작은 문법은 최소한의 문법보다 작은 오토 마톤을 줄 것입니다. 그래서 나는 최소 오토 마톤의 문법 (내 것이 최소라는 것을 증명하지는 않는다)도 최소화 될 것이라고 생각한다. - 나는 당신의 조언을 마음에 답변 직결 된 덕분에 계속됩니다
— 피터 LEUPOLD

DFA에 대한 최소의 개념은 주 수와 관련이 있습니다 . 이는 DFA 의 전환 횟수와 관련 하여 최소값 또는 결과 문법에서 규칙 개수의 최소값을 의미합니까? 나는 우리가 당신의 지표가 무엇인지 추적해야한다고 생각합니다. 그렇지 않으면 사과와 오렌지를 비교 할까 걱정됩니다.
— DW

맞습니다. 문법은 터미널이 아닌 용어에서는 최소화됩니다. 규칙에 대해서는 명확하지 않습니다.
— 피터 Leupold
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.