[Bug libstdc++/35968] New: nth_element fails to meet its complexity requirements
sjhowe at dial dot pipex dot com
gcc-bugzilla@gcc.gnu.org
Thu Apr 17 20:39:00 GMT 2008
nth_element in 4.3.0 fails to meet its complexity requirements.
This is basically intraselect by Dave Musser.
The question is "What algorithm should you switch to when quickselect fails?"
In the codebase __heapselect() is called. But this in O(N * log N).
__heapselect() is O(middle-first) + O((last-middle) * log(last-first)) which is
O(N * log N) and the C++ standard requires nth_element to be O(N).
__heapselect() is no use at all here.
Better still is median-of-medians of groups of 5 (and plenty of proofs that it
is O(N)) or approximate median finding and that is still O(N)
See
www.cs.wpi.edu/~hofri/medsel.pdf
In the best or average case, intraselect is
O(N) partitioning + O(1) finding a suitable partition element
In the worse case, intraselect is
O(N) partitioning + O(N) finding a suitable partition element
Stephen Howe
--
Summary: nth_element fails to meet its complexity requirements
Product: gcc
Version: 4.3.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: libstdc++
AssignedTo: unassigned at gcc dot gnu dot org
ReportedBy: sjhowe at dial dot pipex dot com
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=35968
More information about the Gcc-bugs
mailing list