On benchmarks, heaps, priority queues
aaronwmail-usenet at yahoo.com
aaronwmail-usenet at yahoo.com
Thu Jan 27 09:19:22 EST 2005
me> PQPython23 - the Lib implementation
me> PQ0 - my insertion sort based variant
me> PQueue - my "heap" based variant
me> (like PQPython23, but different).
Tim D:
> First of all, you should be running these benchmarks using Python
2.4.
> heapq is considerably faster there ... (Raymond Hettinger rewrote it
all
> in C).
> http://www.python.org/2.4/highlights.html
> Tim Delaney
WHOOPS. Okay after getting past my initial embarassment I tried this,
and it turns out it doesn't make much of a difference. In particular
PQ0 is still always better if you intersperse many deletes with inserts
or in all cases of size <10000. Of course other machines will probably
have different characteristics (and yes my py24 contains the _heapq
extension module).
The nasty behavior of PQ0 for insertBench at >100000
I think has to do with large list reallocation.
Hmmm. This makes me wonder if my bplustree implementation(s) are
faster
than the bsddb modules too...
-- Aaron Watters
===
SOMETHING WENT WRONG IN AIRLINE CRASH, EXPERT SAYS
-- a "real life headline" (that'll be $50,000, please)
ENCLOSURE: Python 2.4 run of
http://xsdb.sourceforge.net/bench/pq3.py on my machine.
=======================
BENCHMARKS FOR 1000
insertBench
__main__.PQPython23 on 1000 elapsed 0.0199999809265 got 1000
__main__.PQ0 on 1000 elapsed 0.00999999046326 got 1000
__main__.PQueue on 1000 elapsed 0.0300002098083 got 1000
mixBench
__main__.PQPython23 on 1000 elapsed 0.0 got 502
__main__.PQ0 on 1000 elapsed 0.00999999046326 got 502
__main__.PQueue on 1000 elapsed 0.0 got 502
BENCHMARKS FOR 10000
insertBench
__main__.PQPython23 on 10000 elapsed 0.260999917984 got 10000
__main__.PQ0 on 10000 elapsed 0.210000038147 got 10000
__main__.PQueue on 10000 elapsed 0.359999895096 got 10000
mixBench
__main__.PQPython23 on 10000 elapsed 0.0700001716614 got 5003
__main__.PQ0 on 10000 elapsed 0.050999879837 got 5003
__main__.PQueue on 10000 elapsed 0.0699999332428 got 5003
BENCHMARKS FOR 100000
insertBench
__main__.PQPython23 on 100000 elapsed 3.26499986649 got 100000
__main__.PQ0 on 100000 elapsed 7.88100004196 got 100000
__main__.PQueue on 100000 elapsed 4.81699991226 got 100000
mixBench
__main__.PQPython23 on 100000 elapsed 0.65099978447 got 50000
__main__.PQ0 on 100000 elapsed 0.461000204086 got 50000
__main__.PQueue on 100000 elapsed 0.661000013351 got 50000
BENCHMARKS FOR 200000
insertBench
__main__.PQPython23 on 200000 elapsed 6.99000000954 got 200000
__main__.PQ0 on 200000 elapsed 28.5010001659 got 200000
__main__.PQueue on 200000 elapsed 10.3849999905 got 200000
mixBench
__main__.PQPython23 on 200000 elapsed 1.29099988937 got 100001
__main__.PQ0 on 200000 elapsed 0.922000169754 got 100001
__main__.PQueue on 200000 elapsed 1.34200000763 got 100001
BENCHMARKS FOR 300000
insertBench
__main__.PQPython23 on 300000 elapsed 11.6970000267 got 300000
__main__.PQ0 on 300000 elapsed 70.3009998798 got 300000
__main__.PQueue on 300000 elapsed 16.8840000629 got 300000
mixBench
__main__.PQPython23 on 300000 elapsed 1.93300008774 got 150000
__main__.PQ0 on 300000 elapsed 1.39199995995 got 150000
__main__.PQueue on 300000 elapsed 1.96300005913 got 150000
BENCHMARKS FOR 400000
insertBench
__main__.PQPython23 on 400000 elapsed 15.5419998169 got 400000
__main__.PQ0 on 400000 elapsed 127.253000021 got 400000
__main__.PQueue on 400000 elapsed 23.0629999638 got 400000
mixBench
__main__.PQPython23 on 400000 elapsed 2.64399981499 got 200000
__main__.PQ0 on 400000 elapsed 1.95300006866 got 200000
__main__.PQueue on 400000 elapsed 2.73399996758 got 200000
BENCHMARKS FOR 500000
insertBench
__main__.PQPython23 on 500000 elapsed 20.8800001144 got 500000
__main__.PQ0 on 500000 elapsed 246.954999924 got 500000
__main__.PQueue on 500000 elapsed 35.9609999657 got 500000
mixBench
__main__.PQPython23 on 500000 elapsed 3.55599999428 got 250000
__main__.PQ0 on 500000 elapsed 2.48300004005 got 250000
__main__.PQueue on 500000 elapsed 3.48500013351 got 250000
BENCHMARKS FOR 1000000
insertBench
__main__.PQPython23 on 1000000 elapsed 44.6940000057 got 1000000
__main__.PQ0 on 1000000 elapsed 1400.5940001 got 1000000
__main__.PQueue on 1000000 elapsed 70.6619999409 got 1000000
mixBench
__main__.PQPython23 on 1000000 elapsed 6.63000011444 got 500001
__main__.PQ0 on 1000000 elapsed 4.73600006104 got 500001
__main__.PQueue on 1000000 elapsed 6.82999992371 got 500001
More information about the Python-list
mailing list