コードの一部にベクトルを使用すると効率的なアプリケーションがあります。ただし、計算中にいくつかの要素を追跡する必要があります。Data.Vectors から O(n) 償却連結を取得できると聞いたことがあります (通常の配列成長トリックによって) が、私はそれを正しく行っていないと思います。したがって、次の設定があるとしましょう。
import Data.Vector((++),Vector)
import Prelude hiding ((++))
import Control.Monad.State.Strict
data App = S (Vector Int)
add :: Vector Int -> State App ()
add v1 = modify (\S v2 -> S (v2 ++ v1))
add
この場合、償却された O(n) 時間で実行されますか? そうでない場合、どうすればそれをadd
行うことができますか (状態に保存する必要があり(forall s. MVector s Int)
ますか?)。より効率的な実装方法はありますadd
か?