Сильная связь - трудное ограничение. Давайте сгенерируем равномерные случайные сюръективные переходные функции, а затем протестируем их, например, с помощью Алгоритм Тарьяна с линейным временем 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