簡體   English   中英

是否有類似於 Haskell 中的列表的數據結構,它允許替換 O(1) 中的元素?

[英]Is there a data structure similar to a list in Haskell, which allows the replacement of elements in O(1)?

到目前為止,我只找到了向量和序列,但它們都不能替換 O(1) 中的列表元素。 這樣的數據結構當然會違反 Haskells 結構的不可變特性,但也許仍然存在一些骯臟的實現? 歡迎每個反饋。

正如您自己建議的那樣 - 我也很確定O (1) 中的安全、純功能更新是不可能的。 可能在O (log n ) 中具有樹狀實現; 例如,您可以使用Data.Map.Map Int a來代替[a]和連續的索引區域。 此外,可以對列表或向量中的kn 個元素進行批量更新,只需O ( n ) 而不是手動逐個插入它們所需的O ( k·n )。 簽出//

如果這些對您來說都不夠快,那么是的,您需要將 go 轉換為可變性的黑暗 realm。 幸運的是,Haskell 為此類旅程提供了良好的安全裝甲和手電筒: ST monad 它的工作方式是,您將需要在runST中進行可變更新的整個區域包裝起來。 在該區域內,您使用MVector ,它支持O (1) mutable element updates ,就像在命令式語言中一樣。 但是多虧了類型系統技巧, runST確保所有這些副作用都限制在本地 scope 內。

暫無
暫無

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

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