【问题标题】:Regular expression for "even odd language of strings over {a, b}“{a, b} 上字符串的偶数奇数语言的正则表达式
【发布时间】:2015-07-06 12:44:41
【问题描述】:

我想让正则表达式具有偶数个 b 和奇数个 a 也是它的 DFA 和 NFA 为此我在DFA

我得到了这两个Regular Expression

  1. Regular Expression 对于偶数 b 的(a*a*a*bb)*

  2. Regular Expression 对于 a 的奇数个 (a b*b*)(a b*b*a)*

问题:我做了正确的 DFA 吗?

  • 如果两个正则表达式都正确,如何合并成一个??
  • 如何将DFA 转换为NFA

编辑:我从 Grijesh Chauhan 获得 DFA 仍然无法制作只允许偶数个 b 和奇数个 a 的正则表达式。 我也试过这个正则表达式

(a(bb)*(aa)*)*

注意:从上面的 RE 只生成那些从 a 开始的字符串,但我希望那个 RE 生成偶数个 b 和奇数个 a 的字符串,无论从 a 或 b 开始

【问题讨论】:

  • 这没有多大意义; bab 有偶数个 bs 但不匹配你的第一个 RE,b 有奇数个 bs 但不匹配你的第二个 RE,X*X* = X* 对于所有 X ,并且所有 DFA 都已经是 NFA,所以我不明白您要转换的内容。还有多种“合并” RA 的方法;你指的是哪种方式?串联?
  • 检查这个答案 [Need Regular Expression for Finite Automata: Even number of 1s and Even number of 0s]()(stackoverflow.com/questions/17420332/…) re-write solution with final state is Q2。 -- 实际上是重复的
  • @GrijeshChauhan 我正在寻找正则表达式,DFA 和 NFA 用于偶数 b 和奇数 a
  • @KhurramAli 是的,该链接回答了您的问题,请阅读我已经给出了每个状态的含义“Q1:a 的奇数和 b 的偶数”,因此您必须按照我所写的那样驱动正则表达式“偶数 a 偶数 b”。试一试。
  • @GrijeshChauhan 在链接的答案“|”中是“+”在 PCRE 中?

标签: regex regular-language finite-automata dfa


【解决方案1】:

正则表达式不正确。他们应该是

  • a*(ba*ba*)* 表示偶数个 b
  • b*ab*(ab*ab*)* 表示奇数个

有一个系统的方法来执行这两者的合并,因为每个正则表达式都可以由状态机表示,反之亦然,并且肯定有一种方法可以合并状态机,使得结果状态机接受如果其中任何一个两个状态机都接受,但我不记得这是如何直接在正则表达式上完成的。

【讨论】:

  • 第二个正则表达式应该是奇数个a。
  • @Taemyr 否。事实上,在两个正则表达式中,a 仅以a* 出现,因此绝对不能对as 的数量做出任何声明。
  • 我想你误解了我的意思。 a's 和 b's 应该在你的第二个正则表达式中切换,因为 OP 需要奇数个 a's。
【解决方案2】:

您的 DFA 不正确。可以看到这一点,因为您有奇数长度的循环。遵循这些周期会改变奇偶校验。所以我可以从你的 DFA 接受的“babb”开始,有奇数个 b 和奇数个 a。 q0->q1->q2 是 3 个 a 的循环,因此当我处于其中一种状态时添加 3 个 a 不会改变自动机接受的情况,因此您的自动机接受“aaababb”,尽管没有奇数个 a 或一个偶数个b。 (你的机器也因为“bab”而失败,尽管这有奇数个 a 和偶数个 b)

您的 DFA 至少应跟踪 a 和 b 数量的奇偶性。所以你应该从 4 个状态开始。 Q_{偶数,偶数},Q_{偶数,奇数},Q_{奇数,偶数}和Q_{奇数,奇数}。以这种方式标记状态后,应该可以直接设置转换并选择应该是初始状态和接受状态。

您的正则表达式也有一些问题。我会注意到 a* 表示 0 个或多个 a,所以 a*a* 表示 0 个或多个 a,后跟 0 个或多个 a。这意味着a*a*=a*。除此之外,请参阅 Georg 的回答。

传统定义是每个 DFA 也是 NFA。从 NFA 到 DFA 时,转换可能是个问题。

请参阅Need Regular Expression for Finite Automata: Even number of 1s and Even number of 0s,了解有关可以对正则表达式进行哪些代数的讨论。

【讨论】:

    【解决方案3】:

    使用这个 DFA....可能对你有帮助....我是用油漆做的,所以看起来不漂亮...

    【讨论】:

      猜你喜欢
      • 2011-04-11
      • 2015-09-06
      • 2019-04-01
      • 2023-03-21
      • 2013-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多