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


10

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

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

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


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

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

답변:


11

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

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

8

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


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

3

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

  1. 목록 : 언어의 각 문자열 에 대해 규칙 가 있어야합니다 . 시작 비 터미널 이라고하자 . 끝난.wSwS
  2. 접두사 트리 : 언어로 된 문자열의 각 접두사 에 비 터미널 있습니다. 가 기호 인 언어의 각 문자열 에 대해 규칙이 있습니다. 언어의 각 문자열 에 대해 규칙 . 하자 시작 비단합니다. 끝난.wXww1xw2xXw1xXw2wXwϵ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.