Czy istnieje znana metoda konstruowania gramatyki przy skończonym zestawie skończonych łańcuchów?

10

Z mojego czytania wynika, że ​​większość gramatyk dotyczy generowania nieskończonej liczby łańcuchów. Co jeśli pracowałeś na odwrót?

Jeśli podano n łańcuchów o długości m, powinno być możliwe stworzenie gramatyki, która wygeneruje te łańcuchy i tylko te łańcuchy.

Czy istnieje znana metoda wykonania tego? Idealnie nazwa techniki, którą mogę badać. Alternatywnie, jak powinienem przeszukać literaturę, aby znaleźć taką metodę?

Gustav Bertram
źródło
5
Trivial: Zbuduj tabelę BNF ciągów.
Joshua
Ciągi są z definicji skończone. I nie można uzyskać „nieskończonego” zestawu, jeśli nie ma się jego skończonego opisu.
vonbrand,

Odpowiedzi:

11

Jest to objęte ogólnym tematem „indukcji gramatycznej”; wyszukiwanie tego wyrażenia ujawni mnóstwo literatury. Zobacz np. Indukowanie gramatyki bezkontekstowej , https://en.wikipedia.org/wiki/Grammar_induction , https://cstheory.stackexchange.com/q/27347/5038 .

W przypadku zwykłych języków (zamiast kontekstowych) zobacz także Czy regex golf NP-Complete? , Najmniejszy DFA, który akceptuje podane ciągi i odrzuca inne podane ciągi , Czy istnieją ulepszenia algorytmu Dany Angluin do uczenia się regularnych zestawów oraz https://cstheory.stackexchange.com/q/1854/5038 .

DW
źródło
Wywoływanie gramatyki dla prawdopodobnie nieskończonych języków regularnych jest trudne i całkowicie różni się od tego problemu.
reinierpost
Zaznaczam to pytanie poprawnie, ponieważ chociaż nie odpowiada ono bezpośrednio na pytanie (które, jak stwierdzono, jest trywialnie rozwiązywalne), zapewnia mi rodzaj terminologii, której potrzebuję do dalszych badań.
Gustav Bertram
8

Jeśli liczba ciągów jest skończona, powiedz set S.={s1,s2)....sm} zawsze możesz wymyślić gramatykę bezkontekstową, która generuje wszystkie te łańcuchy, niech ZA być nie-terminalem, wtedy reguła może być ZAs1|s2)|...sn. Dla skończonego zestawu ciągów możesz nawet wymyślić automaty skończone, które akceptują tylko te ciągi. Tak więc przypadek skończonego zestawu ciągów jest naprawdę trywialny.

sashas
źródło
Myślę, że muszę przejrzeć mój podręcznik analizowania. Z perspektywy czasu ta odpowiedź wydaje się oczywista. Dziękuję Ci!
Gustav Bertram
3

Istnieje wiele sposobów, dlatego należy nałożyć dodatkowe kryteria na jakość wyników.

  1. Lista: dla każdego ciągu w w języku, mieć regułę S.w. PozwolićS.być początkowym nieterminalnym. Gotowy.
  2. Drzewo prefiksów: Dla każdego prefiksu w ciągu w języku, mają nieterminal Xw. Dla każdego ciąguw1xw2) w języku, gdzie x to symbol, miej regułę Xw1xXw2). Dla każdego ciąguw w języku, rządzić Xwϵ. PozwolićXϵbyć początkowym nieterminalnym. Gotowy.
  3. Drzewo sufiksów: to samo, odwrócone.
  4. Zastosowanie algorytmu gwarantuje uzyskanie gramatyki o minimalnym rozmiarze, np. Przy minimalnej liczbie reguł. Nie wiem jak to jest trudne.
reinierpost
źródło
Tak, po pierwszej odpowiedzi było oczywiste, że powinienem był nałożyć dodatkowe kryteria, ale zmiana pytania po pierwszej odpowiedzi była niesprawiedliwa.
Gustav Bertram
Mimo to chciałbym poznać złożoność czasową znalezienia minimalnej gramatyki dla danego skończonego zestawu łańcuchów ... powiedzmy, w całkowitej długości łańcuchów lub w całkowitej długości wyniku.
reinierpost
3

