2016-03-05 15 views
1

我想設計一個DFA密碼認爲有以下限制:DFA代表密碼

  • 它必須是8個字符長
  • 它必須包含至少兩個小寫字符:[a-z]
  • 它必須包含至少一個大寫字符:[A-Z]
  • 它必須包含至少兩個十進制數:[0-9]
  • 它必須包含至少一個這些特殊字符:[[email protected]*_]
  • 它必須以特殊字符

如何設計這個DFA開始?

+0

這將是一個非常大的DFA ... –

+0

這就是要點,有什麼辦法可以最小化它嗎? –

回答

3

任何DFA這種語言需要記住至少

  • 多少小寫字母都被讀取(0,1,或2個或更多),
  • 多少大寫字母(0或1或更多)和
  • 已讀取多少個十進制數字(0,1或2或更多)。

這給了你至少18個州的最低限度,這甚至不考慮長度限制。我認爲您不會爲此語言找到簡單的DFA。它會變得很大。

現在,您可以通過針對每個限制構建一個DFA(這些都不是太糟糕),然後執行多方面的產品構建以構建針對整體語言的DFA,從而構建DFA,該DFA非常簡單但很龐大。我認爲這是做這件事最理想的優雅方式,用軟件來表達它實際上很容易。如果我必須實際構建DFA,那麼我就是這麼做的。

+0

你能告訴我一個簡單的例子嗎? –