2011-11-17 50 views
1

我坚持认为有以下问题的状态机操作:有限状态机与依靠国家先于当前

State 1 ----transition 1---> State 2----transition 2---> State 3 

State 4 ----transition 4---> State 2----transition 2---> State 3 

过渡1与动作1.过渡4相关的关联采取行动4.然而,在设计整个机器之后,我意识到转换2可能与动作2或动作3有关,取决于状态2之前的状态是状态1还是状态4,因此是动作1还是动作4被执行。

我尝试了一个不同的设计,但无法做到这一点。这也不是推式自动机。我该怎么做才能弄清楚这个问题

+0

有可能为您的问题添加图片,无论是从网络还是从您的计算机。我认为.jpg可以在这里帮助... – woliveirajr

+0

谢谢。我将不得不扫描添加图像。我会在周末尝试这个 – doon

+0

你的状态机无效。没有初始状态,并且state4永远不能到达。在状态机中,只有当前状态和先前状态可以影响动作,而不是以前的状态(除非将之前的状态保存在堆栈中,但您已经说过这不是PDA)。 – Jon

回答

3

在我看来,你所说的是状态2实际上可能处于两种状态之一,或者是状态1或状态4之前。对我说它应该实际上由两个状态表示,尽管两者都可以进入状态3.因此,状态1→状态2→状态3,状态4→新状态5→状态3。

你有什么理由不能这样做吗?

+0

感谢您的回复。就行为而言,状态2与状态5完全相同。我不得不说状态2是x_with_prev_state_as_state_1,状态5是state_x_with_prev_state_as_state_4。这是各州之间唯一的区别。我认为如果我必须做出这样的区分,那么在某个地方肯定会出现问题。我将尝试拿出一个具体的例子,而不用讨论系统的可怕细节。与此同时,我更多地考虑了下推自动机,并且似乎如果在堆栈中推下前一个状态,那么这个系统就会建模。可以吗 – doon

+0

我在说的是,如果以前的状态很重要,那就表明它处于不同的状态,这取决于它来自哪里。状态机的想法是,所有相关信息都包含在当前状态中,而不需要像前任那样的附加信息。要说两个状态是相同的,但不管X是什么,它们是不同的状态。 – Derek

+0

@doon:我认为这是正确的做法。但是,您可以在两个州之间共享实施。让两个状态函数调用相同的底层代码。 –