如何生成均匀分布的随机DFA?

时间:2011-04-03 21:55:09

标签: algorithm graph graph-algorithm

我需要生成一个确定性有限自动机(DFA),从满足下面属性的所有可能的DFA中选择。必须选择均匀分布的DFA。

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

  • DFA有N个节点。
  • 每个节点都有2个传出转换。
  • 每个节点都可以从其他节点到达。
  • 从所有可能性中选择DFA具有完全均匀的随机性。

我不考虑标记节点或转换。如果两个DFA具有相同的未标记有向图,则认为它们是相同的。

以下是三种不起作用的算法:

算法#1

  1. 从一组名为A的N个节点开始。
  2. 从A中选择一个节点并将其放入B组。
  3. 虽然集A中还有节点

      -  3.1 Choose a node x from set A
      -  3.2 Choose a node y from set B with less than two outgoing transitions.
      -  3.3 Choose a node z from set B
      -  3.4 Add a transition from y to x.
      -  3.5 Add a transition from x to z
      -  3.6 Move x to set B
    
  4. 对于B

    中的每个节点n
      -  4.1 While n has less than two outgoing transitions
      -  4.2 Choose a node m in B
      -  4.3 Add a transition from n to m
    
  5. 算法#2

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

      1. 从具有N个顶点且没有弧的有向图开始。
      2. 在N和2N之间生成一段长度的随机定向循环并将其添加到图表中。
      3. 对于每个顶点,将一个外出弧添加到随机选择的顶点。
      4. 我基于算法#2创建了算法#3,但是,我不知道如何选择随机定向循环来创建均匀分布。我甚至不知道是否可能。

        非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

如果N很小(有N ^(2N)个可能的弧满足前两个条件,那么你希望它小于随机数生成器的范围)你可以生成随机DFA并丢弃那些不满足可达性条件的那些。