生成随机确定性有限自动机的算法是什么?

时间:2011-04-02 20:24:44

标签: algorithm random finite-automata dfa state-machine

DFA必须具有以下四个属性:

  • DFA有N个节点

  • 每个节点都有2个传出转换。

  • 每个节点都可以从其他每个节点到达。

  • 选择DFA时,所有可能性都具有完全均匀的随机性

这是我到目前为止所做的:

  1. 从N个节点的集合开始。
  2. 选择尚未选择的节点。
  3. 将其输出连接到其他2个随机选择的节点
  4. 标记一个转换1,另一个转换为0。
  5. 转到2,除非选择了所有节点。
  6. 确定是否存在没有传入连接的节点。
  7. 如果是,则从具有多于1个传入连接的节点窃取传入连接。
  8. 转到6,除非没有没有传入连接的节点
  9. 然而,这是算法不正确。考虑图表,其中节点1有两个连接到节点2(反之亦然),而节点3有两个连接到节点4(反之亦然)。这就像是:

    1< ==> 2

    3< ==> 4

    其中,由< ==>我的意思是两种方式的两个传出连接(所以总共4个连接)。这似乎形成了两个派系,这意味着并非每个州都可以从其他所有州获得。

    有谁知道如何完成算法?或者,有没有人知道另一种算法?我似乎模糊地回忆起可以使用二叉树来构造它,但我不确定。

7 个答案:

答案 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的基本术语。

你可以:

  1. 从具有N个顶点且没有弧的有向图开始。
  2. 生成N个顶点的随机排列以产生随机哈密顿循环,并将其添加到图中。
  3. 对于每个顶点,将一个外出弧添加到随机选择的顶点。
  4. 结果将满足所有三个要求。

答案 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。