This is the mail archive of the
libc-help@sourceware.org
mailing list for the glibc project.
Considering merge optimizations from Timsort in __move_merge_adaptive, __move_merge_adaptive_backward
- From: jrmarsha <jrmarsha at mtu dot edu>
- To: libc-help at sourceware dot org
- Date: Tue, 3 Jul 2018 00:16:08 -0400
- Subject: Considering merge optimizations from Timsort in __move_merge_adaptive, __move_merge_adaptive_backward
Hello all,
I've been implementing a new version of Timsort in C++ using more
standard facilities. One thing I've come across which adds a divide
between a larger codebase and faster code is the implementation of
std::inplace_merge with sufficient memory. This goes to the specific
functions __move_merge_adaptive, and __move_merge_adaptive_backward.
In particular, there is an optimization where each insertion searches
for the maximum number of elements it can move. A brief in context
explanation is here:
https://en.wikipedia.org/wiki/Timsort#Individual_merges . Would such a
trick have a place in glibc or is the overhead likely too great in the
general case?