【问题标题】:Minimum pumping length for the following regular languages以下常规语言的最小抽吸长度
【发布时间】:2016-01-06 19:15:43
【问题描述】:

以下语言的最小抽吸长度是多少?

  1. 空洞的语言
  2. (01)*
  3. 10(11*0)*0
  4. 1011
  5. 0110*1*

这是我的解决方案。如果我错了,请纠正我。

  1. p = 0,因为该语言没有可泵送的字符串
  2. p = 2 因为01 是可以抽出的最短字符串
  3. p = 5 因为10100 是可以抽出的最短字符串
  4. p = 0,因为无法抽出绳子
  5. p = 1 因为字符串0 可以被抽出

我不确定我的答案,因此感谢您的帮助。非常感谢!

【问题讨论】:

标签: computer-science regular-language computation-theory compiler-theory


【解决方案1】:

根据Patrick87,最小泵送长度定义为您可以在最小化的 DFA 中进行的最大转换次数,而无需两次访问某个状态。然后该过程变成将您的正则表达式转换为 NFA,将 NFA 转换为 DFA,最小化 DFA 并计算沿有向边的最长路径,而无需两次访问相同的状态。有关这种转换和最小化的介绍,请参阅 Torben Mogensen 的免费书籍 Basics of Compiler Design 第 2.6、2.8 章。

根据这个定义,

  1. p = 0,因为空语言的最小化 DFA 中没有转换。
  2. p = 1。(01)* 的最小化 DFA 有两种状态,您只能进行一次转换,而不会进入初始的接受状态。
  3. p = 3。10(11*0)*0 的最小化 DFA 将具有必须访问两次才能使子表达式 (11*0)* 成为派生的一部分的状态。
  4. p = 4。1011 的最小化 DFA 恰好有 4 条边且没有递归。
  5. p = 1。语言011 是语言0*1* 的子集,所以011 U 0*1* = 0*1*。而且由于01 都不能被抽取,因此只能跟随一个非递归边缘。

【讨论】:

    【解决方案2】:

    我认为西蒙的回答可能有点不对劲。实际上,您确实需要在某个地方进行循环。抽水引理要求识别字符串所采用的路径包括一个循环(这是抽水引理的“xyz”的“y”)。我们可以根据需要多次执行此循环,从而抽出字符串。

    1. 这应该是 1。最小泵送长度必须始终大于 0,即使语言中没有字符串也是如此。
    2. 这应该是 2。如果 p = 1,我们不能抽 01(因为 y 必须等于 0,而 001 不在语言中)。
    3. 这应该是 5。
    4. 这也应该是 5。如果我们设置 p=4,那么我们声称“1011”是可泵送的(事实并非如此,因为它是语言中唯一的字符串)。
    5. p = 1。

    【讨论】:

      猜你喜欢
      • 2015-12-01
      • 2020-05-05
      • 2012-11-04
      • 2013-01-20
      • 2013-09-13
      • 1970-01-01
      • 2016-08-03
      • 2014-08-03
      • 1970-01-01
      相关资源
      最近更新 更多