Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Computer science DFA最小化测试套件?_Computer Science_Finite Automata - Fatal编程技术网

Computer science DFA最小化测试套件?

Computer science DFA最小化测试套件?,computer-science,finite-automata,Computer Science,Finite Automata,我正在寻找一个确定性有限自动机测试套件,用于测试DFA最小化算法的正确性。你能给我一些指点吗?或者是否有算法/实现可以生成这样的自动机 要赢得奖金,您需要提交一个包含400个或更多不同大小和复杂度的非最小自动机的测试套件,其中至少20个包含2000多个节点 如果这个地方不适合问这个问题,请告诉我一些更好的地方。谢谢 要测试正确性,您可以尝试将最小DFA转换为格式,并使用该操作测试最小ACCETPOR的等效性 测试多达n个状态和m个字母符号的“所有”DFA是不可行的。您可以使用已知的最小DFA测试

我正在寻找一个确定性有限自动机测试套件,用于测试DFA最小化算法的正确性。你能给我一些指点吗?或者是否有算法/实现可以生成这样的自动机

要赢得奖金,您需要提交一个包含400个或更多不同大小和复杂度的非最小自动机的测试套件,其中至少20个包含2000多个节点


如果这个地方不适合问这个问题,请告诉我一些更好的地方。谢谢

要测试正确性,您可以尝试将最小DFA转换为格式,并使用该操作测试最小ACCETPOR的等效性

测试多达n个状态和m个字母符号的“所有”DFA是不可行的。您可以使用已知的最小DFA测试DFA;要获得(DFA,最小DFA)对,您可以生成随机REs,使用Kleene定理的算法获得NFA lambda,使用子集构造获得DFA,然后使用已知的正确DFA最小化算法最小化(我假设您接受规范算法是正确的)

编辑:

为了扩展我所说的内容,以下是我将如何尝试生成非最小有限自动机的测试套件:

  • 使用N个操作(串联、并集、Kleene闭包)生成正则表达式
  • 使用Kleene定理中的算法得到一个含有O(n)态的NFA lambda
  • 使用subset/powerset构造来获取一个具有O(2^n)状态的DFA
  • 重复上述步骤,直到找到足够数量的足够复杂的自动机
  • 生成正则表达式更容易。有几个规则:

  • 如果a是字母符号,则a是RE
  • (rs)是RE,如果r,s是REs
  • 如果r,s是REs,则(r+s)是RE
  • 如果r是RE,则(r*)是RE
  • 除此之外,没有什么是RE
  • 要获得具有n个操作的RE,递归方法是有效的

    GetRE(ops)
     1. if ops = 0 then return RandomAlphabetSymbol()
     2. select(Rand() % 3)
     3. case 0 then
     4.  ops1 = Rand() % (ops - 1)
     5.  ops2 = (ops - 1) - ops1
     6.  return "(" + GetRE(ops1) + "+" + GetRE(ops2) + ")"
     7. case 1 then
     8.  ops1 = Rand() % (ops - 1)
     9.  ops2 = (ops - 1) - ops1
    10.  return "(" + GetRE(ops1) + "." + GetRE(ops2) + ")"
    11. case 2 then
    12.  return "(" + GetRE(ops - 1) + "*)"
    

    您可能会发现非字符串表示(即,层次链接结构,本质上是解析树本身)是应用Kleene算法获取NFA lambda的更方便的选项

    出于好奇,您是否对测试性能或正确性感兴趣?或者两者都有?还是别的?谢谢你的来信。我对正确性很感兴趣。我已将你的评论作为编辑纳入其中。谢谢山姆,我错过了什么?我可以看到这个很好的工具如何验证最小化自动机,但我不知道初始的非最小化自动机来自哪里。