【问题标题】:DFA to represent a passwordDFA 表示密码
【发布时间】:2016-03-05 22:28:35
【问题描述】:

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

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

如何设计此 DFA?

【问题讨论】:

  • 这将是一个 非常 大的 DFA...
  • 重点是,有什么办法可以最小化吗?

标签: computation-theory dfa


【解决方案1】:

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

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

这至少为您提供了至少 18 个州,这甚至不考虑长度限制。我认为您不会为这种语言找到简单的 DFA。它会变得很大。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-24
    • 2018-10-10
    • 2016-04-16
    • 2013-01-25
    • 2020-09-16
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多