Algoritmo para minimizar el área de superficie, dado el volumen

22

Considere la siguiente tarea algorítmica:

Entrada: un entero positivo , junto con su factorización prima Encontrar: enteros positivos que minimizan , sujeto a la restricción de quex , y , zn
x,y,zx y z = nxy+yz+xzxyz=n

¿Cuál es la complejidad de este problema? ¿Existe un algoritmo de tiempo polinómico? ¿Es NP-duro?


Este problema básicamente pregunta: de todos los sólidos rectangulares cuyo volumen es cuyas dimensiones son todos enteros, ¿cuál tiene la menor área de superficie?n

Este problema fue planteado por Dan Meyer, bajo el título El problema matemático que 1,000 maestros de matemáticas no pudieron resolver . Hasta ahora, ninguno de los profesores de matemáticas con los que trabajó ha encontrado un algoritmo razonable para este problema. En su contexto, la definición de "razonable" es un poco imprecisa, pero como informáticos podemos hacer una pregunta más precisa sobre la complejidad de este problema.

El enfoque obvio es enumerar todas las posibilidades para , pero eso lleva tiempo exponencial. Los comentaristas en el blog de Dan Meyer han propuesto muchos algoritmos de candidatos eficientes que desafortunadamente todos resultaron ser incorrectos. Martin Strauss sugiere que este problema parece recordar vagamente a las 3 particiones , pero no puedo ver una reducción.x,y,z


Permítanme aclarar algunas ideas falsas que he visto en los comentarios / respuestas:

  • No se puede reducir de 3 particiones simplemente reemplazando cada número con su potencia , ya que las funciones objetivas de los dos problemas son diferentes. La reducción obvia simplemente no funciona.2 qq2q

  • No es cierto que la solución óptima implica elegir uno de para que sea el divisor más cercano de a . Veo a varias personas que suponen que este es el caso, pero de hecho, eso no es correcto. Esto ya ha sido refutado en la publicación del blog de Dan Meyer. Por ejemplo, considere ; , y 4 divide 68, por lo que podría pensar que al menos uno de debería ser 4; Sin embargo, eso no es correcto. La solución óptima es , , . Otro contraejemplo es , , pero la solución óptima esn 3 x,y,zn n=683n3n=68x,y,zx=2y=2z=17n=22236834x,y,zx=2y=2z=17n=222x=3722236x=37 , , . ( Puede ser cierto que para todo , la solución óptima implica hacer que al menos uno de sea ​​igual al divisor más pequeño de más grande que o al divisor más grande de más pequeño que - No tengo un contraejemplo en este momento, pero si crees que esta afirmación es verdadera, necesitaría pruebas. No puedes asumir que es verdadera).z = 2y=3z=2x , y , z n 3 nx,y,znn3 3 nn3

  • "Hacer que sean del mismo tamaño" no parece dar necesariamente la respuesta óptima en todos los casos; vea la publicación de blog de Dan Meyer para contraejemplos. O, al menos, para algunas interpretaciones razonables de la frase "hacerlos más o menos del mismo tamaño", hay contraejemplos que muestran que esta estrategia no es óptima. Si desea probar alguna estrategia de ese tipo, asegúrese de exponer el reclamo con precisión y luego proporcionar una prueba matemática cuidadosa.x,y,z

  • Un tiempo de ejecución de no es polinomial. Para que este problema esté en P, el tiempo de ejecución debe ser un polinomio en la longitud de la entrada . La longitud de la entrada es algo así como , no . El algoritmo de fuerza bruta obvio puede ejecutarse en tiempo u , pero eso es exponencial en y, por lo tanto, cuenta como un algoritmo de tiempo exponencial. Por lo tanto, eso no es útil.lg n n O ( n 3 ) O ( n 2 ) lg nO(n3)lgnnO(n3)O(n2)lgn

