Qué es Programación Dinámica

4684 단어 programmingspanish
Técnica para optimizar problemas que tienen la característica de contar con una sub estructura óptima.

Básicamente estamos optimizando problemas mediante una optimización de los problemas más pequeños que componen el problema más grande en cuestión.

Se necesita tener problem as empalmados para poder utilizar programación dinámica. Esto quiere decir que la solución óptima se obtiene al resolver el mismo problema en varias ocasiones.

Un buen ejemplo de la optimización siguiendo la descripción anterior es la memoización.

메모이사시온



Memoización es guardar el resultado de operation previas para que en el futuro sea simplemente Consultar en la memoria el resultado previamente guardado y de esa manera ahorrar en tiempo de ejecución.

예시:

누메로 데 피보나치

F(n) = F(n-1) + F(n-2)

Al implementar fibonacci siguiendo el proceso estricto de la fórmula, se obtiene un algoritmo ineficiente porque el crecimiento computacional (complejidad) es exponencial.

Sin embargo, para poder obtener una respuesta favoury y correcta, es obligatorio realizar el mismo proceso repetitivo.

문제를 해결하기 위해 문제를 풀지 않으려면 반복적인 형식으로 실현해야 하며 동적 프로그래밍을 최적화할 수 있는 결과를 얻을 수 있으며 메모를 통해 새로운 해결 방법을 사용할 수 있습니다.

import sys

def fibonacci_recursive(n):
    if n == 0 or n == 1:
        return 1
    return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2)

def fibonacci_with_memo(n, memo={}):
    if n == 0 or n == 1:
        return 1
    try:
        return memo[n]
    except KeyError:
        resultado = fibonacci_with_memo(n - 1, memo) + fibonacci_with_memo(n - 2, memo)
        memo[n] = resultado
    return resultado

if __name__ == "__main__":
    sys.setrecursionlimit(10002)
    n = int(input("Escoger número: "))
    result = fibonacci_with_memo(n)
    print(result)

좋은 웹페이지 즐겨찾기