All the advice here is valid; type hinting + eliminating boxed math will probably give you the biggest gains. By adding one type hint in the proper place sometimes I've been able to make my code go 5-10x faster.
I've used tools like YourKit to great advantage to be able to pinpoint exactly which parts of the code contribute most to the slowness. I.e. your time is better spent optimizing a fn that's called 1k times per second and it's a little slow (for example, missing a type hint and has to do reflection or using boxed math) vs. a fn that's very slow but is only called once a minute. @raspasov On Thursday, May 14, 2015 at 1:02:42 AM UTC-7, Amith George wrote: > > I wrote the following code to solve this challenge - > https://www.reddit.com/r/dailyprogrammer/comments/35s2ds/20150513_challenge_214_intermediate_pile_of_paper/ > . > > Code - > https://github.com/amithgeorge/reddit-dailyprogrammer-clojure/blob/56ce1dbb6a08e96150dc85934caecfeb68108a53/src/rdp/214_intermediate.clj > > I executed the -main function using `lein run 1`. > > Output > > ;; lein run 1 > > 0 12605919 > 1 3578145 > 2 15356894 > 3 19134293 > 4 2394558 > 5 15030409 > 6 6424953 > 7 14893444 > 8 1592254 > 9 1914025 > 10 7075106 > "Elapsed time: 501168.972435 msecs" > > The code originally used an immutable hashmap, but I lost patience waiting > for the computation to end. With mutable hashmap, it still takes around 8 > mins. > > I wrote a C# version of the above code - > https://gist.github.com/amithgeorge/766b8220f39d48221e58. It finishes > under 40secs. The C# exe was built under Release mode and executed directly > from the commandline. I expected the Clojure version to perform similarly. > > Any tips on what I am doing wrong? > > ----- > Explanation of the code - Create a vector of all paper sheets, such that > the sheet placed last is the first element of the vector and the last > element is the canvas. To compute the frequency of each visible color - for > each point in the canvas find the first sheet in the vector that covers the > point. Store/increment its count in the hashmap. I understand there might > be better more efficient ways to solve this, but currently I am interested > in why the Clojure versions is so slow vis-a-vis the C# version. > > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.