В связи с загадкой Slither Link мне было интересно: предположим, что у меня сетка квадратных ячеек, и я хочу найти простой цикл ребер сетки, равномерно случайным образом среди всех возможных простых циклов.
Один из способов сделать это - использовать цепь Маркова, состояния которой представляют собой наборы квадратов, границы которых являются простыми циклами, а переходы состоят из выбора случайного квадрата для переворачивания и удержания переворота, когда измененный набор квадратов все еще имеет простой цикл как его граница. Таким способом можно перейти от любого простого цикла к любому другому (используя стандартные результаты о существовании оболочек), так что в конечном итоге это сходится к равномерному распределению, но как быстро?
В качестве альтернативы, есть ли лучшая цепь Маркова или прямой метод выбора простых циклов?
ETA: см. В этом сообщении в блоге код для расчета количества циклов, которые я ищу, и указатели на OEIS для некоторых из этих чисел. Как мы знаем, подсчет - это почти то же самое, что и случайная генерация, и я заключаю из отсутствия какой-либо очевидной закономерности в факторизации этих чисел и отсутствия формулы в записи OEIS, что вряд ли существует известный простой прямой метод , Но это все еще оставляет вопрос о том, как быстро эта цепь сходится и есть ли лучшая цепь широко открыта.