On Jul 23, 4:06 pm, Dmitry Gutov <[email protected]> wrote:
> Ahem.
>
> Here is a more idiomatic version that runs under half a second, no
> annotations required.
I did that from the beginning, but as I really needed 4e6 and not 1e5
elements, that map got very big. And I didn't remember the argument to
give java more memory. Also I was just curious to see what arrays did
to the performance. However, my code that looked like that was slow
too. I used Clojure 1.2.0. Are you using 1.3.0?
> (def vs (atom {}))
>
> (defn sk [k]
> (if (@vs k)
> (@vs k)
> (let [ans (if (< k 56)
> (- (mod (+ 100003 (- (* k 200003)) (* 300007 k k k))
> 1000000) 500000)
> (- (mod (+ (sk (- k 24))
> (sk (- k 55))) 1000000)
> 500000))]
> (do (swap! vs assoc k ans)
> ans))))
>
> user> (reset! vs {})
> {}
> user> (time (dorun (map sk (range 100000))))
> "Elapsed time: 155.082351 msecs"
> nil
>
> I guess the moral is that the built-in data structures are quite fast,
> and reflection is evil.
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en