For the sieve, if performance matters, clojure's native data structures may 
not be the best choice.
A mutable array of boolean primitives could be more apropos.

(defn prime-sieve [^long n]
  (let [^booleans sieve (make-array Boolean/TYPE (inc n))]
    ...)

... using aset/aget to write/read sieve.

On Tuesday, August 9, 2011 1:18:46 PM UTC-7, Chouser wrote:
>
> On Tue, Aug 9, 2011 at 12:50 PM, Kevin Sookocheff
> <kevin.so...@gmail.com> wrote:
> > Hi,
> >
> > I have a question regarding the map data structure. I'm trying to program 
> a
> > Sieve of Eratosthenes using the algorithm at Wikipedia:
> >
> > Input: an integer n > 1
> >
> > Let A be an array of bool values, indexed by integers 2 to n,
> > initially all set to true.
> >
> > for i = 2, 3, 4, ..., while i^2 ≤ n:
> >   if A[i] is true:
> >     for j = i^2, i^2 + i, i^2 + 2i, ..., while j ≤ n:
> >       A[j] = false
> >
> > Now all i such that A[i] is true are prime.
> >
> > I'm having a problem creating the data structure A.
> >
> > What I want to do is create a map of integers from 2 to n all initialized 
> to
> > true that I can then prune using the algorithm.
> >
> > Any ideas?
>
> Since the keys are consecutive integers, you might consider a vector
> of booleans:
>
> (def A (vec (repeat (inc n) true)))
>
> You can then use assoc to set any particular index to false:
>
> (assoc A 5 false)
>
> Differences using a vector instead of a hash-map: will stay in numeric
> order, doesn't allow arbitrary dissoc, nth and assoc may be faster,
> use less memory, (vector-of :bool) will definitely use less memory,
> and probably others.  Depending on your goals, a vector may or may not
> be preferable to a hash-map.
>
> --Chouser
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to