Imagina un pequeño jardín, dividido en 8 partes iguales, cada una de un pie cuadrado. El jardín mide 4 pies x 2 pies, por lo que los "contenedores" están en dos filas. Vamos a numerarlos así:
0 1 2 3
4 5 6 7
Ahora, cada una de estas plantas tiene otras plantas que les gustan, que es bueno que estén cerca. Puedo calificar un arreglo en particular por cuántas de estas buenas relaciones termino teniendo. He hecho esto en un script de python, descrito aquí.
Sin repetir todos esos detalles aquí, mi problema es que hay demasiadas permutaciones. Si simplemente lo paso por el útil generador de permutaciones de python, hay 8! casos. (Estoy planteando este problema aquí como 8 espacios, pero mi jardín real tiene 16 contenedores. El problema es demasiado grande para resolverlo con 16! arreglos posibles.)
Mi pregunta matemática es, ¿cómo puedo iterar a través de una lista de permutaciones únicas que también consideren cómo están arregladas estas dos filas? Si todas estuvieran en una fila, la respuesta sería fácil, 8!. Con 2 filas, hay rotaciones y espejos que son realmente la misma respuesta.
0 1 2 3 es lo mismo cuando se refleja 3 2 1 0
4 5 6 7 7 6 5 4
0 1 2 3 es lo mismo cuando se refleja 4 5 6 7
4 5 6 7 0 1 2 3
0 1 2 3 es lo mismo cuando se rota 7 6 5 4
4 5 6 7 3 2 1 0
Me gustaría calificar todos los arreglos posibles, pero saltar aquellos que son espejos o rotaciones de cosas que ya he considerado. Mis habituales intentos chapuceros de iterar a través de tales cosas incluyen una tabla de búsqueda, donde simplemente miraría a través de una lista de cosas completadas. En este caso, esa búsqueda a través potencialmente de 8! (16! en mi problema real) tomaría mucho más tiempo que simplemente calificar cada permutación.
¿Cómo puedo iterar a través de esto y potencialmente reducir mi conjunto de problemas de 16! (~20 trillones) a quizás 5 trillones? O, si no se puede responder directamente, ¿cómo llamarías a este tipo de problema? No estoy seguro de qué buscar y leer al respecto. ¡Si supiera lo suficiente como para saber qué etiquetar este problema, estaría más avanzado!