
Data Structure
Networking
RDBMS
Operating System
Java
MS Excel
iOS
HTML
CSS
Android
Python
C Programming
C++
C#
MongoDB
MySQL
Javascript
PHP
- Selected Reading
- UPSC IAS Exams Notes
- Developer's Best Practices
- Questions and Answers
- Effective Resume Writing
- HR Interview Questions
- Computer Glossary
- Who is Who
Check if Binary String is Multiple of 3 Using DFA in Python
Suppose we have an array n that represents a binary representation of any number. We have to check whether its binary representation is divisible by three or not by using Deterministic Finite Automata DFA.
So, if the input is like n = [1, 1, 0, 0] (binary of 12), then the output will be True.
To solve this, we can construct DFA like below −
The approach is simple when a number is divisible by 3 then the remainder will be 0, if not then remainder will be 1 or 2. There are three states for these three remainders. The initial state is also final state because when remainder is 0 it means the number is divisible.
To solve this, we will follow these steps −
- dfa_state := 0
- for i in range 0 to size of nums - 1, do
- digit := nums[i]
- if dfa_state is 0, then
- if digit is same as 1, then
- dfa_state := 1
- if digit is same as 1, then
- otherwise when dfa_state is 1, then
- if digit is same as 0, then
- dfa_state := 2
- otherwise,
- dfa_state := 0
- if digit is same as 0, then
- otherwise when dfa_state is 2, then
- if digit is same as 0, then
- dfa_state := 1
- if digit is same as 0, then
- if dfa_state is 0, then
- return True
- return False
Let us see the following implementation to get better understanding −
Example
def solve(nums): dfa_state = 0 for i in range(len(nums)): digit = nums[i] if dfa_state == 0: if digit == 1: dfa_state = 1 elif dfa_state == 1: if digit == 0: dfa_state = 2 else: dfa_state = 0 elif dfa_state == 2: if digit == 0: dfa_state = 1 if dfa_state == 0: return True return False n = [1, 1, 0, 0] print(solve(n))
Input
[1, 1, 0, 0]
Output
True
Advertisements