【问题标题】:Design DFA that checks wheter a boolean formula is true or false设计检查布尔公式是真还是假的 DFA
【发布时间】:2017-08-28 11:57:22
【问题描述】:

我真的需要一些帮助,我制作了大约 100 个构建 DFA 的示例,但我一直坚持这一点。任何帮助都感激不尽。

所以我有一些随机布尔函数,例如: f(a,b,c,d) = (a∨c)∧((a∧b)∨(c ↔ d)) 我应该做一个 DFA,它接受所有为真的字符串 {3,7, 8,11,12,13,14,15 二进制)其他所有内容都应该被拒绝。所以基本上我需要一个 DFA 将这些整数转换为二进制形式并接受它们,拒绝剩下的其他整数。我是怎么做到的?我花了几个小时试图对状态提出质疑。在这种情况下,您如何制作转换表?

再次感谢您对我的帮助! :)

【问题讨论】:

  • 所以评估的公式是固定的,正是问题中的那个? DFA 的输入是 4 个布尔值?
  • 是的,公式是固定的,输入正好是 4 个值,之后的所有内容都将被忽略

标签: function automata dfa deterministic


【解决方案1】:

如果我正确理解了这个问题,那么问题是“相对容易”,因为输入是固定大小的,这意味着接受的语言也是有限的。我将给出一个构造的草图,这将导致相对大量的状态,但不会使用复杂的想法。

用真值表检查公式。有4 变量要评估,这意味着有2^4 = 16 可能的输入。

将这些输入排列在一个决策树中,该决策树由从根(这是 DFA 的初始状态)到 16 叶的 16 路径组成。当且仅当通向它的路径对应于在真值表中评估为“是”的输入时,叶子才是终端状态。

请注意,有限语言总是有可能被 DFA 识别 - 构造一个 NDFA,它接受语言中的每个单词并将这个单词转换为 DFA(细节上可能很复杂,但是这样的自动机通过this 构造保证存在)。

【讨论】:

  • 谢谢先生。问题是这是一个考试任务,这意味着你有 5-6 分钟的时间来完成它,我很确定我不会用 256 条路径制作决策树,构建 NFA 并将其转换为 DFA .. :D 这个想法很好,我只是想知道如何制作简单的DFA,它接受二进制ofc中的数字3、7、8、11、12、13、14、15,并拒绝剩下的0、1、2、4、5, 6,9,10.
  • 您是否认为接受和拒绝的数字中存在一种模式,从而可以实现更短的解决方案?明确写下所有路径确实有点冗长。但是,我不知何故算错了可能输入的数量;实际数字更小。
  • @stenil : 如果上面的帖子有用,请接受并点赞。尊重您收到的每条回复,因为它们需要很多时间和精力。
猜你喜欢
  • 2020-12-31
  • 1970-01-01
  • 1970-01-01
  • 2021-11-23
  • 2019-01-21
  • 2019-08-09
  • 2019-12-24
  • 1970-01-01
  • 2016-05-10
相关资源
最近更新 更多