生成随机DFA的好的算法是什么?


9

我正在生成随机DFA,以在其上测试DFA减少算法。

我现在使用的算法如下:对于每个状态,对于字母中的每个符号,将到某个随机状态。每个状态具有成为最终状态的相同概率。Ç δ q C ^ qcδ(q,c)

这是生成无偏DFA的好方法吗?另外,此算法不会生成调整DFA(没有过时状态的DFA),因此我想知道是否有更好的方法来生成随机DFA,以某种方式确保它是调整过的?


2
随机DFA没有自然分布,所以这取决于您。你想要完成什么?
Yuval Filmus

我正在生成随机DFA,以在其上测试DFA减少算法。
邓肯

也许您想从一小部分最小DFA开始并进行分解?这样,您便知道最小化实际上可以达到正确的结果。
adrianN

想知道,您是否正在测试非最佳还原算法,还是在寻找唯一的最小最佳DFA?
vzn13 2013年

2
如果要生成用于测试的数据结构,则无偏不重要。重要的是要有很好的机会触发有趣的行为。打个比方,在测试几何算法时,需要确保某些测试将三个点对齐,而其他情况则永远不会出现在随机分布中。
吉尔(Gilles)'所以

Answers:


6

查阅[1]和第4节“随机自动机生成”中的讨论。本文对不同的DFA最小化算法进行了基准测试。使用统一随机生成器,该生成器生成具有个状态和符号的完整DFA的规范字符串表示形式。他们还讨论了其他方法。ķnk


[1] Almeida,M.,Moreira,N.和Reis,R.(2007)。关于自动机最小化算法的性能。算法逻辑和理论,3。


“规范字符串表示形式”是什么意思?
邓肯

@drowse通过以广度优先的方式遍历自动机,在每个节点上使用的(总计)顺序选择输出,从而在状态集上定义规范顺序。查看本文中的参考文献。Σ
Juho 2013年

4

您应该查看Cyril Nicaud的主页。特别是,以下参考文献与您的问题有关:

F.Bassino,J.David和C.Nicaud,《可能不完全的确定性自动机的枚举和随机生成》,《纯数学与应用》 19(2-3)(2009)1-16。

F. Bassino和C. Nicaud。可访问自动机的枚举和随机生成。理论。比较 Sc。381(2007)86-104。


3

有一些算法可以随机生成DFA,直到排列http://paranthoen.thomas.free.fr/PAPERS/RandDFAToAppearInTCS.ps.gz

但是,在上面的文章中还提到几乎所有DFA都已经是最小的。非最小DFA就像质数一样,数量很少。如果使用此算法来测试最小化算法,则就像使用简单的随机数生成器来测试素数算法一样。为了拥有更多非最小DFA,您可以通过添加接收器状态来更改算法,并将重要的转换百分比重定向到此接收器状态。

但是从我的角度来看,如果要测试实现的快速性,请对照您要使用的实现进行检查:使用随机字集或随机REGEX,创建NFA或DFA,然后最小化生成的DFA 。


2

一种自然的策略是将DFA视为图,然后有许多“自然”的,经过高度研究的图的随机分布,最简单的可能是Erdos-Renyi。在这种情况下,您将DFA的所有状态都视为图形的节点,并选择了所有可能的边(DFA过渡)的某个固定百分比。在更近的时代中研究较多的更复杂的分布是小世界图。对于您在问题中提到的策略,您显然选择了特殊情况,其中是图中的节点数。但是,您的策略(也不是Erdos-Renyi)不保证DFA中的所有状态都已连接[要添加的自然约束]。np=1/nn



重新编辑时,查看DFA的另一种方法是定义边缘一组三元组其中是顶点1,顶点2,是过渡符号,可以选择其中的任何子集来确定DFA。v 1 v 2 b(v1,b,v2)v1v2b
vzn
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.