Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 数据向量动态规划_Arrays_Haskell_Vector_Memoization - Fatal编程技术网

Arrays 数据向量动态规划

Arrays 数据向量动态规划,arrays,haskell,vector,memoization,Arrays,Haskell,Vector,Memoization,am正在使用Data.Vector,并且am当前需要计算用于计算加密哈希(Sha1)的向量的内容。我创建了以下代码 dynamic :: a -> Int -> (Int -> Vector a -> a) -> Vector a dynamic e n f = let start = Data.Vector.replicate n e in step start 0 where step vector i = if i==n then v

am正在使用Data.Vector,并且am当前需要计算用于计算加密哈希(Sha1)的向量的内容。我创建了以下代码

dynamic :: a -> Int -> (Int -> Vector a -> a) -> Vector a
dynamic e n f = 
let 
    start = Data.Vector.replicate n e   
in step start 0
where
    step vector i = if i==n then vector
                    else step (vector // [(i,f i vector)]) (i+1)
我创建它是为了让函数f填充向量可以访问部分 一路走来的结果。这样的东西肯定已经存在于数据中了,向量,不是吗


问题陈述如下:您要解决一个动态规划问题,其中完成的结果是一个数组。您知道数组大小,并且有一个用于填充的递归函数。

也许您可以使用Data.Vector的扫描函数之一?

您可能已经看到函数
generate
,它接受大小
n
和类型
Int->a
的函数
f
,然后生成大小
n
向量a
。您可能不知道的是,当使用此函数时,您实际上可以访问部分结果

我的意思是,在传递给
generate
的函数中,您可以引用正在定义的向量,由于Haskell的惰性,它可以很好地工作(当然,除非您使向量的不同项以循环方式相互依赖)

例如:

import Data.Vector

tenFibs = generate 10 fib
    where fib 0 = 0
          fib 1 = 1
          fib n = tenFibs ! (n-1) + tenFibs ! (n-2)

tenFibs
现在是一个包含前10个Fibonacci数的向量。

最后一行中出现的
n
不应该都是
i