2016-06-25 3 views
1

minmax_element는 일반적으로이 구현됩니까? N = std :: distance (first, last) 인 경우 시간 복잡도가 최대 (floor (3/2 (N-1)), 0) 개의 술어 응용 프로그램을 볼 수 있습니다.minmax_element의 복잡도

여기서 minmax_element는 반복 될 수있는 요소 범위 (read : containers)에서 가장 작은 요소와 가장 큰 요소를 찾도록합니다. 예를 들어 :

#include <algorithm> 
#include <vector> 
using namespace std; 

void Algorithm_minmax_element() 
{ 
    double x = 2, y = 1, z = 0; 
    vector<double> v = { 2, 1, 0, -1 }; 

    auto result1 = minmax(x, y); 
    // result1 == pair(1, 2) 
    auto result2 = minmax({ x, y, z }); 
    // result2 == pair(0, 2) 
    auto result3 = minmax_element(v.begin(), v.end()); 
    // result3 == pair(&v[3] = -1, &v[0] = 2) 
} 

답변

1

A reference implementation is given in cppreference.com.

각 요소에 대해 std :: min 및 std :: max를 사용하려면 요소 당 두 번의 비교 또는 총 두 번의 비교가 필요합니다. std :: min_element와 std :: max_element도 동일합니다.

참조 구현에는 총 3n/2의 비교 만 필요합니다. 원칙은 간단합니다. 각 단계에서 2 가지 요소를 처리합니다. 어느 것이 더 작은지를 결정하기 위해 하나의 비교가 필요하고, 가장 작은 것을 비교하기위한 하나의 비교, 가장 큰 것을 비교하는 하나의 비교가 필요합니다. 각 2 요소에 대해 총 3 개의 비교.