-- |
-- Module      : Dinamica
-- Description : El patrón de programación dinámica.
-- License     : Creative Commons
-- Maintainer  : José A. Alonso
-- 
-- = El patrón de programación dinámica
-- 
-- Este módulo contiene la definición del patrón de programación dinámica
-- estudiado en el <http://bit.ly/1LIxi0u tema 15> del curso. 
--
-- Además, en el tema se incluye como de casos de aplicación del patrón 
--
-- * <http://bit.ly/1LIxkWi la sucesión de Fibonacci>,
-- * <http://bit.ly/1LIxlth el producto de cadenas de matrices>,
-- * <http://bit.ly/1IsuUn1 los árboles binarios de búsqueda optimales>,
-- * <http://bit.ly/1IsuYDe los caminos mínimos entre todos los pares de
--   nodos de un grafo> y 
-- * < http://bit.ly/1Isv0 el problema del viajante>.

module I1M.Dinamica (module I1M.Tabla, dinamica)  where

import I1M.Tabla
import Data.Array

-- | (dinamica f r) wa la tabla de cálculo dinámica de la función f en
-- el rango r.
dinamica :: Ix i => (Tabla i v -> i -> v) -> (i,i) -> Tabla i v
dinamica :: (Tabla i v -> i -> v) -> (i, i) -> Tabla i v
dinamica Tabla i v -> i -> v
calcula (i, i)
cotas = Tabla i v
t
  where t :: Tabla i v
t = [(i, v)] -> Tabla i v
forall i v. Eq i => [(i, v)] -> Tabla i v
tabla [(i
i,Tabla i v -> i -> v
calcula Tabla i v
t i
i) | i
i <- (i, i) -> [i]
forall a. Ix a => (a, a) -> [a]
range (i, i)
cotas]