[Haskell-cafe] Purely funcional LU decomposition

wren ng thornton wren at freegeek.org
Thu Feb 5 20:46:00 EST 2009


Rafael Gustavo da Cunha Pereira Pinto wrote:
> What I miss most is a data structure with O(1) (amortized) direct access.

Finger trees get close, O(log(min(i,n-i))):

 
http://hackage.haskell.org/packages/archive/containers/latest/doc/html/Data-Sequence.html

(And Theta(1) amortized for all dequeue operations to boot.)


> One of the changes I thought today was to remove the ++ operator and create
> a list of lists that I would concat in the last call.

Don't do it manually, let an abstract type do the optimization for you. 
This idea[1] is often known as "difference lists", which the estimable 
Don Stewart has already packaged up for us:

     http://hackage.haskell.org/cgi-bin/hackage-scripts/package/dlist

:)

[1] Actually, not quite that idea. The idea instead is to represent a 
list as a function [a]->[a] and then compose these functions (rather 
than concatenating the strings). At the very end once you're done, pass 
in [] and get back the whole list in O(n) time, rather than the O(n^2) 
that commonly arises from using (++).

-- 
Live well,
~wren


More information about the Haskell-Cafe mailing list