c++ - What container really mimics std::vector in Haskell? -


the problem

i'm looking container used save partial results of n - 1 problems in order calculate nth one. means size of container, @ end, n.

each element, i, of container depends on @ least 2 , 4 previous results.

the container have provide:

  • constant time insertions @ either beginning or end (one of two, not both)
  • constant time indexing in middle

or alternatively (given o(n) initialization):

  • constant time single element edits
  • constant time indexing in middle

what std::vector , why relevant

for of don't know c++, std::vector dynamically sized array. perfect fit problem because able to:

  • reserve space @ construction
  • offer constant time indexing in middle
  • offer constant time insertion @ end (with reserved space)

therefore problem solvable in o(n) complexity, in c++.

why data.vector not std::vector

data.vector, data.array, provide similar functionality std::vector, not quite same. both, of course, offer constant time indexing in middle, offer neither constant time modification ((//) example @ least o(n)) nor constant time insertion @ either beginning of end.

conclusion

what container mimics std::vector in haskell? alternatively, best shot?

from reddit comes suggestion use data.vector.constructn:

o(n) construct vector n elements repeatedly applying generator function constructed part of vector.

 constructn 3 f = let = f <> ; b = f <a> ; c = f <a,b> in f <a,b,c> 

for example:

λ import qualified data.vector v λ v.constructn 10 v.length fromlist [0,1,2,3,4,5,6,7,8,9] λ v.constructn 10 $ (1+) . v.sum fromlist [1,2,4,8,16,32,64,128,256,512] λ v.constructn 10 $ \v -> let n = v.length v in if n <= 1 1 else (v v.! (n - 1)) + (v v.! (n - 2)) fromlist [1,1,2,3,5,8,13,21,34,55] 

this seems qualify solve problem you've described above.


Comments

Popular posts from this blog

database - VFP Grid + SQL server 2008 - grid not showing correctly -

jquery - Set jPicker field to empty value -

.htaccess - htaccess convert request to clean url and add slash at the end of the url -