Ciclo de celosía aleatorio que se evita a sí mismo dentro de un cuadro delimitador dado


25

En relación con el rompecabezas Slither Link , me he estado preguntando: supongamos que tengo una cuadrícula de celdas cuadradas , y quiero encontrar un ciclo simple de bordes de cuadrícula, uniformemente al azar entre todos los ciclos simples posibles.n×n

Una forma de hacer esto sería usar una cadena de Markov cuyos estados son conjuntos de cuadrados cuyos límites son ciclos simples y cuyas transiciones consisten en elegir un cuadrado aleatorio para voltear y mantener el volteo cuando el conjunto modificado de cuadrados todavía tiene un ciclo simple como Su límite. Uno puede pasar de cualquier ciclo simple a otro de esta manera (usando resultados estándar sobre la existencia de envolturas) de modo que esto eventualmente converja en una distribución uniforme, pero ¿qué tan rápido?

Alternativamente, ¿hay una mejor cadena de Markov o un método directo para seleccionar ciclos simples?

ETA: consulte esta publicación de blog para obtener un código para calcular la cantidad de ciclos que estoy buscando y sugerencias para OEIS para algunos de estos números. Como sabemos, contar es casi lo mismo que la generación aleatoria, y deduzco de la falta de un patrón obvio en las factorizaciones de estos números y la falta de una fórmula en la entrada de OEIS que es poco probable que exista un método directo simple conocido . Pero eso todavía deja las preguntas sobre qué tan rápido converge esta cadena y si hay una cadena mejor abierta.


1
El límite de los conjuntos contados por la secuencia OEIS no son necesariamente ciclos simples, por ejemplo, para 3x3, uno de los 218 tiene todos los cuadrados, excepto el medio, y otros cuatro se obtienen quitando una esquina.
Colin McQuillan

1
Para las cuadrículas 2xn, los números son los que figuran en oeis.org/A059020 . Para 3xn, estoy bastante seguro de que son 6,40,213,1049,5034,23984,114069,542295,2577870,12253948,58249011,276885683,1316170990,6256394122,29739651711,141366874247, ... (no en OEIS). Configuré la matriz de transferencia para calcularla a mano, pero la comparé con una matriz generada por máquina y la única entrada en la que diferían fue que la correcta era la correcta y la incorrecta. (Esto debería aparecer en el caso 3x3: la matriz de la máquina habría permitido un octomino con un agujero en el centro).
David Eppstein

1
Deberías enviar esa secuencia a Neil Sloane para que pueda ponerla en el OEIS.
Peter Shor

1
@David: gracias. Probablemente, es hora de que aprenda el método de la matriz de transferencia más a fondo.
Yoshio Okamoto

2
@David: Acabas de perder dos horas de mi vida con ese enlace al rompecabezas ... ¡Gracias!
domotorp

Respuestas:


1

Parece que debido a que solo está usando los recuentos para el número de ciclos en un gráfico para elegir un ciclo aleatoriamente, que si tuviera una aproximación aleatoria para este número, aún podría elegir un ciclo aproximadamente uniformemente.

Tenga en cuenta que el número de ciclos en un gráfico , que contiene el borde ( u , v ) , es igual al número de ciclos en G - ( u , v ) más el número de rutas simples de u a v en G - ( u , v ) . Por lo tanto, con una aproximación de tiempo polinomial para el número de trayectorias u - v , la aproximación de tiempo polinomial se puede lograr aumentando gradualmente hasta G un borde a la vez, aproximándose a medida que avanza. G(u,v)G(u,v)uvG(u,v)uvG

De hecho, creo que hay un método más directo para elegir un ciclo. Sea el gráfico completo de aristas alrededor de la cuadrícula de cuadrados n × n . Para cada arista ( u , v ) encuentre el número de ciclos que contienen esa arista (que es el número de rutas u - v en G - ( u , v ) ). Luego, elija aleatoriamente una arista ponderada por el número de ciclos que la contienen. Esta será la primera ventaja en su ciclo elegido al azar. Todos los demás bordes se elegirán extendiendo un borde a la vez.Gn×n(u,v)uvG(u,v)

CvsveNveCuNuvsG[V(C{vs,ve})]uve(ve,u)

De esta manera, se elige un número polinómico de aristas, cada una de las cuales requiere un pequeño número de cálculos de un algoritmo de aproximación de tiempo polinomial. Por lo tanto, se puede elegir un ciclo de manera uniforme.

Actualmente tengo una pregunta de intercambio de pila que solicita referencias para algoritmos de aproximación de conteo de ruta rápida. He leído en algunos lugares que existen estos algoritmos pero aún no los he encontrado.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.