2011-09-02 24 views
7

Data.Arraydocumentation讀取:Data.Array有多快?

Haskell中提供的可轉位陣列,其可以被認爲是 ,其功能結構域是同構於 整數的連續子集。以這種方式限制的功能可以有效地執行 ;特別是程序員可以合理地期望對組件的快速訪問。

我想知道(!)(//)可以有多快。我能期望O(1)的複雜性,正如我從他們的命令性對應物中得到的那樣?

回答

5

一般來說,是的,你應該能夠從!期望O(1),但我不確定標準是否保證了這一點。

如果你想要更快的數組(通過使用流聚合),你可能想看看矢量包。它也是更好的設計。

請注意,//可能是O(n),因爲它必須遍歷列表(就像命令程序一樣)。如果您需要很多突變,您可以使用MArrayMVector

+1

'(//)'實際上是array_的_size中的linar,因爲它必須創建一個新的數組副本。然而,使用可變數組,我認爲它在更新數量上是線性的。 – hammar

+0

@hammar它在兩者中都是線性的,因爲它必須複製數組以及遍歷列表。 //在MArray中是無用的,因爲你不需要批量更新功能。 – alternative

+0

當然可以。但是,如果您不止一次更新某些元素,那纔是真正重要的。 – hammar