To, o co pytasz, przypomina indeks wyszukiwania. Rzeczywiście, można utworzyć Przetworniki Skończonego Stanu i wykorzystywać je do rozpoznawania podawanego tekstu. Na przykład Lucene używa tego algorytmu: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

Aby uzyskać praktyczne zastosowanie, sprawdź ten post na blogu autorstwa Andrew Gallanta: Indeks 1 600 000 000 kluczy z automatami i rdzą

W poście opisuje metodę konstruowania FSA, biorąc pod uwagę zbiór tekstów, który rozpoznaje wszystkie słowa. Końcowym rezultatem jest zbudowanie w przybliżeniu minimalnego FST z wstępnie posortowanych kluczy w czasie liniowym i w stałej pamięci.

Przedrostki i sufiksy udostępniania FSA

Implementacja jest dostępna w jego fstbibliotece: https://github.com/BurntSushi/fst

Lkraider
źródło
1

Odpowiedź na pytanie postawione przez reinierpost, która odpowiada również na pierwotne pytanie:

Automat konstruujemy słownik w następujący sposób:

  1. zbuduj automat, który czyta i akceptuje dokładnie pierwszy ciąg.
  2. dla następnego ciągu zacznij czytać go za pomocą automatu, aż do jakiejś litery nie ma przejścia. uruchom nową gałąź dla reszty łańcucha. powtarzaj, aż wszystkie łańcuchy zostaną przetworzone

Maksymalny rozmiar automatu to całkowita długość ciągów wejściowych. Zakładając, że możesz symulować przejścia i tworzyć nowe w stałym czasie, również środowisko wykonawcze jest całkowitą długością ciągów wejściowych. Brak najlepszych lub najgorszych przypadków.

Ten automat jest minimalny. ponieważ w zwykłym przypadku automaty i gramatyki odpowiadają prawie jeden do jednego, to samo dotyczy gramatyki. Oczywiście nie jest możliwe skonstruowanie czegoś o rozmiarze n w czasie krótszym niż n czasu.

Peter Leupold
źródło
Dzięki. Jeśli chodzi o odpowiedź na to pytanie: nie rozumiem, co to przyczynia się do ponownego cierpienia. Nie chcemy też odpowiedzi, które odpowiadają na inne odpowiedzi lub komentują je: nie jest to forum dyskusyjne. Sposobem na to byłoby opublikowanie nowego pytania, a następnie samodzielne udzielenie odpowiedzi. Zdaję sobie sprawę, że to może nie być oczywiste. [To powiedziawszy, nie rozumiem, jak twoja odpowiedź odpowiada na problem, który był ciekawy ponownie. Problem na końcu odpowiedzi na ponowne cierpienie polegał na znalezieniu gramatyki z minimalną liczbą reguł. Twoja odpowiedź pokazuje, jak zbudować DFA przy minimalnej liczbie stanów. (ciąg dalszy)
DW
1
Oczywiście możemy przekonwertować ten DFA na zwykłą gramatykę, ale co sprawia, że ​​uważasz, że będzie on minimalny pod względem liczby reguł w gramatyce? Wygląda na to, że wymaga to dowodu.]
DW
Myślę, że moją odpowiedzią jest czas działania. Masz rację, kilka rzeczy, które, jak mówię, będą wymagały dowodu. Jednak zgodność między przejściami automatów skończonych a regułami gramatyki zwykłej jest dla mnie bardzo jasna (jeśli ta ostatnia może wygenerować tylko jeden terminal na regułę, jak w większości definicji); wtedy każda gramatyka mniejsza niż moja dałaby automat mniejszy niż minimalny. Myślę więc, że gramatyka minimalnego automatu (nie udowadniam, że moja jest minimalna) również będzie minimalna. - Będę pamiętać o twoich radach dotyczących odpowiedzi, dziękuję
Peter Leupold,
Pojęcie minimalności dla DFA odnosi się do liczby stanów . Czy oznacza to minimalność w odniesieniu do liczby przejść w DFA lub minimalną liczbę reguł w wynikowej gramatyce? Myślę, że musimy śledzić twoje dane, ponieważ inaczej obawiam się, że porównamy jabłka z pomarańczami.
DW
Prawidłowo, gramatyka będzie minimalna w terminonach nieterminowych. W przypadku zasad nie jest to jasne.
Peter Leupold,