【问题标题】:Creating a Deterministic Finite Automata with Odd 0 Parity - Combining DFA创建具有奇 0 奇偶校验的确定性有限自动机 - 结合 DFA
【发布时间】:2017-05-04 17:44:12
【问题描述】:

我已经为这个项目工作了将近一个星期,但老实说,这超出了我的理解范围,我无法在其他地方找到帮助。

我现在的问题是,我只是不知道如何结合 FSA。据我了解,我必须结合我的 2 个 FSA,即主要 FSA 和奇 0 奇偶校验 FSA。

这是主要的 FSA:

这是奇 0 奇偶校验 FSA:

我已经对这个项目感到困惑将近一周了,而且它已经到期了,所以提交它为时已晚,但我仍然坚持它,我真的很想结束它。

还有谁能解释为什么这个表达式不起作用? (拒绝 0100)

((00100|00011|010)(00100|00011|010))*0|((00100|00011|010)(00100|00011|010))*(00100|00011|010)1

【问题讨论】:

    标签: discrete-mathematics state-machine


    【解决方案1】:

    我不知道像这样合并 FSA 的一般方法,但这是针对您的特定问题的一种方法。

    制作原始 FSA 的两份副本,分别称为“偶数”和“奇数”。不变的是,只要您处于子 FSA 之一的状态,奇偶校验就如其名称所示。为此,每个0 转换必须跳转到另一个FSA 中的相应节点; 1 转换在同一个 FSA 中继续。

    起始状态为偶数。 Odd中对应的节点不可达,可以删除。

    您的所有原始接受状态都不再有效,因为您尚未验证奇偶校验位。在 Odd 中,这些状态中的每一个都需要 1 转换到新的接受状态。在 Even 中,来自先前接受状态的 0 需要成为接受状态;所有这些转换都已经存在,因此它们的目标(节点 #1)成为新的接受状态。

    至于为什么您的正则表达式解决方案不起作用,请考虑其中的第一个子组:(00100|00011|010)。这包括偶数和奇数0s 的子模式;您无法判断哪个匹配,因此您已经永久失去了最终奇偶校验的踪迹。您必须以某种方式安排整个正则表达式的每个单独部分以仅匹配具有相同奇偶性的事物-我不完全确定这在传统的正则表达式中是否可行。 (如果我使用正则表达式的现代计算机实现来解决这个问题,我会使用前瞻断言来验证整体奇偶校验,这是一个与验证三个模式的串联完全不同的过程。)

    编辑:插图!

    我们首先制作两份原始 FSA 的副本,标记为偶校验或奇校验。您也可以将其视为为您的第一个 FSA 中的每个节点制作第二个 FSA 中的节点的副本。 开始状态是偶数,因为你最初有零个 0。状态 o0 是不可达的,在后面的图中将被省略。标签还无效,因为每次出现0 转换时,奇偶校验都会更改——这些转换需要转到 FSA 的另一个副本。我无法让 graphviz 产生任何对所有这些交叉点都可以稍微理解的东西,所以我将不得不放弃偶数/奇数状态周围的盒子。这是应用了交叉的图表: 这个 FSA 与你原来的句子完全匹配,除了你总是知道你在每个州是奇偶校验还是偶校验。接受状态仍然与原始状态相同:为了处理您的最终奇偶校验位,我们需要从每个状态添加一个最终转换到新的接受状态。从所有三个 Odd 接受状态中,有一个 1 转换到标记为“o”的新状态。在所有四个偶数接受状态中,最后的奇偶校验位将是一个0 转换——它恰好对应于现有的“o1”状态。这是最终的图表,带有更新的接受状态:

    【讨论】:

    • 感谢您的解释!你提到的过程,这适用于我的主要 FSA 吗?所以我制作了2份?我不太确定我是否了解该过程将如何进行。您能否进一步详细说明或列出前几个状态,以便我对如何做有一个大致的了解?
    • 是的,复制一份 - 保持1 链接不变(例如:#1->#3),交换0 链接的目标(所以偶数#1->奇数#2,奇数#1->偶数#2)。
    • 嗨所以我只需要清理一些东西来尝试这个,每次有一个交换目的地,它是一个新的状态吗?我草拟了我的第一次尝试,我只是标记状态是偶数还是奇数,但我认为这不是你解释的正确过程。我有这个:i.imgur.com/x7kgMmi.png ......这是你说交换目的地时的意思还是我解释不正确?
    • 唯一需要的新状态是来自 Odd 的接受状态(Even 的接受状态是现有节点)。如果“交换”对您没有意义,也许尝试“交叉”?删除偶数和奇数中的节点#1 -> 节点#2 转换(因为它改变了奇偶性),而是让偶数中的#1 转到奇数中的#2,反之亦然。
    • 你介意和我一起完成吗,我只是无法像你建议的那样弄清楚交换/交叉 T_T
    【解决方案2】:

    好的,这是我的想法,杰森很好地指出了你会遇到的问题,首先我会用我的代码创建一个表格,并创建一组可以接受的字符串

    A = 00100
    B = 00011
    c = 010
    

    根据您的指南,一组可接受的字符串将是 000110 001000100001110

    给出你的字母代码表达式,例如 001000 对于偶数 0 奇偶校验属性是不可接受的。请注意,这只是一个 A,因此不会接受 A 或 C 消息。我鼓励您重做您的字母代码,3 位数的代码会更容易,因为您将有更多的接受字符串,而您的 DFA 可能会更小。

    提供您的代码,很难实现仅 DFA 的解决方案或仅适用于 DFA 的简单解决方案。还要记住,字母之间的代码不应该是其他代码的前缀,这将简化您的问题。

    假设我们的代码是

    A = 101
    B = 001
    C = 110
    

    那么我们有以下一组具有偶数 0 配对属性的可接受消息:

    1010
    1011010
    1100
    0011100
    

    请注意,在人类语言中,您将有一定数量的 A 后面跟着一个 0 任何数量的 BC 后面跟着一个 0 等等。您可以从那里开始形成您的正则表达式。我希望这已经足够清楚了。

    【讨论】:

    • 总结一下,我的目标是创建一个确定性有限自动机,它处理常规语言 (00100 + 00011 + 010)* 并在末尾有一个奇偶校验位以确保 0 的位置是奇数.这是我的项目指南:i.imgur.com/AxHkH4q.png
    • 您好,我看到您的正则表达式生成的不好。如果我从您的项目指南中正确理解,我可以告诉您 A=00100 B=00011 和 C=010 您的正则表达式将只接受 ABC、ABBBC AAAABC 。如果我错了,请纠正我给你我的最终答案。顺便说一句,您提交的第二个表达式中缺少 0
    • 是的没错,初始正则表达式生成不好?我认为这可能是真的,因为我只是使用一个软件来创建正则表达式。另外,我到底在哪里错过了 0?
    • 顺便说一句,提交是表格形式,如下所示:i.imgur.com/XhBYZ8I.png。只是想知道,是否会形成正确的正则表达式并转换为 FSA 表格以供我提交?我从一开始就一直在尝试这样做,但我不太确定它是否会那样工作。
    • @IceArt 是的,正确的做法实际上是,表格代表你的 fsa
    【解决方案3】:

    您想要的是一个接受所谓的两种语言的交集的 DFA:

    1. 语言 (00100 + 00011 + 010)*(0+1)
    2. 奇数个 0 的字符串语言

    (注意:我添加(0+1)代表你打算添加到末尾的额外位。如果这不是你的意思,请忽略)。

    我针对如何以这种方式组合 DFA 的问题发布了一个经过充分审查的答案:请参阅 here。小结:

    1. 为两种语言创建 DFA M1 和 M2
    2. 如下创建一个新的 DFA M3:
      • Q3 = Q1 x Q2(M3 的状态是来自 M1 和 M2 的有序状态对)
      • S3 = (S1, S2)(初始状态是M1, M2的有序初始状态对)
      • A3 = {(q1, q2) | A1 中的 q1,A2 中的 q2}(接受状态是有序的状态对,其中两个元素都在各自的机器中接受状态。这给了你交集。对于联合,至少一个必须接受。对于差异,q1 必须接受并且q2 一定不能。等等)
      • f3 : Q3 x E -> Q3 被定义为 f3((q1, q2)) = (q1', q2'),只要 f1(q1) = q1' 和 f2(q2) = q2'。李>

    在您的情况下,您将获得一个具有两倍于第一个 DFA 的状态的 DFA。该 DFA 的第一个“副本”将代表偶校验,第二个“副本”将代表奇校验。您的机器将像以前一样工作,但只要您看到 0,它就会在“副本”之间来回跳动。只有奇校验副本会保持其接受状态。

    【讨论】:

    • 嗨,我现在要尝试一下,但与此同时,我生成了一个带有 (00100 + 00011 + 010)*(0+1) 的 DFA,并为奇数 0。i.imgur.com/Q4OU9n2.png 这些图表对于我需要开始两种语言的交集过程是否正确?
    猜你喜欢
    • 2012-12-03
    • 2017-11-01
    • 2013-01-18
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2013-10-20
    • 2015-06-29
    • 2023-03-30
    相关资源
    最近更新 更多