[Haskell-cafe] newbie optimization question
jerzy.karczmarczuk at info.unicaen.fr
jerzy.karczmarczuk at info.unicaen.fr
Sun Oct 28 11:00:43 EDT 2007
Prabhakar Ragde writes:
> For the purposes of learning, I am trying to optimize some variation of
> the following code for computing all perfect numbers less than 10000.
>
> divisors i = [j | j<-[1..i-1], i `mod` j == 0]
> main = print [i | i<-[1..10000], i == sum (divisors i)]
>
> I know this is mathematically stupid, but the point is to do a moderate
> nested-loops computation. On my 2.33GHz dual-core MacBookPro, the obvious
> C program takes about .3 seconds, and a compiled OCaML program (tail
> recursion, no lists) about .33 seconds. The above takes about 4 seconds.
>
> I've tried using foldl', and doing explicit tail recursion with strict
> accumulators, but I can't get the running time below 3 seconds. Is it
> possible to come within striking distance of the other languages? Thanks.
Just a trivial comment...
1. Don't speak about comparing *languages* when you compare *algorithms*,
and in particular data structures.
2. Please, DO code the above in C, using linked lists. Compare then.
3. Check the influence of bare printing, separated from the computation.
Jerzy Karczmarczuk
More information about the Haskell-Cafe
mailing list