DFA必须具有以下四个属性:
DFA有N个节点
每个节点都有2个传出转换。
每个节点都可以从其他每个节点到达。
选择DFA时,所有可能性都具有完全均匀的随机性
这是我到目前为止所做的:
然而,这是算法不正确。考虑图表,其中节点1有两个连接到节点2(反之亦然),而节点3有两个连接到节点4(反之亦然)。这就像是:
1< ==> 2
3< ==> 4
其中,由< ==>我的意思是两种方式的两个传出连接(所以总共4个连接)。这似乎形成了两个派系,这意味着并非每个州都可以从其他所有州获得。
有谁知道如何完成算法?或者,有没有人知道另一种算法?我似乎模糊地回忆起可以使用二叉树来构造它,但我不确定。
答案 0 :(得分:4)
强大的连接性是一个困难的约束。让我们生成均匀的随机投射过渡函数,然后用例如它们测试它们。 Tarjan的线性时间SCC算法,直到我们得到一个强连接的算法。这个过程有正确的分布,但不清楚它是否有效;我的研究人员的直觉是,强连通性的极限概率小于1但大于0,这意味着只有O(1)迭代才是预期的必要条件。
生成满射过渡函数本身就是非常重要的。不幸的是,如果没有这种限制,每个州都有一个进入过渡的指数不可能。使用this question的答案中描述的算法来采样{(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
答案 1 :(得分:1)
在下文中,我将使用graph theory的基本术语。
你可以:
结果将满足所有三个要求。
答案 2 :(得分:1)
预计运行时间为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})。有关详细信息,请参阅this paper。
答案 3 :(得分:0)
只需保持一组可以访问的节点。一旦他们都可以到达,填写空白。
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中的节点,就可以将其添加到集合中。 / p>
答案 4 :(得分:0)
我能想到的最简单的方法是(统一)生成一个随机DFA,每个节点有N
个节点和两个传出边,忽略其他约束,然后丢弃任何没有强连接的节点(这很容易使用强连接组件算法进行测试)。在没有可达性约束的情况下,生成统一的DFA应该是直截了当的。在性能方面可能存在问题的一件事是,在找到具有可达性属性的DFA之前,您需要跳过多少个DFA。不过,您应首先尝试此算法,并查看它最终需要多长时间才能生成可接受的DFA。
答案 5 :(得分:0)
我们可以从N和2N之间的随机数N1开始。
假设初始状态为状态编号1。 对于每个状态,对于输入字母表中的每个字符,我们生成随机转换(在1和N1之间)。
我们从初始状态开始接受connex自动机。我们检查状态的数量,经过几次尝试,我们得到一个N状态。
如果我们也希望最小的自动机,那么只保留最终状态的分配,但是随机分配也很有可能获得最小的自动机。
答案 6 :(得分:0)
以下参考资料似乎与您的问题相关:
F。 Bassino,J。David和C. Nicaud,可能不完全确定性自动机的枚举和随机生成,纯数学与应用 19 (2-3)(2009)1-16
F。 Bassino和C. Nicaud。可访问自动机的枚举和随机生成。 理论值。比较。 SC。。 381 (2007)86-104。