DW
fuente
1
Interesante. Mi enfoque ingenuo sería "hacer aproximadamente del mismo tamaño", generalizando la idea de que el cubo es el sólido rectangular con el área de superficie más pequeña para un volumen dado. Funcionaría eso? Y si es así: no veo cómo hacerlo de manera eficiente, pero ¿hay una reducción que sea más fácil de lograr, tal vez? x,y,z
G. Bach
2
Una reducción va a ser una pesadilla ya que necesitas una forma de generar números primos adecuados. Lo mejor que puede esperar es una reducción aleatoria, usando algo como el Teorema de Dirichlet para generar números primos adecuados, pero incluso eso parece poco probable.
Tom van der Zanden
1
@ G.Bach, creo que el artículo del blog considera un montón de heurísticas de esa veta (por ejemplo, comience con cada uno de como el número entero más cercano a y luego ajústelos un poco bit), y muestra contraejemplos explícitos para cada uno. ¿Pero tal vez tienes un algoritmo que no han considerado? 3 x,y,zn3
DW
3
oeis.org/A075777 parece reclamar un algoritmo, pero parece ser incorect (n = 1332 genera 9,4,37 en lugar de 6,6,37 por ejemplo)
Scott Farrar
1
Aquí hay una observación que puede ser útil. Dado , el óptimo de hecho satisface el "sueño ingenuo": deben ser el par de factores de más cercano a . (Esto es fácil de probar). En una solución óptima , esta condición debe ser válida para las tres variables simultáneamente: son el par correspondiente a , Una implicación: dado , solo hay un par posible con el que puede ser óptimo. Desafortunadamente, (1) esta condición no identifica únicamente el triple óptimo; (2) No veo cómo encontrar el par correspondiente rápidamente.y , z n / x xy,zn/x x,y,zx,yzzx,yn/xx,y,zx,yzzx,y
usul

Respuestas:

1

Aquí hay una versión modificada del algoritmo "elegir divisor cerca de la raíz del cubo". Todavía debe ser la fuerza bruta en muchos casos, por lo que no estoy seguro de cuánto de una mejora real es prudente en cuanto a la enumeración de todos los casos. Sin embargo, lo envié como una corrección al algoritmo en OEIS (lo que generó resultados incorrectos) porque creo que debería ser exacto al menos.

Aquí está el algoritmo para encontrar (s1, s2, s3) y el área de superficie de un prisma rectangular dado su volumen n:

  1. Dado n, encuentra la raíz cúbica.
  2. Establezca un valor inicial entero s1 en el techo de esa raíz cúbica.
  3. Pruebe para ver si s1 es un divisor de n, y si no, reduzca s1 en 1.
  4. Si se encuentra un divisor s1, establezca un s2 inicial para que sea el techo de la raíz cuadrada de (n / s1).
  5. Luego pruebe para ver si s2 es un divisor de n / s1, y si no, reduzca s2 en 1.
  6. Cuando se encuentra un divisor s2, s3 se establece en n / (s1 * s2).
  7. El área de superficie actual se calcula por 2 * (s1 * s2 + s1 * s3 + s2 * s3).
  8. El SA actual se compara con el mínimo actual. Si es la primera superficie calculada, se almacena como minSA. Después del primero, probamos para ver si el SA actual es más pequeño que minSA, y si es así, almacénelo en minSA.

Este algoritmo enumera algunos de los triples (s1, s2, s3) pero solo necesita probar los divisores debajo de la raíz cúbica. (Dado que no los tres divisores pueden estar por encima de la raíz cúbica). De manera similar, s2 solo necesita probar divisores de n / s1 debajo de la raíz cuadrada de n / s1, ya que no ambos divisores pueden estar por encima de la raíz cuadrada)

Una nota sobre el paso 3: si la raíz cúbica es un divisor, entonces n es un cubo y podemos detenernos allí con un área de superficie mínima 6 * s1 ^ 2 desde el cuadro (s1, s1, s1).

Pitón:

import math
def minSArectprism(n):
    s1_0 = int(math.ceil(n ** (1 / 3.0))) 
    minSA=-1
    s1 = s1_0
    while s1>=1:
        while n % s1 > 0:  
            s1 = s1 - 1
        s1quot = int(n/s1) 
        s2_0 = int(math.ceil(math.sqrt(n/s1)))
        s2 = s2_0
        while s2>=1:
            while s1quot % s2 > 0:
                s2 = s2 - 1
            s3 = int(n / (s1 * s2))  
            SA = 2*(s1*s2 + s1*s3 + s2*s3)  
            if minSA==-1:
                minSA=SA
            else:
                if SA<minSA:
                    minSA=SA
            s2 = s2 - 1
        s1 = s1 - 1    
    return minSA
