【问题标题】:Regular expressions and automata正则表达式和自动机
【发布时间】:2011-11-11 12:33:39
【问题描述】:

我正在通过阅读 Aho 的书来学习正则表达式。书里有两个说法我没看懂:

问题 A:

1(0+1)*1 + 1 : denotes the set of all strings beginning and ending with a 1.

我的问题为什么在正则表达式的末尾添加+1? 1(0+1)*1 不应该足够吗?


我也遇到以下问题:

问题 B:

仅包含 0 和 1 且最多有一个 1 的字符串集,如下所示

    0*+0*10* 

你能解释一下解决方案0*+0*10*是如何一步一步得到的吗?

【问题讨论】:

    标签: regular-language


    【解决方案1】:

    关于问题a:1(0+1)*1不匹配以1开头和结尾的单字符字符串1。需要特殊情况,例子就是这样。

    关于问题b:我不能代表作者发言。但是......任何最多包含一个 1 的字符串都是一个没有 1 或恰好有一个 1 的字符串。假设字母表是 {0,1},前者意味着任何包含零个或多个 0 的字符串,即是,0*。后者,在相同的假设下,表示任何包含零个或多个 0 后跟一个 1 后跟零个或 mpre 0 的字符串,即 0*10*。将这些组合起来就是示例。

    【讨论】:

      【解决方案2】:

      对于问题 a:1(0+1)*1 表示所有以 1 开头和结尾的字符串的集合,但不包含长度为 1 并以 1 开头和结尾的字符串 1。

      对于问题 b: 最多包含一个 1 = A + B 的字符串集,其中 A 包含所有包含零的字符串 1s 和 B 是所有字符串的集合,恰好包含一个 1

      所以 A 是 0* 而 B 是 0*10* 因此我们得到的答案是0* + 0*10*

      【讨论】:

        【解决方案3】:

        对于第一个示例,+1 接受但其余部分不接受的字符串是1。其余表达式可以处理 11,但不能处理首尾字符相同的字符串。

        第二个字符串的推理类似 - 0* 处理全零字符串,0*10* 处理 1 个一的字符串。

        【讨论】:

          猜你喜欢
          • 2014-12-05
          • 1970-01-01
          • 1970-01-01
          • 2019-05-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-05-04
          • 2017-10-24
          相关资源
          最近更新 更多