Escriu per cercar…

Programació dinàmica

La programació dinàmica és un mètode de resolució de problemes que es basa a resoldre el problema a partir d'un subproblema més petit de forma recursiva fins a trobar el resultat del subproblema menor.

S'ensenya a
Eines computacionals en bioinformàticaAnàlisi de seqüènciesDAW-BIO

Introducció

Per exemple, per calcular el factorial de 7, el podem calcular multiplicant 7 pel factorial de 6, i el factorial de 6 el podem calcular multiplicant 6 pel factorial de 5, etc.

A continuació tens un algorisme recursiu per calcular el factorial de n:

python
def factorial(n):
    if n == 0:
        return 1
    return n * factorial(n-1)

assert factorial(6) == 720

Tots els algorismes recursius es poden transformar en lineals mitjançant un array que guarda els resultats parcials, tal com pots veure a continuació:

python
import numpy as np

def factorial(n):
    array = np.arange(n+1, dtype=np.dtype("int64"))
    array[0] = 1

    for i in range(1, n+1):
        array[i] = array[i-1]*i

    return array[n]

assert factorial(6) == 720, f"n = {factorial(6)}"

Encara que un algorisme recursiu sigui molt més senzill d’escriure, i més “entenedor”, els algorismes lineals són molt més ràpids d’executar i no estan limitats per la mida de la pila d’execució del procés.

Per aquest motiu, molts compiladors reescriuen el codi recursiu en lineal de forma automàtica si l’algorisme és “tail-recursive”.

Estàs llegint una vista prèvia.

Inicia la sessió amb Google per llegir la pàgina sencera.

Inicia la sessió amb Google

Només et demanarem que acceptis les condicions del servei.