[英]What is the algorithm for generating a random Deterministic Finite Automata?
DFA必须具有以下四个属性:
DFA有N个节点
每个节点有2个传出转换。
每个节点都可以从每个其他节点到达。
从所有可能性中选择DFA具有完全均匀的随机性
这是我到目前为止:
但是,这是算法不正确。 考虑图表,其中节点1有两个连接到节点2(反之亦然),而节点3有两个连接到节点4(反之亦然)。 这就是:
1 <==> 2
3 <==> 4
其中,通过<==>我的意思是两种方式的两个传出连接(所以总共4个连接)。 这似乎形成了两个派系,这意味着并非每个州都可以从其他所有州获得。
有谁知道如何完成算法? 或者,有没有人知道另一种算法? 我似乎模糊地回忆起可以使用二叉树来构造它,但我不确定。
强连接是一个困难的约束。 让我们生成均匀的随机投射过渡函数,然后使用例如Tarjan的线性时间SCC算法对它们进行测试,直到得到一个强连接的算法。 这个过程有正确的分布,但不清楚它是否有效; 我的研究人员的直觉是,强连通性的极限概率小于1但大于0,这意味着只有O(1)迭代在期望中是必要的。
生成满射过渡函数本身就是不平凡的。 不幸的是,如果没有这种限制,每个州都有一个进入过渡的指数不可能。 使用此问题的答案中描述的算法来采样{(1,a),(1,b),(2,a),(2,b),...,(N,a)的均匀随机分区, (N,b)}有N个部分。 随机置换节点并将它们分配给零件。
例如,设N = 3并假设随机分区为
{{(1, a), (2, a), (3, b)}, {(2, b)}, {(1, b), (3, a)}}.
我们选择随机置换2,3,1并导出转移函数
(1, a) |-> 2
(1, b) |-> 1
(2, a) |-> 2
(2, b) |-> 3
(3, a) |-> 1
(3, b) |-> 2
有一个预期的运行时间O(n ^ {3/2})算法。
如果生成具有m个顶点的均匀随机有向图,使得每个顶点具有k个标记的外弧(k-out有向图),那么该有向图中最大SCC(强连通分量)的大小约为c_k m,其中c_k是常数,取决于k。 实际上,这个SCC的大小恰好是c_k m(四舍五入为整数)的概率约为1 / \\ sqrt {m}。
因此,您可以生成大小为n / c_k的均匀随机2-out图,并检查最大SCC的大小。 如果它的大小不完全是n,那么再试一次直到成功。 预期的试验次数是\\ sqrt {n}。 生成每个有向图应该在O(n)时间内完成。 因此总的来说算法预期运行时间为O(n ^ {3/2})。 有关详细信息,请参阅此文章 。
在下文中,我将使用图论的基本术语。
你可以:
结果将满足所有三个要求。
以下参考文献似乎与您的问题相关:
F. Bassino,J。David和C. Nicaud,可能不完全确定性自动机的计数和随机生成, 纯数学和应用 19 (2-3)(2009)1-16。
F. Bassino和C. Nicaud。 可访问自动机的枚举和随机生成。 理论值。 比较。 SC。 。 381 (2007)86-104。
只需保持一组可以访问的节点。 一旦他们都可以到达,填写空白。
Start with a set of N nodes called A.
Choose a node from A and put it in set B.
While there are nodes left in set A
Choose a node x from set A
Choose a node y from set B with less than two outgoing transitions.
Choose a node z from set B
Add a transition from y to x.
Add a transition from x to z
Move x to set B
For each node n in B
While n has less than two outgoing transitions
Choose a node m in B
Add a transition from n to m
Choose a node to be the start node.
Choose some number of nodes to be accepting nodes.
集合B中的每个节点都可以到达集合B中的每个节点。只要可以从集合B中的节点到达节点并且该节点可以到达集合B中的节点,就可以将其添加到集合中。
我能想到的最简单的方法是(统一)生成一个随机DFA,每个节点有N
节点和两个传出边,忽略其他约束,然后扔掉任何没有强连接的(这很容易使用一个强连通分量算法)。 在没有可达性约束的情况下,生成统一的DFA应该是直截了当的。 在性能方面可能存在问题的一件事是,在找到具有可达性属性的DFA之前,您需要跳过多少个DFA。 但是,您应该首先尝试此算法,并查看它最终需要多长时间才能生成可接受的DFA。
我们可以从N和2N之间的随机数量的状态N1开始。
假设初始状态为状态编号1.对于每个状态,对于输入字母表中的每个字符,我们生成随机转换(在1和N1之间)。
我们从初始状态开始采用connex自动机。 我们检查状态的数量,经过几次尝试,我们得到一个N状态。
如果我们也希望最小的自动机,那么只保留最终状态的分配,但是随机分配也很有可能获得最小的自动机。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.