DFA代表密码

时间:2016-03-05 22:28:36

标签: computation-theory dfa

我想为具有以下约束的密码设计DFA:

  • 长度必须为8个字符
  • 它必须包含至少两个小写字符:[a-z]
  • 它必须包含至少一个大写字符:[A-Z]
  • 必须包含至少两个十进制数字:[0-9]
  • 必须至少包含以下特殊字符之一:[!.@*_]
  • 必须以特殊字符开头

如何设计此DFA?

1 个答案:

答案 0 :(得分:3)

此语言的任何DFA都需要至少记住

  • 已读取多少个小写字母(0,1或2或更多),
  • 已读取多少个大写字母(0,或1或更多),以及
  • 读取了多少个十进制数字(0,1或2或更多)。

这至少给你至少18个状态,甚至不考虑长度限制。我认为你不会为这种语言找到一个简单的DFA。它会变得很大。

现在,您可以通过为每个限制构建一个DFA(这些都不是太糟糕)构建一个相当简单但非常庞大的DFA,然后进行多向产品构建以构建整个语言的DFA。我认为这是理论上最优雅的方法,实际上很容易用软件来表示。如果我必须真正构建DFA,我就是这样做的。