es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿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?

Tags:  , , ,

Answer

  1. Avatar for 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:

    def get_polynomials(variables, order):
        polynomials = []
    
        def get_factors(current_factors):
            if len(current_factors) == order:
                product = 1
                for factor in current_factors:
                    product *= factor
                polynomials.append(product)
            else:
                for variable in variables:
                    next_factors = current_factors + [variable]
                    get_factors(next_factors)
    
        get_factors([])
        return polynomials
    

    Podemos usar esta función para resolver los ejemplos proporcionados en el enunciado:

    >>> get_polynomials([1, 2, 3], 2)
    [1, 2, 3, 4, 6, 9]
    
    >>> get_polynomials([1, 2], 3)
    [1, 2, 4, 8]
    

Comments are closed.