I've done a little comparing to sorted-set as recommended.  The following
test (in case there is anything bogus about it) is checked in with the java
project:
http://code.google.com/p/jc-pheap/source/browse/trunk/jc-pheap/src/persistent_heap/testing/test.clj?spec=svn8&r=8

deduping 2,000,000 nums
shuffling  1999019  nums
=========================================
inserting into sorted set
"Elapsed time: 39375.887 msecs"
--------------------
popping from front of sorted set
"Elapsed time: 15189.0 msecs"
=========================================
heap insert
"Elapsed time: 15101.546 msecs"
------------------
heap pop
"Elapsed time: 59715.796 msecs"
=========================================

What I am finding consistently (again, unless the test is bogus) is pretty
much expected.  *Overall* the excellently implemented sorted-set outperforms
the heap I'm working on if you add the all the "insert" times to all the the
"pop-front" times.

That said, if you want fast inserts, and you're not even sure yet if people
want all the elements in sorted order, the heap has advantages ...
especially if you're not even planning on referencing elements in the middle
of the list (something I do hope to support in some fashion eventually,
note).  It may also be the case that some smart java/algorithm people could
find opportunities to speed up my deleteMin().*

a note on deduping:*

One difference that doesn't seem to matter performance-wise much is that
sorted-set elements are unique.  I'm not sure if clojure currently has a
data structure (other than considering the heap) that works like a sorted
multimap or sorted multiset.  Would it be the same to sort a vector in
between inserts?  That doesn't sound fast, but maybe I should have done that
test, too.

So, anyway, for this test, I inserted unique elements into both structures
so one wouldn't have way more than the other when comparing things like
popping.  I also sampled from a wide range of numbers, so I probably didn't
have to go to such lengths, as it turns out.

--~--~---------~--~----~------------~-------~--~----~
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
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