2008/03/12

繼續做 MSS

先前導的 mss 只會傳回最大和,不會傳回對應的 segment,這樣實在不夠有趣 XD。定義

其中 xs ↑Σ ys 傳回 xsys 兩者當中總和較大的那一個。那麼我們就可用與 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: