Algoritmia - Duda... si me ayudasen para mañana...

 
Vista:

Duda... si me ayudasen para mañana...

Publicado por jk (1 intervención) el 17/12/2007 03:42:18
En una empresa se pueden realizar n trabajos diferentes denominados a,b,c, …y se dispone de una tabla Beneficio[1..n, 1..n], en la que cada posición B[i,j] representa el beneficio de ejecutar el trabajo i y a continuación el trabajo j.

Se quiere encontrar la sucesión de m trabajos que obtenga un beneficio óptimo. No hay límite en el número de veces que se puede ejecutar un trabajo concreto. Diseñar un algoritmo por programación dinámica que resuelva dicho problema.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Selección óptima de trabajos: Programación dinámica

Publicado por Alejandro (307 intervenciones) el 11/03/2024 22:57:02
Jk, el problema de seleccionar una sucesión de m trabajos que maximice el beneficio se puede abordar utilizando programación dinámica. Aquí hay un esbozo de un algoritmo que podría resolver este problema:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
def seleccion_optima_trabajos(Beneficio, m):
    n = len(Beneficio)
 
    # Inicializar la matriz de resultados
    resultado = [[0] * (m + 1) for _ in range(n + 1)]
 
    # Llenar la matriz de resultados utilizando programación dinámica
    for i in range(1, n + 1):
        for j in range(1, m + 1):
            max_beneficio = 0
            for k in range(i):
                max_beneficio = max(max_beneficio, resultado[k][j - 1] + Beneficio[k][i - 1])
            resultado[i][j] = max(resultado[i - 1][j], max_beneficio)
 
    # Reconstruir la solución óptima
    trabajos_seleccionados = []
    i, j = n, m
    while i > 0 and j > 0:
        if resultado[i][j] != resultado[i - 1][j]:
            trabajos_seleccionados.append(i)
            j -= 1
        else:
            i -= 1
 
    trabajos_seleccionados.reverse()
    return trabajos_seleccionados, resultado[n][m]
 
# Ejemplo de uso:
Beneficio = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
]
m = 2
 
trabajos, beneficio_total = seleccion_optima_trabajos(Beneficio, m)
print(f"La sucesión óptima de {m} trabajos es: {trabajos}")
print(f"El beneficio total es: {beneficio_total}")

Este algoritmo utiliza una matriz para almacenar los resultados óptimos y luego reconstruye la solución óptima seleccionando los trabajos correspondientes. Ten en cuenta que los índices en el código comienzan desde 0, así que ajusta tu entrada de datos según sea necesario.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar