强连通性是一个困难的约束。让我们生成均匀随机数满射的转换函数,然后用例如测试它们Tarjan 的线性时间 SCC 算法,直到我们得到强连接的算法。这个过程有正确的分布,但不清楚它是否有效;我的研究人员的直觉是,强连通性的极限概率小于 1 但大于 0,这意味着预期只需 O(1) 次迭代。
生成满射过渡函数本身就很重要。不幸的是,如果没有这个约束,每个状态都有传入转换的可能性呈指数级增长。使用答案中描述的算法这个问题 https://stackoverflow.com/questions/2161406/how-do-i-generate-a-uniform-random-integer-partition对包含 N 个部分的 {(1, a), (1, b), (2, a), (2, b), …, (N, a), (N, b)} 的均匀随机分区进行采样。随机排列节点并将它们分配给部分。
例如,令 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