什么有限状态机用相同数量的' 01'来捕获二进制字符串。和' 10'?

时间:2014-10-11 01:50:23

标签: binary state-machine

我需要帮助设计一个有限状态机,它接受包含与模式01出现次数一样多的模式10的二进制字符串。

我很难理解应该接受哪些字符串以及哪些字符串应该被拒绝。

欢迎任何指导。

2 个答案:

答案 0 :(得分:6)

有问题的语言是什么?

  

[...]二进制字符串,包含与模式01的出现次数一样多的模式10。我有点难以确切地理解应该接受哪些字符串以及哪些字符串应该被拒绝。

您的规范定义的语言实际上就是由

组成的集合
  • 空字符串,
  • 以相同字符开头和结尾的所有字符串。

接受空字符串,因为它包含任一模式的零次出现;简单。 要理解为什么所有非空接受的字符串必须以相同的字符开头和结尾,而不是提出正式的证据,让我们看看几个例子。我会用

  • --突出显示01模式和
  • 的出现次数
  • **突出显示10模式的出现次数。

字符串10001010

此字符串包含

  • 出现01
  • 两次
  • 出现10
  • 3次

如下图所示:

10001010
**  ****
   ----

因此,不接受。请注意,它不会以相同的字符开头和结尾。

字符串11001111

此字符串包含

  • 出现01
  • 出现10

如下图所示:

11001111
 **--

因此,它被接受了。请注意,它以相同的字符(1)开头和结尾。

你明白了......

描述有问题语言的有限状态机

  

我需要帮助设计有限状态机[...]

以下是描述相关语言的FSM:

enter image description here

为了说服自己确实在这里描述了感兴趣的语言,你可以想到

  • s0作为只接受空字符串的状态;
  • s1作为仅接受以0;
  • 开头和结尾的字符串的状态
  • s2作为到目前为止输入字符串的下一个字符需要为0才能被接受的状态;
  • s3作为仅接受以1;
  • 开头和结尾的字符串的状态
  • s4作为到目前为止输入字符串的下一个字符必须是1才能被接受的状态。

奖金!

这里是我为上面的FSM绘制的LaTeX代码。

\documentclass{standalone}

\usepackage{tikz}
\usetikzlibrary{
  automata,
  positioning,
}

\begin{document}
  \begin{tikzpicture}[
    node distance=2cm,
    on grid,
    auto,
    scale=.8,
    transform shape,
  ]
    \node[state, initial, accepting] (s0)                     {$s_0$};
    \node[state,          accepting] (s1) [above right=of s0] {$s_1$};
    \node[state                    ] (s2) [right      =of s1] {$s_2$};
    \node[state,          accepting] (s3) [below right=of s0] {$s_3$};
    \node[state                    ] (s4) [right      =of s3] {$s_4$};

    \path[->] (s0) edge              node        {0}    (s1)
              (s1) edge [bend left]  node        {1}    (s2)
                   edge [loop above] node        {0}    ()
              (s2) edge [loop right] node        {1}    ()
                   edge [bend left]  node        {0}    (s1);
    \path[->] (s0) edge              node [swap] {1}    (s3)
              (s3) edge [bend right] node [swap] {0}    (s4)
                   edge [loop below] node        {1}    ()
              (s4) edge [loop right] node        {0}    ()
                   edge [bend right] node [swap] {1}    (s3);
  \end{tikzpicture}
\end{document}

答案 1 :(得分:0)

您可能需要使用描述您语言的语言更精确地解决您的问题,因为这对我来说听起来很像创建一个识别L = {0 ^ n1 ^ n:n的FSM的经典技巧问题一个正整数}或者,简单来说,一些模式后跟相同数量的不同模式。

使用确定性或非确定性有限状态机无法做到这一点,因为要计算N,您需要一个无限(或非有限)状态机。

语法可以解决这个问题。 它将如下: S-> 01S10 S-> (epsilon)(换句话说,消失)