I need help designing a finite state machine that accepts binary strings containing as many occurrences of the pattern 01
as occurrences of the pattern 10
[...] binary strings containing as many occurrences of the pattern
01
as occurrences of the pattern10
. I kinda have a hard time understanding exactly which strings should be accepted and which should be rejected.
The language defined by your specs is in fact none other than the set composed of
The empty string is accepted because it contains zero occurrences of either pattern; easy. To understand why all non-empty accepted strings must start and end with the same character, instead of coming up with a formal proof, let's take a look at a couple of examples. I'll use
--
to highlight occurrences of the 01
pattern, and**
to highlight occurrences of the 10
pattern.10001010
This string contains
01
, and10
,as shown below:
10001010
** ****
----
Therefore, it is not accepted. Note that it doesn't start and end with the same character.
11001111
This string contains
01
, and10
,as shown below:
11001111
**--
Therefore, it is accepted. Note that it starts and ends with the same character (1
).
You get the idea...
I need help designing a finite state machine [...]
Here is an FSM that describes the language in question:
To convince yourself that it does indeed describe the language of interest here, you can think of
0
;0
for the input string so far to get accepted;1
;1
for the input string so far to get accepted.Here the LaTeX code I wrote for drawing the FSM above.
\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}
You may need to be more precise in your question with the language that describes your language, because this to me sounds a lot like the classic trick question to create a FSM that recognizes L={0^n1^n: n is a positive integer} or, in plain speak, some pattern followed by the same number of a different pattern.
This cannot be done with a Deterministic or nondeterministic finite state machine because to count N you would need an infinite (or non finite) state machine.
A Grammar can solve this issue. It would be as follows: S-> 01S10 S-> (epsilon) (goes away, in other words)