-- |
-- 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 calcula cotas = t
    where t = tabla [(i,calcula t i) | i <- range cotas]