Scott Farrar
fuente
Su algoritmo toma tiempo exponencial. Cada ciclo examina acerca de posibles candidatos, por lo que el tiempo de ejecución es , que es exponencial, no tiempo polinomial. Por lo tanto, este algoritmo no responde la pregunta. (Ya mencioné un algoritmo de tiempo exponencial en la pregunta.) O( 3 n3O(n32)=O(n2/3)
DW
Hmm, y no está confinado debajo de la raíz cúbica de n, por ejemplo, n = 1332, eventualmente probaremos s1 = 2, lo que significa que s2 estará debajo de la raíz cuadrada de 1332/2 ~ = 26. De hecho (2,18, 37) se prueba con y y z por encima de la raíz cúbica.
Scott Farrar
@ScottFarrar, sí, lo sé. No incluí todos los detalles sangrientos del análisis de complejidad; No había espacio en un solo comentario. Si incluye los detalles sangrientos, creo que encontrará que obtiene el tiempo de ejecución que cité. Puede confiar en mí :-), o leer nuestra pregunta de referencia para obtener más información sobre esos detalles sangrientos. En cualquier caso, incluso si eliminó el bucle interno, el bucle externo todavía realiza iteraciones , por lo que el tiempo de ejecución de su algoritmo es al menos - es decir, ciertamente es exponencial. Ω ( n 1 / 3 )Θ(n1/3)Ω(n1/3)
DW
0

El problema, por supuesto, estaría relacionado con la complejidad de factorización si no se proporcionaran descomposiciones principales. Dados los factores, y tomando registros de todos los factores primos, este problema parece ser casi lo mismo que minimizar la desviación de la media de las sumas de partición (ejercicio, tal vez analítico o experimentalmente, encuentre cuán estrechamente esta aproximación intuitiva de la problema se cumple).k

Aquí este es el caso de 3 vías (las sumas de partición son ). El caso de 2 vías ha sido ampliamente estudiado y es NP duro (desde la referencia). (Este caso de 2 vías no es exactamente lo mismo que el conocido problema de partición de 2 vías de NP completo donde las sumas de partición son iguales. Tenga en cuenta que las sumas de partición iguales implican 0 desviación en las sumas de partición y viceversa ) . La segunda referencia estudia 3- partición en modo y camino , en parte empíricamente, donde no hay tanto estudio como el caso de 2 vías.nlog(x),log(y),log(z)n

vzn
fuente
Esta respuesta no es útil y no responde la pregunta. 1. Estoy buscando pruebas o pruebas, no especulaciones. No hay evidencia de que minimizar la desviación produzca una solución óptima. Incluso si eso fuera cierto, no respondería la pregunta: no nos diría la complejidad de minimizar la desviación. 2. La primera referencia es sobre 2 particiones. Señalarme a una referencia en 2 particiones no es útil. Ya expliqué en la pregunta por qué mi problema no es solo 3 particiones (o 2 particiones). Un documento sobre una variante de un problema que no pregunté no es útil.
DW
n=681,4,172.853422,2,17|log(x)μ|+|log(y)μ|+|log(z)μ|μ=(log(x)+log(y)+log(z))/3
¡Okay! nunca hubo ninguna afirmación de que este algoritmo era correcto, se basó en la inspección de algunos ejemplos y otras sugerencias en los comentarios. este es solo un contraejemplo único (usted indicó que el método de minimización de la desviación es defectuoso en la publicación revisada ). La pregunta de "con qué frecuencia" este algoritmo da una solución correcta es interesante porque podría dar algunas pistas para una métrica de optimización correcta. conjetura que este algoritmo "a menudo" da la respuesta correcta. el 2 vías ref es mostrar una desviación versión del problema que es diferente que el típico exacta versión de Wikipedia etc
VZN
ver también Pruebas y refutaciones de
vzn
0

Editar

Aquí hay un argumento informal de por qué es poco probable que exista un algoritmo rápido. Esa oración no ha cambiado, pero eliminé lo que solía estar aquí porque estaba estructurada de manera muy similar a la prueba formal en la siguiente sección y la discusión se estaba desviando de sus errores, algunos de los cuales noté a mí mismo y a uno de los cuales DW me señaló amablemente. Permítanme en cambio tratar de expresar la intuición detrás de esto.

N

¿Qué sucede cuando traducimos los mismos pasos en un álgebra diferente, como sumar y restar en lugar de multiplicar y dividir? Sabemos (véase el lema a continuación) que nuestro algoritmo encontrará una partición de 3 cuyos productos son iguales, si existe, o determinará que no existe tal partición de 3. Entonces, si pudiéramos traducir las mismas técnicas al grupo aditivo, podríamos encontrar una partición de 3 cuyas sumas son iguales, o determinar que no existe tal partición. En otras palabras, podríamos resolver 3 particiones en tiempo polinómico. Eso no es muy plausible.

