📜  在 DFA 中查找接受所有二进制数集的状态数的小技巧,这些二进制数是 n 的模数

📅  最后修改于: 2022-05-13 01:54:10.515000             🧑  作者: Mango

在 DFA 中查找接受所有二进制数集的状态数的小技巧,这些二进制数是 n 的模数

假设我们有一个问题:

Que: Construct minimal state DFA that accepts set of all binary no. which is 2 mod 5(say)
Ans: 5 states

为了解决这些类型的问题,有一种为该问题构建相应 DFA 的传统方法。传统方法的问题在于,它非常耗时,而且并非所有人都能一次完美地构建DFA (这会导致错误的答案)。

所以,这里有一个技巧可以在几秒钟内解决这些类型的问题。按照下图中显示的步骤进行操作,经过一些练习,它就会触手可及。

脚步:

  1. 如果 n 是奇数,则状态的最小值将为 n。
  2. 如果 n 不是偶数:
    • 检查 n 是否等于格式 2^k (like 4 = 2^2, 8 = 2^3) ,其中 k 是任何整数。
    • 如果 n = 2^k。那么最小的状态数将是 k+1。
    • 但是,如果不是 n != 2^k
      • 检查 n/2 是否为奇数,则最小状态将为 n/2+1。
      • 如果 n/2 是偶数,则一次又一次地将 no 除以 2 直到我们得到奇数,然后将 no 乘以除以得到奇数 [ ((n/2))/2….odd +米]。该总和的结果将是最小的状态数。
EXAMPLE 1: 2 mod 5 where r=2,n=5
SOLUTION:
1. 5 is odd 
    Therefore, ans is 5 states (n states)
EXAMPLE 2: 4 mod 8 where r=4,n=8
SOLUTION:
1. 8 is even (so it can't be n states)
2. check n=2^k format
    8=2^3
    Therefore, ans is 4 states(k+1 states)
EXAMPLE 3: 10 mod 16 where r=10,n=16
SOLUTION:
1. 16 is even (so it can't be n states)
2. 16 != 2^k (so it can't be k+1 states)
3. n/2 is even (16/2=8, so it can't be n/2+1 states)
4. Divide n by 2 till we get odd no and keep a count on how many times we are dividing
    16/2=8 , m=1
    8/2=4 , m=2
    4/2=2 , m=3
    2/2=1 ,m=4   (odd found)
    Therefore answer is 5 states (odd + m states)