给定一组有限的有限字符串,是否存在已知的构造语法的方法?


10

从我的阅读看来,大多数语法都与生成无限数量的字符串有关。如果您采用其他方法怎么办?

如果给定n个长度为m的字符串,那么应该有可能生成一个将生成这些字符串以及仅这些字符串的语法。

有已知的方法吗?理想情况下,我可以研究一种技术名称。或者,我将如何进行文献搜索以找到这种方法?


5
琐碎的:构造字符串的BNF表。
约书亚

根据定义,字符串是有限的。除非您对此有一些有限的描述,否则您将无法获得“给定”的无限集。
vonbrand

Answers:


11

这属于“语法归纳”的一般主题;在该词组上进行搜索将获得大量文学作品。见,例如,诱导上下文无关文法https://en.wikipedia.org/wiki/Grammar_inductionhttps://cstheory.stackexchange.com/q/27347/5038

对于常规语言(而不是上下文无关的语言),另请参阅regex golf NP-Complete吗?最小DFA是接受给定的字符串,并拒绝其他给予弦有没有对戴纳·安格卢的算法改进学习正则集,和https://cstheory.stackexchange.com/q/1854/5038


为可能无限的常规语言引入语法是困难的,并且与该问题完全不同。
reinierpost

我将这个问题标记为正确,因为尽管它不能直接回答该问题(事实证明如前所述,该问题可以轻易解决),但确实为我提供了我需要做进一步研究的术语。
古斯塔夫·贝特拉姆

8

如果字符串的数目是有限的,请说集您可以随时拿出产生所有这些字符串上下文无关文法,让一个是非终端那么规则可以是一个小号1 | s 2 | s n。对于一组有限的字符串,您甚至可以提出一个仅接受那些字符串的有限状态自动机。因此,有限字符串集的情况确实是微不足道的。小号={s1个s2s}一个一个s1个|s2|sñ


我想我需要阅读我的解析教科书。回想起来,这个答案似乎很明显。谢谢!
古斯塔夫·贝特拉姆

3

有很多方法,因此您需要对结果的质量强加其他标准。

  1. 列表:对于语言中的每个字符串,都有一个规则S w。令S为起始非终结点。做完了w小号w小号
  2. 前缀树:对于该语言中字符串的每个前缀,具有非终结符X w。对于语言中每个字符串w 1 x w 2,其中x是符号,规则X w 1x X w 2。对于语言中的每个字符串w,都有规则X wϵ。令X ϵ为起始非终结点。做完了wXww1个Xw2XXw1个XXw2wXwϵXϵ
  3. 后缀树:相同,相反。
  4. 应用保证产生最小大小的语法的算法,例如最小数量的规则。我不知道这有多难。

是的,在第一个答案之后很明显,我应该强加其他标准,但是在第一个答案之后更改问题是不公平的。
古斯塔夫·贝特拉姆

尽管如此,我还是很想知道为给定的有限字符串集找到最小语法的时间复杂性……比如说,在字符串的总长度或结果的总长度中。
reinierpost

3

您要问的是类似于搜索索引。实际上,可以创建有限状态传感器,并将其用于识别输入给它们的文本。例如,Lucene使用以下算法:http ://citeseerx.ist.psu.edu/viewdoc/summary?doi=10.1.1.24.3698

实际使用时,请查看Andrew Gallant撰写的此博客文章: 索引1,600,000,000具有自动机和Rust的键

在文章中,他描述了一种在给定文本语料库的情况下构造FSA的方法,以便它可以识别所有单词。最终结果是根据线性时间和恒定内存中的预排序键构建大约最小的FST。

FSA共享前缀和后缀

该实现在他的fst库中可用:https : //github.com/BurntSushi/fst


1

reinierpost提出的问题的答案,它也回答了原始问题:

我们按以下方式构造字典自动机:

  1. 构造一个自动机,该机可以准确地读取并接受第一个字符串。
  2. 对于下一个字符串,请使用自动机开始读取它,直到某个字母没有过渡为止。为字符串的其余部分启动一个新分支。重复直到处理完所有字符串

自动机的最大大小是输入字符串的总长度。假设您可以模拟转换并在恒定时间内创建新转换,则运行时也是输入字符串的总长度。没有最好或最坏的情况。

这个自动机是最小的。因为在正常情况下,自动机和语法几乎是一一对应的,所以语法也是如此。当然,不可能在少于n的时间内构造大小为n的东西。


谢谢。至于回答这个问题:我不认为这对reinierpost有什么帮助。另外,我们也不想回答或评论其他答案:这不是讨论论坛。这样做的方法是发布一个新问题,然后自己回答。我意识到这可能并不明显。[也就是说,我看不出您的答案如何回答reinierpost所好奇的问题。reinierpost答案结尾的问题是找到一种语法最少的规则。您的答案显示了如何以最少的状态构建DFA。(续)
DW

1
当然,我们可以将DFA转换为常规语法,但是从语法规则的数量来讲,是什么让您认为它是最小的呢?似乎需要证据。]
DW

我认为我的回答是运行时。没错,我说的几件事需要证明。但是对我来说,有限自动机转换和正则语法规则之间的对应关系非常清楚(如果像大多数定义一样,后者只能为每个规则生成一个终端);那么任何小于我的语法的自动机都会比最小的自动机小。因此,我认为最小自动机的语法(我不会证明我的最小)也将是最小的。-我会记住您关于答案的建议,谢谢
Peter Leupold

DFA的最低限度概念是与数有关的。这是否意味着DFA 中转换数量的最小值,或生成的语法中规则数量的最小值?我认为我们必须跟踪您的指标,否则我担心我们会将苹果与橙子进行比较。
DW

正确,语法在非终止词方面将是最少的。对于规则,尚不清楚。
Peter Leupold
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.