7
的Data.Array
的documentation讀取:Data.Array有多快?
Haskell中提供的可轉位陣列,其可以被認爲是 ,其功能結構域是同構於 整數的連續子集。以這種方式限制的功能可以有效地執行 ;特別是程序員可以合理地期望對組件的快速訪問。
我想知道(!)
和(//)
可以有多快。我能期望O(1)的複雜性,正如我從他們的命令性對應物中得到的那樣?
的Data.Array
的documentation讀取:Data.Array有多快?
Haskell中提供的可轉位陣列,其可以被認爲是 ,其功能結構域是同構於 整數的連續子集。以這種方式限制的功能可以有效地執行 ;特別是程序員可以合理地期望對組件的快速訪問。
我想知道(!)
和(//)
可以有多快。我能期望O(1)的複雜性,正如我從他們的命令性對應物中得到的那樣?
一般來說,是的,你應該能夠從!
期望O(1),但我不確定標準是否保證了這一點。
如果你想要更快的數組(通過使用流聚合),你可能想看看矢量包。它也是更好的設計。
請注意,//
可能是O(n),因爲它必須遍歷列表(就像命令程序一樣)。如果您需要很多突變,您可以使用MArray
或MVector
。
'(//)'實際上是array_的_size中的linar,因爲它必須創建一個新的數組副本。然而,使用可變數組,我認爲它在更新數量上是線性的。 – hammar
@hammar它在兩者中都是線性的,因爲它必須複製數組以及遍歷列表。 //在MArray中是無用的,因爲你不需要批量更新功能。 – alternative
當然可以。但是,如果您不止一次更新某些元素,那纔是真正重要的。 – hammar