Чи є відомий метод побудови граматики з заданим набором кінцевих рядків?


10

З мого читання здається, що більшість граматик переймаються створенням нескінченної кількості рядків. Що робити, якщо ви працювали навпаки?

Якщо задано n рядків довжиною m, слід створити граматику, яка буде генерувати ці рядки та саме ці рядки.

Чи існує відомий спосіб цього зробити? В ідеалі назва техніки, яку я можу дослідити. Як альтернатива, як би я міг займатися пошуком літератури, щоб знайти такий метод?


5
Тривіально: Побудуйте BNF таблиці рядків.
Джошуа

Рядки є скінченними за визначенням. І ви не можете отримати нескінченну множину, яка буде "дана", якщо у вас не буде деякого кінцевого опису цього.
vonbrand

Відповіді:


11

Це підпадає під загальну тему «граматична індукція»; Якщо шукати цю фразу, ви отримаєте багато літератури. Дивіться, наприклад, Індукція граматики без контексту , https://en.wikipedia.org/wiki/Grammar_induction , https://cstheory.stackexchange.com/q/27347/5038 .

Щодо звичайних мов (а не контекстних), див. Також Чи є регекс-гольф NP-Complete? , Наімалейшій DFA , що приймає даний рядки і відкидає інші дані рядка , існує поліпшення в алгоритмі Дано Енглін для навчання регулярних множин , і https://cstheory.stackexchange.com/q/1854/5038 .


Вказання на граматику можливо нескінченних регулярних мов важко і досить відрізняється від цієї проблеми.
reinierpost

Я відзначаю це питання правильним, оскільки, хоча воно не відповідає безпосередньо на запитання (яке, як виявляється, є тривіально розв’язуваним, як було сказано), воно дає мені термінологію, яку мені потрібно зробити для подальшого дослідження.
Густав Бертрам

8

Якщо кількість рядків є кінцевим, скажіть, встановлено S={с1,с2....см} Ви завжди можете придумати контекстну безкоштовну граматику, яка генерує всі ці рядки, нехай А бути нетермінальним, тоді це правило може бути Ас1|с2|...сн. Для кінцевого набору рядків ви можете навіть створити автомати з кінцевим станом, які приймають лише ці рядки. Тож випадок скінченного набору рядків дійсно тривіальний.


Я думаю, що мені потрібно переглянути свій підручник з розбору. Зрештою ця відповідь здається очевидною. Дякую!
Густав Бертрам

3

Існує маса способів, тому вам потрібно ввести додаткові критерії щодо якості результатів.

  1. Список: для кожного рядка ш мовою, мають правило Sш. ДозволяєSбути початковим нетермінальним. Зроблено.
  2. Дерево префіксу: для кожного префікса ш рядка в мові, мають нетермінальний Хш. Для кожного рядкаш1хш2 мовою, де х є символом, мають правило Хш1хХш2. Для кожного рядкаш в мові, мають правило Хшϵ. ДозволяєХϵбути початковим нетермінальним. Зроблено.
  3. Дерево суфікса: те саме, перевернуте.
  4. Застосування алгоритму гарантує отримання граматики мінімального розміру, наприклад, з мінімальною кількістю правил. Я не знаю, наскільки це важко.

Так, після першої відповіді було очевидно, що я повинен був запровадити додаткові критерії, але мені було несправедливо змінювати питання після першої відповіді.
Густав Бертрам

Але я хотів би знати часову складність пошуку мінімальної граматики для заданого кінцевого набору рядків ... скажімо, у загальній довжині рядків або в загальній довжині результату.
reinierpost

3

Те, що ви запитуєте, схоже на індекс пошуку. Дійсно перетворювачі кінцевого стану можуть бути створені та використані для розпізнавання поданого до них тексту. Для прикладу, Люсен використовує цей алгоритм: http://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

Для практичного використання ознайомтеся з цим дописом в блозі Ендрю Галланта: Індекс 1 600 000 000 ключів з автоматами та іржею

У дописі він описує метод побудови FSA, що надає текст тексту таким чином, що він розпізнає всі слова. Кінцевим результатом є побудова приблизно мінімального FST з попередньо відсортованих клавіш у лінійний час та в постійній пам'яті.

Префікси та суфікси для спільного використання FSA

Реалізація доступна у його fstбібліотеці: https://github.com/BurntSushi/fst


1

Відповідь на запитання reinierpost, яке також відповідає на оригінальне запитання:

Будуємо словниковий автомат так:

  1. побудувати автомат, який читає і приймає саме перший рядок.
  2. для наступного рядка, починайте його читати з автомата, поки для деякої літери не буде переходу. запустити нову гілку для решти рядка. повторюйте, поки всі рядки не будуть оброблені

Максимальний розмір автомата - загальна довжина вхідних рядків. Якщо припустити, що ви можете імітувати переходи та створювати нові за постійний час, також час виконання - це загальна довжина вхідних рядків. Ні кращих, ні найгірших випадків.

Цей автомат мінімальний. оскільки в звичайному випадку автомати і граматики відповідають майже одному до одного, те ж саме стосується і граматики, Звичайно, неможливо побудувати щось розміром n за менший час, ніж n.


Дякую. Що стосується відповіді на це запитання: я не бачу, що це сприяє рейнєрпосту. Крім того, ми не хочемо відповідей, які відповідають або коментують іншу відповідь: це не дискусійний форум. Спосіб зробити це - поставити нове запитання, а потім відповісти на нього самостійно. Я усвідомлюю, що це може бути не очевидним. [Отож, я не бачу, як ваша відповідь відповідає на питання, що цікавило рейнєрпост. Проблема в кінці відповіді рейнєрпоста полягала в тому, щоб знайти граматику з мінімальною кількістю правил. Ваша відповідь показує, як створити DFA з мінімальною кількістю штатів. (продовження)
DW

1
Звичайно, ми можемо перетворити цей DFA у звичайну граматику, але що змушує вас вважати, що воно буде мінімальним щодо кількості правил у граматиці? Схоже, це потребує доказів.]
DW

Я думаю, що моя відповідь - це час виконання. Ви маєте рацію, кілька речей, за якими я кажу, потребують доказів. Але відповідність між переходами Кінцевих Автоматичних даних і Правилами звичайної граматики для мене дуже зрозуміла (якщо останні можуть генерувати лише один термінал на правило, як у більшості визначень); то будь-яка граматика меншої за мою дала б автомат менший, ніж мінімальний. Тому я думаю, що граматика з мінімального автомата (я не доводжу, що моя мінімальна) теж буде мінімальною. - Я буду мати на увазі вашу пораду щодо відповідей, дякую
Пітер Лепольд

Поняття мінімальності для DFA щодо кількості штатів . Чи передбачає це мінімальність щодо кількості переходів у DFA або мінімальність кількості правил у отриманій граматиці? Я думаю, що ми повинні слідкувати за вашими показниками, оскільки в іншому випадку я переживаю, що ми порівнюємо яблука з апельсинами.
DW

Правильно, граматика буде мінімальною з точки зору нетерміналів. Для правил це не зрозуміло.
Пітер Лепольд
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.