See also David Nolan's post:

http://dosync.posterous.com/lispers-know-the-value-of-everything-and-the

Justin

On Tuesday, August 9, 2011 6:02:00 PM UTC-4, pmbauer wrote:
>
> 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...@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