Of course, there are many factors that affect the performance of an algorithm.
The number of comparison is only one, but also branch prediction, pipelining,
locality of reference (affects cache efficiency), etc. In practice,
we observe that when the iterator type is a pointer,
обсуждение:minmax_element
is only a tad slower than
Разработчик:min_element, and is even faster
than
Оригинальное название: First_min_last_max_element! This is even more true
for slower iterators (list<>::iterator or
map<>iterator
for instance). The following experiments were conducted on a Pentium III
500 Mhz running Linux and compiled with g++, version 2.95.2, flags -O3.
In the tables, we use different distributions: идентичный means that
all the elements are identical, 2-значный means that we replace the
second half of the identical elements by a distinct element, increasing
means that all the elements are distinct and in increasing order, decreasing
is the reverse, and random is produced by random_shuffle.
The program that created these tables is included in the distribution,
under minmax_timer.cpp
vector<int>::iterator
идентичный
2-значный
возрастать
уменьшаться
Случайность
Разработчик:min_element
23.26M/с
23.26M/с
23.15М/с
22.94M/s
22.94M/s
Разработчик:max_element
23.26M/с
23.26M/с
23.15М/с
22.94M/s
22.62M/с
Оригинальное название: First_min_last_max_element
23.15М/с
23.04M/s
23.04M/s
22.94M/s
22.83M/с
Оригинальное название: First_min_last_max_element
23.26M/с
23.26M/с
23.26M/с
22.83M/с
16.23M/s
Оригинальное название: First_min_last_max_element
23.15М/с
23.26M/с
23.15М/с
23.04M/s
22.93M/с
Оригинальное название: First_min_last_max_element
23.26M/с
23.15М/с
23.15М/с
22.94M/s
16.18M/s
обсуждение:minmax_element
21,83M/с
21,83M/с
21,83M/с
21.55M/с
17.79M/с
Оригинальное название: First_min_last_max_element
18.52M/с
18.38M/s
18.38M/s
18.94M/s
16.29M/s
Исполнитель:last_min_first_max_element
20.08M/с
20.83M/с
20,75 М/с
19.76М/с
15.87M/с
Оригинальное название: First_min_last_max_element
18.66M/с
19.69M/s
19.69M/s
19.23M/s
15.77M/с
Number of elements per second for standard vector
container iterators
list<int>::iterator
идентичный
2-значный
возрастать
уменьшаться
Случайность
Разработчик:min_element
5.8М/с
5.8М/с
5.80М/с
5.73M/с
5.73M/с
Разработчик:max_element
5.81M/с
5.81M/с
5.78M/с
5.73M/с
5,75 М/с
Оригинальное название: First_min_last_max_element
5.81M/с
5.81M/с
5.79M/с
5,75 М/с
5.73M/с
Оригинальное название: First_min_last_max_element
5.81M/с
5.80М/с
5.79M/с
5.73M/с
5.03M/с
Оригинальное название: First_min_last_max_element
5.81M/с
5.80М/с
5.78M/с
5,74 М/с
5.73M/с
Оригинальное название: First_min_last_max_element
5.81M/с
5.80М/с
5.79M/с
5.73M/с
5.07M/s
обсуждение:minmax_element
5.68M/с
5.80М/с
5.66M/с
5,74 М/с
5.30М/с
Оригинальное название: First_min_last_max_element
5.79M/с
5.81M/с
5.78M/с
5.73M/с
5.04M/s
Исполнитель:last_min_first_max_element
5.69M/с
5.79M/с
5.69M/с
5.73M/с
4,84 М/с
Оригинальное название: First_min_last_max_element
5.61M/с
5.79M/с
5.64M/s
5,74 М/с
4,75 М/с
Runtimes for standard list container iterators
multiset<int>::iterator
идентичный
2-значный
возрастать
уменьшаться
Случайность
Разработчик:min_element
4,03 М/с
4,04 М/с
4,02 М/с
4,04 М/с
2.97M/с
Источник:max_element3.007M
4,02 М/с
4,02 М/с
4,01 М/с
4,02 М/с
2.96М/с
Оригинальное название: First_min_last_max_element
4,01 М/с
4,04 М/с
4,03 М/с
4,04 М/с
3,01 М/с
Оригинальное название: First_min_last_max_element
4,03 М/с
4,04 М/с
4,04 М/с
4,04 М/с
3.00M/s
Оригинальное название: First_min_last_max_element
4,04 М/с
4,04 М/с
4,04 М/с
4,06 М/с
3,01 М/с
Оригинальное название: First_min_last_max_element
4,04 М/с
4,04 М/с
4,03 М/с
4,04 М/с
3.00M/s
обсуждение:minmax_element
3.98M/с
3.99М/с
3.98M/с
3.99М/с
3.00M/s
Оригинальное название: First_min_last_max_element
3.99М/с
3.98M/с
3.97M/с
3.99М/с
2.99М/с
Исполнитель:last_min_first_max_element
3.97M/с
3.98M/с
3.96M/с
3.98M/с
3.00M/s
Оригинальное название: First_min_last_max_element
4.00M/s
4.00M/s
4.00M/s
4,02 М/с
2.97M/с
Runtimes for standard set/multiset container iterators
Статья Boost minmax library раздела может быть полезна для разработчиков на c++ и boost.
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.