簡體   English   中英

DFA - 設計一個DFA,它接受{0,1}上的所有字符串,其中包含最多兩個00和三個11作為子字符串

[英]DFA - design a DFA that accepts all strings over {0,1} that contains at most two 00's and three 11's as substring

我正在練習我的DFA而且我遇到了這個似乎非常復雜的問題。 我嘗試將它分成兩個較小的問題,我有一個答案,但它看起來不對我。

有人可以幫助我,或者至少給我一些提示。

他們都接受國家順便說一下。 在此輸入圖像描述

我能想到的另一種可能性是,由於它們需要成對,因此每兩個O或1只有接受狀態。 因此例如11接受11接受11接受。

您將狀態機描述為一幅巨大的圖片,但您可以通過使用結構化名稱命名狀態而不是嘗試繪制巨大的圖表來使問題更容易。

讓你的狀態為(n,m,s),其中n是你看過的00的數量,m是你看過的11s的數量,s是前面的字符讀數(s ='','1', '0')(其中''表示你沒有看到過前一個角色,或者你剛剛找到'00'或'11')。

然后你的過渡是:

(n, m, '')  -0-> (n, m, '0')
(n, m, '')  -1-> (n, m, '1')
(n, m, '0') -0-> (n+1, m, '')
(n, m, '0') -1-> (n, m, '1')
(n, m, '1') -0-> (n, m, '0')
(n, m, '1') -1-> (n, m+1, '')

n <= 2且m <= 3的所有狀態都在接受。 開始狀態是(0, 0, '')

這不是有限的,但您可以通過將所有非接受狀態合並為單個狀態來實現。 它將具有(3 * 4 * 3 + 1)= 37個狀態,這是最小的。

計算重疊的00和11。

上面的答案假設'000'包含一個'00'而不是2'00'(即'00'的數字是字符串中非重疊'00'的最大數,而'11'則相同) 。 如果你想把'000'算作2,你需要這台機器:

狀態是S(開始)或(n,m,s),其中n,m如前,s是'0'或'1'。 然后:

S -0-> (0, 0, '0')
S -1-> (0, 0, '1')
(n, m, '0') -0-> (n+1, m, '0')
(n, m, '0') -1-> (n, m, '1')
(n, m, '1') -0-> (n, m, '0')
(n, m, '1') -1-> (n, m+1, '1')

所有州都接受,但n> 2或m> 3的州除外。 同樣,我們將所有非接受狀態合並為一個狀態。

這具有(3 * 4 * 2 + 2)= 26個狀態,這又是最小的。

生成FSM圖。

給定正式描述,可以編寫程序來生成描述機器的DOT文件。 這是在答案的第一部分為機器生成圖表的程序。 (注意,它沒有顯示哪些州正在接受,但它們都是FAIL除外)。

def state(n, m, s):
    if n > 2 or m > 3: return 'FAIL'
    return "n%s_%s_%s" % (n, m, s)

def T(st, c):
    n, m, s = st
    if s == '':
        return (n, m, c)
    if s == '0':
        return (n+1, m, '') if c=='0' else (n, m, c)
    if s == '1':
        return (n, m+1, '') if c=='1' else (n, m, c)

print 'digraph {'
for n in xrange(3):
    for m in xrange(4):
        for s in ['', '0', '1']:
            for c in '01':
                print '    %s -> %s [label="%s"]' % (state(n, m, s), state(*T((n, m, s), c)), c)

print '}'

這是通過dot -Tpng管道輸出的結果: FSM

好吧,您可以使用單詞來描述自動機,而不是繪制自動機。

我如何解決您的問題:讓頂點成為三元組

  • 第一個元素是0,1,2,3和“至少4”表示11的數量。
  • 第二個元素是0,1,2和“至少3”,取決於“00”的數量
  • 第三個元素是最后一個符號(0,1或“字符串為空”)

定義轉換,啟動狀態和完成狀態非常容易。

所以,有5 * 4 * 3 = 60個州

您可能會注意到有一些不可實現的狀態和某些狀態可能會聯合到“失敗狀態”,這可能會顯着減小自動機的大小

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM