On 23 Oct 2013, at 18:37, David Nolen <dnolen.li...@gmail.com> wrote:
> The problem here is that you're not following your Scala solution closely > enough. I suspect if you used defrecords to represent the pieces the way that > you used a class in Scala you can avoid the number of collisions for larger > problems. > > Not tested much but I tried something like the following and I no longer see > hash collisions dominating in YourKit: It would be lovely if it was that easy, David. However, I still see lots of hash collisions when using records. Here's a portion of the output from an implementation that's instrumented to print hash codes, similar to what Andy did with the vector-based implementation: "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 2]} #chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name :N, :pos [0 1]} #chess_clojure.core.Piece{:name :R, :pos [8 4]}}" "842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 4]} #chess_clojure.core.Piece{:name :Q, :pos [3 3]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [8 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 4]} #chess_clojure.core.Piece{:name :Q, :pos [3 3]} #chess_clojure.core.Piece{:name :B, :pos [1 4]} #chess_clojure.core.Piece{:name :R, :pos [8 1]}}" "842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 3]} #chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [8 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :N, :pos [0 3]} #chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [8 4]}}" "842565000: #{#chess_clojure.core.Piece{:name :R, :pos [0 3]} #chess_clojure.core.Piece{:name :Q, :pos [4 2]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :N, :pos [8 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :R, :pos [0 3]} #chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name :N, :pos [8 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 2]} #chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name :R, :pos [0 0]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :B, :pos [0 5]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 2]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :R, :pos [0 3]} #chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :N, :pos [8 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :B, :pos [0 5]} #chess_clojure.core.Piece{:name :N, :pos [8 2]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name :N, :pos [8 2]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name :R, :pos [0 2]} #chess_clojure.core.Piece{:name :N, :pos [8 1]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name :R, :pos [1 2]} #chess_clojure.core.Piece{:name :N, :pos [8 1]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name :R, :pos [7 2]} #chess_clojure.core.Piece{:name :N, :pos [0 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} #chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name :N, :pos [6 5]} #chess_clojure.core.Piece{:name :R, :pos [1 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 0]} #chess_clojure.core.Piece{:name :R, :pos [0 2]} #chess_clojure.core.Piece{:name :N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [1 4]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} #chess_clojure.core.Piece{:name :R, :pos [0 0]} #chess_clojure.core.Piece{:name :N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [1 4]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 2]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}" "842565000: #{#chess_clojure.core.Piece{:name :R, :pos [1 4]} #chess_clojure.core.Piece{:name :Q, :pos [3 3]} #chess_clojure.core.Piece{:name :N, :pos [6 5]} #chess_clojure.core.Piece{:name :B, :pos [2 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [7 2]} #chess_clojure.core.Piece{:name :N, :pos [0 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 1]} #chess_clojure.core.Piece{:name :N, :pos [7 3]} #chess_clojure.core.Piece{:name :R, :pos [1 5]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 1]} #chess_clojure.core.Piece{:name :R, :pos [1 2]} #chess_clojure.core.Piece{:name :N, :pos [7 3]} #chess_clojure.core.Piece{:name :B, :pos [2 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :N, :pos [7 3]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}" "842565000: #{#chess_clojure.core.Piece{:name :R, :pos [1 4]} #chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :N, :pos [8 3]} #chess_clojure.core.Piece{:name :B, :pos [0 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [0 5]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :R, :pos [1 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :B, :pos [0 4]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :R, :pos [1 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [0 5]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [1 0]} #chess_clojure.core.Piece{:name :R, :pos [0 4]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [4 1]} #chess_clojure.core.Piece{:name :R, :pos [1 3]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [2 0]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :R, :pos [0 0]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [1 4]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 5]} #chess_clojure.core.Piece{:name :R, :pos [1 1]} #chess_clojure.core.Piece{:name :N, :pos [7 2]} #chess_clojure.core.Piece{:name :B, :pos [0 3]}}" "842565000: #{#chess_clojure.core.Piece{:name :Q, :pos [3 4]} #chess_clojure.core.Piece{:name :B, :pos [1 5]} #chess_clojure.core.Piece{:name :N, :pos [0 2]} #chess_clojure.core.Piece{:name :R, :pos [8 1]}}" -- paul.butcher->msgCount++ Snetterton, Castle Combe, Cadwell Park... Who says I have a one track mind? http://www.paulbutcher.com/ LinkedIn: http://www.linkedin.com/in/paulbutcher MSN: p...@paulbutcher.com AIM: paulrabutcher Skype: paulrabutcher -- -- 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/groups/opt_out.