documentation z Data.Array
brzmi:Jak szybki jest Data.Array?
Haskell zapewnia wieloostrzowych tablic, które mogą być traktowane jako funkcji, których domeny są izomorficzne do sąsiadujących podzbiorów całkowitymi. Funkcje ograniczone w ten sposób można skutecznie zrealizować w postaci ; w szczególności programista może rozsądnie spodziewać się szybkiego dostępu do komponentów.
Zastanawiam się, jak szybko mogą być (!)
i (//)
. Czy mogę oczekiwać od nich złożoności O (1), jak bym od ich imperatywnych odpowiedników?
'(//)' jest faktycznie linarem w _ rozmiar tablicy_, ponieważ musi on utworzyć nową kopię tablicy. Korzystając z tablic zmiennych, spodziewam się, że będzie on liniowy pod względem liczby aktualizacji. – hammar
@hammar jest liniowy w obu, ponieważ musi skopiować tablicę, a także iterować na liście. // jest raczej bezużyteczny w trybie MArray, ponieważ nie potrzebujesz funkcji aktualizacji zbiorczej. – alternative
Tak, oczywiście. Ma to jednak znaczenie tylko wtedy, gdy aktualizujesz niektóre elementy więcej niż jeden raz. – hammar