Я хочу использовать std::stable_sort
. Сложность алгоритма определяется как
O (N · log ^ 2 (N)), где N = std:: расстояние (первое, последнее) приложения cmp. Если доступна дополнительная память, тогда сложность O (N · log (N)). http://en.cppreference.com/w/cpp/algorithm/stable_sort
В моем приложении память имеет решающее значение, поэтому я бы предпочел std::stable_sort
использовать оптимизированную память O (N · log ^ 2 (N))
алгоритм, а не оптимизированный по времени алгоритм O (N · log (N)).
Я понимаю, что оптимизированная по времени версия будет выбрана только в том случае, если она безопасна
сделать это (доступная память). Тем не менее, я нацелен на тестирование моего приложения, и поэтому, поскольку важна память, вы хотите сравнить алгоритм, когда потребление памяти является самым низким. Поскольку в моей системе в настоящее время достаточно памяти для выделения
буфера, он автоматически выбирает версию O (N · log ^ 2 (N)) std::stable_sort
. Поэтому я хотел бы заявить std::stable_sort
используйте оптимизированную для памяти версию. Возможно ли это?
Появится политика выполнения быть параметром, который может модифицировать алгоритм, однако он появляется чтобы изменить размер parallelism. http://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t
Хотя выбор параллельная или последовательная версия может фактически выбирать O (N · log (N)) или O (N · log ^ 2 (N)) соответственно, это не указано нигде на веб-странице.
Интересно, есть ли у кого-нибудь опыт в утверждении этого выбора. Если так смогут ли они предоставить какие-либо советы?