簡體   English   中英

使用Data.Vector進行動態編程

[英]Dynamic programming with Data.Vector

我正在使用Data.Vector,目前需要計算向量的內容,以便用於計算加密哈希(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 ,然后生成大小為nVector 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數的向量。

也許您可以使用Data.Vector的掃描功能之一? http://hackage.haskell.org/packages/archive/vector/0.6.0.2/doc/html/Data-Vector.html#32

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM