DFA that recognizes number of 0 is multiple of 3 on input {0,1}
Last Updated :
30 Jan, 2023
Finite Automata is known as a finite state machine that are acceptable otherwise not acceptable. on the input alphabet ‘0’ and 1′.
- Determine the initial state.
- The transition occurs on every input alphabet.
- Determine whether the self-loop should apply or not.
- Mark’s final state.
Designing DFA step by step :
Step-1:
Make initial state “A” then it is the possibility that there would not be any ‘0’ but have only ‘1’ in the string which is acceptable because 0 is divisible by 3.So, in this case, any number of 1’s can be present here and for this put self-loop of ‘1’ on initial state “A”.
Step-2:
Create transition of input alphabet ‘0’ from state “A” to state “B”.
Step-3:
After one ‘0’ any number of 1’s can be present i.e, no ‘1’ or more than one ‘1’.For this put self loop of ‘1’ on state “B”.
Step-4:
Now create transition of input alphabet ‘0’ from state “B” to state “C” and after two 0’s any number of 1’s can be found in the string and for this put self loop of ‘1’ on initial state “C”.
Step-5:
Before transition of third ‘0’ we need to think about the logic so that after this transition the machine will accept string that have number of zeros divisible by 3.For this transit ‘o’ from state “C” to state “A”.AS third zero is reaching to state “A” so make state “A” be final state.
Transition table of above DFA:
States |
Input (0) |
Input (1) |
—> A * |
B |
A |
B |
C |
B |
C |
A |
C |
In above table, —> represents initial state and * represents final state. In this article, initial and final state is same which is final state.
Transition rules of above DFA:
Implementing :
Java
import java.util.*;
class GFG{
static void checkStateA(String n)
{
if (n.length() == 0 )
System.out.print( "String accepted" );
else
{
if (n.charAt( 0 ) == '1' )
checkStateA(n.substring( 1 ));
else
stateB(n.substring( 1 ));
}
}
static void stateB(String n)
{
if (n.length() == 0 )
System.out.print( "String not accepted" );
else
{
if (n.charAt( 0 ) == '1' )
stateB(n.substring( 1 ));
else
stateC(n.substring( 1 ));
}
}
static void stateC(String n)
{
if (n.length() == 0 )
System.out.print( "String not accepted" );
else
{
if (n.charAt( 0 ) == '1' )
stateC(n.substring( 1 ));
else
checkStateA(n.substring( 1 ));
}
}
public static void main(String []args)
{
Scanner sc = new Scanner(System.in);
String n = sc.nextLine();
checkStateA(n);
}
}
|
Python3
def checkStateA(n):
if ( len (n) = = 0 ):
print ( "string accepted" )
else :
if (n[ 0 ] = = '1' ):
checkStateA(n[ 1 :])
else :
stateB(n[ 1 :])
def stateB(n):
if ( len (n) = = 0 ):
print ( "string not accepted" )
else :
if (n[ 0 ] = = '1' ):
stateB(n[ 1 :])
else :
stateC(n[ 1 :])
def stateC(n):
if ( len (n) = = 0 ):
print ( "string not accepted" )
else :
if (n[ 0 ] = = '1' ):
stateC(n[ 1 :])
else :
checkStateA(n[ 1 :])
n = input ()
checkStateA(n)
|
C#
using System;
using System.Collections;
using System.Collections.Generic;
class GFG{
static void checkStateA( string n)
{
if (n.Length == 0)
Console.Write( "string accepted" );
else
{
if (n[0] == '1' )
checkStateA(n.Substring(1));
else
stateB(n.Substring(1));
}
}
static void stateB( string n)
{
if (n.Length == 0)
Console.Write( "string not accepted" );
else {
if (n[0] == '1' )
stateB(n.Substring(1));
else
stateC(n.Substring(1));
}
}
static void stateC( string n)
{
if (n.Length == 0)
Console.Write( "string not accepted" );
else
{
if (n[0] == '1' )
stateC(n.Substring(1));
else
checkStateA(n.Substring(1));
}
}
public static void Main( string []args)
{
string n = Console.ReadLine();
checkStateA(n);
}
}
|
Time complexity: O(n) where n given string input
Auxiliary space: O(1)
Like Article
Suggest improvement
Share your thoughts in the comments
Please Login to comment...