【问题标题】:Writing regular expressions for these languages?为这些语言编写正则表达式?
【发布时间】:2013-11-07 16:25:10
【问题描述】:

字母表 Σ = {0, 1} 上的以下语言都是正则的:

L = { w | w 是偶数长度并以 01 }

开头

L = { w | w中1的个数是3的倍数}

L = { w | w 不包含子串 10 }

我被要求为这些语言编写正则表达式,但我不知道该怎么做。谁能给我建议如何解决这些问题?

【问题讨论】:

  • 到目前为止你尝试过什么?这看起来像是试图让我们为你做作业。
  • 我是新手,不懂正则表达式的规则。
  • @HamZa:很好。在我的文化中,HW 的到来预示着秋天。
  • 对不起,我认为这里的人比健谈更活跃,因为我没有太多时间了解这个话题,我想,你们会有所帮助但徒劳的
  • @Light- 作为目前教授可计算性理论课程的人,我非常关心学术诚信。 如果您已经证明您自己做出了诚实的努力,我们很乐意为您提供帮助。发布家庭作业问题并说“你如何解决这些问题?”没有任何迹象表明您已经做出了努力,仅仅获得解决方案也无济于事。请参阅我的答案 - 这是一系列提示 - 以获得一些直觉。

标签: regex theory regular-language


【解决方案1】:

这里有一些提示:

  1. 您可以使用表达式 (0 ∪ 1) 来表示“0 或 1”,并使用 (0 ∪ 1)(0 ∪ 1) 来表示“任何两个字符的字符串”。你能从这些表达式中的第二个组成所有偶数长度的正则表达式吗?然后你能看到如何从那里得到你需要的语言吗?

  2. 任何具有多个 1 且是 3 的倍数的字符串都可以细分为一组较小的字符串,每个字符串由三个 1 和散布的 0 组成。你能把所有的字符串都包含三个 1 吗?从那里,你能得到你需要的语言吗?

  3. 这实际上是最简单的。写出一些不包含 10 的字符串。注意到什么了吗?作为提示,您可以使用四个字符来执行此操作。

希望这会有所帮助!

【讨论】:

    【解决方案2】:

    L = { w | w 是偶数长度并以 01 }

    开头

    回答: 01((0 + 1)(0 + 1))*

    解释:01 本身的长度为偶数,我们可以为任何偶数长度的字符串添加后缀,包括0s 和1s。

    L = { w | w中1的个数是3的倍数}

    回答: (0*10*10*10*)*

    解释:0 可以在字符串中的任意位置出现任意次数,限制超过 1 它应该是 3 的倍数,所以 * 超过三个 1

    L = { w | w 确实 not 包含子字符串 10 }

    回答: 0*1*

    解释:字符串不能包含10 表示在任何1 之后只允许1

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-07-28
      • 2016-02-23
      • 2012-05-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      相关资源
      最近更新 更多