[Haskell-cafe] Data.IntMap union complexity
wren ng thornton
wren at freegeek.org
Sun Feb 26 02:50:18 CET 2012
Evan Laforge <qdunkan at gmail.com> wrote:
> I've wondered if it's faster to insert many keys by successive
> insertion, or by building another map and then unioning, and likewise
> with deletion. I eventually decided on successive, thinking a log n
> build + merge is going to be slower than a m*log n for successive
> insertion. So I wound up with:
If you don't already have the keys in a map, I don't think you gain much
by building a map and then merging rather than just inserting them
directly. It will produce extra garbage (unless you have some interest
in the map you're building), and you have to make the same spine
traversals in building the map as you would have inserting into the
larger map (and then you have to traverse the larger map during
merging). But again, thanks to Criterion, benchmarking is cheap and
easy. No need to believe in the folklore or opinions of others :)
Though, if the set of keys to be added is very large, then the
build+merge approach would allow you to parallelize the building of the
map (split the key set in "half" and build maps for each set, recursing
as necessary; then either merge the new maps together before merging
with the target map, or just merge them with the target map in serial).
--
Live well,
~wren
More information about the Haskell-Cafe
mailing list