[Haskell-cafe] Re: Code and Perf. Data for Prime Finders (was:
Genuine Eratosthenes sieve)
Thorkil Naur
naur at post11.tele.dk
Tue Jul 24 19:42:23 EDT 2007
Hello Melissa,
On Tuesday 24 July 2007 19:09, Melissa O'Neill wrote:
> apfelmus wrote:
> > After some pondering, the List a data structure for merging is
> > really
> > ingenious! :) Here's a try to explain how it works:
>
> Thanks apfelmus! A detailed explanation of this code is really
> helpful for anyone trying to understand what is going on. The VIP/
> Crowd analogy is also very nice.
>
> > I think that this approach has the potential to outperform O'Neill's
> > (old?) code because it doesn't incorporates another prime number to
> > the
> > sieve mechanism until it really has to. I mean the following: in the
> >
> > 1st, 2nd, 3rd, 4th, ... step,
> >
> > O'Neill's code adds the multiples
> >
> > 2*2, 3*3, 5*5, 7*7, ...
> >
> > to the priority queue and uses them to sieve for potential prime
> > numbers
> > from then on.
>
> Yeah, that's (only) what the code in my paper does -- it's good
> enough for explicative purposes, but all recent versions have used a
> slightly augmented priority queue. It's a priority queue coupled
> with a "feeder list" that provides entries to add to the queue (in
> increasing order). They are only admitted to the heap data structure
> only once when the root of the heap "gets there".
>
> The two most important bits are:
>
> type HybridQ k v = (PriorityQ k v, [(k,v)])
>
> -- postRemoveHQ is called when the min element of the heap
> has changed
> postRemoveHQ :: Ord k => HybridQ k v -> HybridQ k v
> postRemoveHQ mq@(pq, []) = mq
> postRemoveHQ mq@(pq, (qk,qv) : qs)
> | qk < minKeyPQ pq = (insertPQ qk qv pq, qs)
> | otherwise = mq
>
>
> (See ONeillPrimes.hs in http://www.cs.hmc.edu/~oneill/code/haskell-
> primes.zip for the complete code. I've also added Thorkil Naur's
> code from March, which is also a good performer,
Do you have detailed measurements that you wish to share? I would be most
interested, I assure you.
> although its another
> case where most readers would find a detailed explanation of the code
> instructive.)
I'll do my very best to provide such an explanation within, say, the next
couple of weeks.
>
> > the approach here adds 5*5=25 to the heap only after considering
> > the 9th prime 23.
>
> Yep, that's what mine does too.
>
> Best Regards,
>
> Melissa.
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
Thanks a lot and the best regards
Thorkil
More information about the Haskell-Cafe
mailing list