Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex “的正则表达式”;{a,b}上字符串的奇偶语言_Regex_Regular Language_Finite Automata_Dfa - Fatal编程技术网

Regex “的正则表达式”;{a,b}上字符串的奇偶语言

Regex “的正则表达式”;{a,b}上字符串的奇偶语言,regex,regular-language,finite-automata,dfa,Regex,Regular Language,Finite Automata,Dfa,我想让正则表达式有偶数个b和奇数个a,还有DFA和NFA 为此,我做了以下DFA 我得到了这两个正则表达式 正则表达式用于b的偶数(a*a*a*bb)* 正则表达式用于a的奇数(a b*b*)(a b*b*a)* 问题:我做的DFA正确吗 如果以上两个正则表达式都正确,如何将它们合并为一个 如何将DFA转换为NFA 编辑:我从Grijesh Chauhan获得了DFA答案 仍然无法生成只允许偶数个b和奇数个a的正则表达式。 我也试过这个正则表达式 (a(bb)*(aa)*)* 注意:从上面R

我想让正则表达式有偶数个b和奇数个a,还有DFA和NFA 为此,我做了以下
DFA

我得到了这两个正则表达式

  • 正则表达式
    用于b的偶数
    (a*a*a*bb)*

  • 正则表达式
    用于a的奇数
    (a b*b*)(a b*b*a)*

  • 问题:我做的DFA正确吗

    • 如果以上两个正则表达式都正确,如何将它们合并为一个
    • 如何将
      DFA
      转换为
      NFA
    编辑:我从
    Grijesh Chauhan获得了DFA
    答案 仍然无法生成只允许偶数个b和奇数个a的正则表达式。 我也试过这个正则表达式

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

    注意:从上面RE只生成从a开始的字符串,但是我想要生成b的偶数字符串和a的奇数字符串的RE,关于从a或b开始的字符串


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

    • a*(ba*ba*)*
      对于偶数个b
    • b*ab*(ab*ab*)*
      对于奇数的a

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

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

    • a*(ba*ba*)*
      对于偶数个b
    • b*ab*(ab*ab*)*
      对于奇数的a

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

    您的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时可能会出现问题


    有关如何在正则表达式上执行代数的讨论,请参阅。

    您的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时可能会出现问题


    有关正则表达式代数的讨论,请参阅。

    使用此DFA…可能对您有帮助…我用油漆做的,不好看…

    使用此DFA…可能对您有帮助…我用油漆做的,不好看…

    这没有多大意义
    bab
    有偶数的
    b
    s但与您的第一个RE不匹配,
    b
    有奇数的
    b
    s但与您的第二个RE不匹配,
    X*X*
    =
    X*
    对于所有X,并且所有DFA都已经是NFA,因此我不明白您试图转换什么。也有多种方式“合并”RAs;你指的是哪条路?连接?检查此答案[需要有限自动机的正则表达式:偶数个
    1
    s和偶数个
    0
    s]()()重写解决方案,最终状态为Q2。-它是重复的actually@GrijeshChauhan我正在寻找正规的快车,DFA和NFA为偶数的b's和奇数的a'ss@KhurramAli是的,这个链接回答了你的问题