Computer science DFA最小化测试套件?
我正在寻找一个确定性有限自动机测试套件,用于测试DFA最小化算法的正确性。你能给我一些指点吗?或者是否有算法/实现可以生成这样的自动机 要赢得奖金,您需要提交一个包含400个或更多不同大小和复杂度的非最小自动机的测试套件,其中至少20个包含2000多个节点Computer science DFA最小化测试套件?,computer-science,finite-automata,Computer Science,Finite Automata,我正在寻找一个确定性有限自动机测试套件,用于测试DFA最小化算法的正确性。你能给我一些指点吗?或者是否有算法/实现可以生成这样的自动机 要赢得奖金,您需要提交一个包含400个或更多不同大小和复杂度的非最小自动机的测试套件,其中至少20个包含2000多个节点 如果这个地方不适合问这个问题,请告诉我一些更好的地方。谢谢 要测试正确性,您可以尝试将最小DFA转换为格式,并使用该操作测试最小ACCETPOR的等效性 测试多达n个状态和m个字母符号的“所有”DFA是不可行的。您可以使用已知的最小DFA测试
如果这个地方不适合问这个问题,请告诉我一些更好的地方。谢谢 要测试正确性,您可以尝试将最小DFA转换为格式,并使用该操作测试最小ACCETPOR的等效性 测试多达n个状态和m个字母符号的“所有”DFA是不可行的。您可以使用已知的最小DFA测试DFA;要获得(DFA,最小DFA)对,您可以生成随机REs,使用Kleene定理的算法获得NFA lambda,使用子集构造获得DFA,然后使用已知的正确DFA最小化算法最小化(我假设您接受规范算法是正确的) 编辑: 为了扩展我所说的内容,以下是我将如何尝试生成非最小有限自动机的测试套件:
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的更方便的选项 出于好奇,您是否对测试性能或正确性感兴趣?或者两者都有?还是别的?谢谢你的来信。我对正确性很感兴趣。我已将你的评论作为编辑纳入其中。谢谢山姆,我错过了什么?我可以看到这个很好的工具如何验证最小化自动机,但我不知道初始的非最小化自动机来自哪里。