我正在生成随机DFA,以在其上测试DFA减少算法。
我现在使用的算法如下:对于每个状态,对于字母中的每个符号,将到某个随机状态。每个状态具有成为最终状态的相同概率。Ç δ (q ,C ^ )
这是生成无偏DFA的好方法吗?另外,此算法不会生成调整DFA(没有过时状态的DFA),因此我想知道是否有更好的方法来生成随机DFA,以某种方式确保它是调整过的?
我正在生成随机DFA,以在其上测试DFA减少算法。
我现在使用的算法如下:对于每个状态,对于字母中的每个符号,将到某个随机状态。每个状态具有成为最终状态的相同概率。Ç δ (q ,C ^ )
这是生成无偏DFA的好方法吗?另外,此算法不会生成调整DFA(没有过时状态的DFA),因此我想知道是否有更好的方法来生成随机DFA,以某种方式确保它是调整过的?
Answers:
查阅[1]和第4节“随机自动机生成”中的讨论。本文对不同的DFA最小化算法进行了基准测试。使用统一随机生成器,该生成器生成具有个状态和符号的完整DFA的规范字符串表示形式。他们还讨论了其他方法。ķ
[1] Almeida,M.,Moreira,N.和Reis,R.(2007)。关于自动机最小化算法的性能。算法逻辑和理论,3。
您应该查看Cyril Nicaud的主页。特别是,以下参考文献与您的问题有关:
F.Bassino,J.David和C.Nicaud,《可能不完全的确定性自动机的枚举和随机生成》,《纯数学与应用》 19(2-3)(2009)1-16。
F. Bassino和C. Nicaud。可访问自动机的枚举和随机生成。理论。比较 Sc。。381(2007)86-104。
有一些算法可以随机生成DFA,直到排列http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz。
但是,在上面的文章中还提到几乎所有DFA都已经是最小的。非最小DFA就像质数一样,数量很少。如果使用此算法来测试最小化算法,则就像使用简单的随机数生成器来测试素数算法一样。为了拥有更多非最小DFA,您可以通过添加接收器状态来更改算法,并将重要的转换百分比重定向到此接收器状态。
但是从我的角度来看,如果要测试实现的快速性,请对照您要使用的实现进行检查:使用随机字集或随机REGEX,创建NFA或DFA,然后最小化生成的DFA 。
一种自然的策略是将DFA视为图,然后有许多“自然”的,经过高度研究的图的随机分布,最简单的可能是Erdos-Renyi。在这种情况下,您将DFA的所有状态都视为图形的节点,并选择了所有可能的边(DFA过渡)的某个固定百分比。在更近的时代中研究较多的更复杂的分布是小世界图。对于您在问题中提到的策略,您显然选择了特殊情况,其中是图中的节点数。但是,您的策略(也不是Erdos-Renyi)不保证DFA中的所有状态都已连接[要添加的自然约束]。n