Entonces, ¿por qué un algoritmo de este tipo funciona para la multiplicación y falla para la suma? Una posible razón es que cada número entero tiene una factorización prima única bajo multiplicación, pero es cíclico bajo suma. Otra es que la multiplicación forma un anillo con la suma, por lo que tiene otro conjunto de operaciones que puede usar. Otra es que tendrías que generalizar el algoritmo para que funcione para los no primos, y podría depender de su primalidad. Lo que DW señaló es que el método específico de traducción podría aumentar exponencialmente el tamaño de sus entradas. Y tal vez P = NP después de todo.

Pero si esas son las lagunas que permiten que funcione un algoritmo rápido, creo que aún es útil saberlo, porque sugiere dónde debemos enfocar nuestros esfuerzos. Deberíamos estar buscando algo que se rompa si intentamos aplicarlo a un problema de NP completo. Un enfoque que se generalizaría a otras álgebras probablemente sea ladrar al árbol equivocado. Sin embargo, sospecho que la multiplicación no es lo suficientemente diferente para que eso funcione, pero eso es solo una corazonada.

Lema

m=N3(am,bm,mab)ab(ab+1a+1b)m2a=b=1

xyz=N

(am)(bm)+(am)(mab)+(bm)(mab)=abm2+m2b+m2a=(ab+1a+1b)m2

f(a,b)=ab+1a+1bδfδa=b1a2δfδb=a1b2a=b2,b=a2aba=b=1

Mi motivación inmediata para demostrar esto fue completar una onda manual en mi prueba anterior de que, si existe una solución de cubo perfecto, es óptima. Sin embargo, esta fórmula podría ser útil para podar el árbol de búsqueda.

Pensamientos variados

No veo ninguna simetría obvia, excepto la intercambiabilidad de x, y y z, que solo nos da en el mejor de los casos un factor constante de 6. Tenemos algunas aceleraciones para la partición 2 que básicamente dicen que queremos que ambos términos estar tan cerca el uno del otro como sea posible, pero no veo de inmediato una aplicación para este problema.

Fuera de mi cabeza, simplemente tomar el registro de todos los números reduce inmediatamente esto a un problema clásico de 3 particiones usando la suma, o de manera equivalente, tomar algún número a la potencia de los números en cualquier problema de suma de 3 particiones lo convierte en un problema de multiplicación como este Eso implica que este problema no debería ser más fácil. Tenemos aquí la factorización prima, mientras que esa factorización no sería prima, pero ¿eso nos ayuda?

Gráficamente, la superficie xyz = 0 se vería como la unión de los planos xy, yz y xz, y para cualquier n positivo, la ecuación se vería como y = n / xz, por lo que cada corte a lo largo de un plano de coordenadas sería una hipérbola Generalmente podemos decir que la cantidad que estamos tratando de minimizar es más baja en el origen y crece más rápidamente a lo largo de la línea donde x = y = z. Si solo podemos buscar a lo largo de esta variedad, podríamos reducirnos a un problema bidimensional.

Davislor
fuente
Si x + y + z = n, 2 ^ n = 2 ^ (x + y + z) = 2 ^ x * 2 ^ y * 2 ^ z, que es una instancia de este problema menos la restricción de que las entradas son un descomposición primaria del producto. En cambio, todos serían poderes de dos.
Davislor
Es cierto que el peso para minimizar será diferente, pero si x = y = z en el problema original, x'y '+ x'z' + y'z 'no se minimizará en el problema correspondiente donde cada w es reemplazado por w '= 2 ^ w, lo que significa que si existe una solución al problema original, la reducción lo encontraría? Podríamos obtener una solución espuria del problema transformado, pero podemos detectarla en tiempo lineal al convertir de nuevo verificando las sumas.
Davislor
xy+yz+xzxyz=nx,y,zn3
@vzn: Estamos tratando de minimizar el área de superficie, no maximizarla. Si el problema de 3 particiones tiene una solución, eso se traduce en un problema modificado de dimensión de caja donde la solución es un cubo perfecto. Un algoritmo hipotético de poli-tiempo encontraría los factores de los lados de ese cubo, y luego podríamos traducirlo nuevamente al dominio original, mientras buscamos soluciones espurias, en tiempo lineal. Eso sugiere que un algoritmo para un problema ligeramente relajado podría servir como un oráculo para un problema difícil, por lo que es poco probable que exista un algoritmo mejor que exponencial.
Davislor
? No estoy en desacuerdo contigo. ¿No estamos diciendo lo mismo? por favor, vaya al Chat de Ciencias de la Computación para desenredar / resolver esto aún más. Tampoco puedo seguir a los @DW que afirman que la transformación logarítmica no funciona, ¿verdad? Estoy utilizando algunos de sus análisis (aparentemente en el objetivo) como base para mi propia respuesta.
vzn