Haskell中如何代價最小的操作(插入、刪除)一棵樹?
03-01
最近在用haskell寫一些數據結構,比如說avl tree,但是每次insert、remove,遞歸里都調用了構造函數,相當於完全重建了一棵樹,感覺上是很浪費的,在c裡面更改指針指向就可以了,haskell裡面有什麼技巧嗎?
修改一個不可變數據結構的代價的確是比較大的。以樹為例,和你想的不一樣的是,並不需要完全重建一棵樹,如圖所示:
對於一棵個節點的樹,新建的節點數為 。想要達到的複雜度就需要用可變數據結構了。
更多請參考:
函數式編程所倡導使用的「不可變數據結構」 如何保證性能?
Pros. / Cons. of Immutability vs. Mutability
Zipper?
Learn You a Haskell for Great Good!
推薦閱讀:
※Haskell有多少跟State/Reference有關的東西?
※Kotlin強行模擬Point-Free
※Haskell 有哪些威力十足的庫?
※學過Haskell是一種怎樣的體驗?
※C++中的函數對象(Function Object)為什麼叫函子(Functor)?
TAG:Haskell |