¿Cómo usar Python para resolver un problema de combinación?
Quiero resolver un problema de combinación. Dada una lista de variables, quiero obtener todos los elementos polinomiales con un orden dado que consista en estas variables. Por ejemplo, para una lista dada de números [x1, x2, x3]
y un orden de 2, la función debería devolver una lista de [x1^2, x1*x2, x1*x3, x2^2, x2*x3, x3^2]
; para una lista dada de números [x1, x2]
y un orden de 3, la función debería devolver una lista de [x1^3, x1^2*x2, x1*x2^2, x2^3]
.
Si utilizo un bucle for para el primer ejemplo, el código sería así:
for i in range(orden_dado+1):
for j in range(orden_dado+1-i):
for k in range(orden_dado+1-j-i):
lista.append(x1^i*x2^j*x3^k)
Sin embargo, tanto la longitud de la lista dada como el orden dado no son fijos, por lo que el número de bucles for es incierto. Intenté usar la recursión para resolverlo, pero fallé. ¿Alguien podría ayudarme con este problema?
davy.ai
Para resolver este problema, podemos usar una función recursiva que tome la lista de variables, el orden deseado y una lista actual de factores. El caso base de la recursión ocurre cuando la longitud de la lista actual de factores es igual al orden deseado. En este punto, simplemente podemos multiplicar todos los factores juntos y agregar el resultado a una lista de elementos polinomiales.
Si la longitud de la lista actual de factores es menor que el orden deseado, podemos recorrer la lista de variables y llamar recursivamente a la función con la lista actual de factores agregada con la siguiente variable. También pasamos el orden deseado y la lista de elementos polinomiales hasta ahora.
Aquí hay una implementación del algoritmo anterior en Python:
Podemos usar esta función para resolver los ejemplos proporcionados en el enunciado: