繼續做 MSS
先前導的 mss
只會傳回最大和,不會傳回對應的 segment,這樣實在不夠有趣 XD。定義
其中 xs ↑Σ ys
傳回 xs
和 ys
兩者當中總和較大的那一個。那麼我們就可用與 derivation of mss
差不多的過程導出 cmss
(abbreviation of "complete maximum segment sum") 的 quadratic-time version:
Quadratic time?! 雖然我們已經用上 tupling transformation,但這只把 linear-space 降為 constant-space,而 f
裡面會呼叫 sum
,所以並非 constant-time operation。展開 f
的實作會更清楚:
為此我們必須做第二次 tupling transformation,把 sum
的結果也放進 "induction hypothesis" 裡面。我們可以如下在 fst
右邊「憑空」(i.e., by introducing id
)變出 fusion 使用的火種:
這樣我們就可以做 fusion 了(不過我這裡偷懶,沒真的做 XD):
其中 newssp
(abbreviation of "new segment-sum pair") 可實作為
我猜如果對 sum . cmss
做某種 fold fusion,應該就會得到本來 linear-time & constant-space 的 mss
。
--
一般不呈現這個版本的理由應該很顯然 XD。
Labels: Program Derivation
<< 回到主頁