2017-01-02 1 views
-7

하나가 하나 ++ 빠른 C에있는 같은 길이의 벡터에 대한 최대 및 최소 값을 찾기 위해 두 가지 방법을 다음과 같은 사항에 대해 알고 있나요의 최소값 시간 복잡도 O :최대 값과 C++

1.

std::sort(vector.begin(),vector.end()); 
vector.erase(std::unique(vector.begin(),vector.end()),vector.end()); 
min=vector.front(); 
max=vector.back(); 
2.

max=*max_element(vector.begin(),vector.end()); 
min=*min_element(vector.begin(),vector.end()); 
+2

직접 해결할 수있는 * 노력 *을 보여줄 수 있습니까? –

+1

복잡성으로 인해 문서를 읽으십시오. * "무엇이 더 빠릅니까"*, 측정하십시오. 또한,'std :: minmax_element'를 사용하십시오. –

+2

모든 알고리즘에는 문서화 된 복잡성이 있습니다. min과 max를 찾기 위해 벡터를 정렬 한 후에'erase()'를 사용할 필요가 없습니다. – Peter

답변

-2

정렬 (퀵)는 평균 O(n*log2(n)) 복잡도를 갖는다.

배열의 최소 또는 최대 값을 찾는 데는 단지 O(n) 복잡합니다.

따라서 두 번째는 훨씬 빠릅니다.

+1

* "따라서 두 번째는 훨씬 빠릅니다."*이 것은 사실이 아닙니다. 모든 복잡성 비교는 두 번째가 모든 'n> N'에 대해 더 빠르도록 'N'이 있음을 알려줍니다. 'n

+0

Quicksort는 O (nlogn)가 아니지만 나쁜 피벗이 주어진 경우 O (n^2)로 변합니다. 안정적인 정렬을 위해 힙 정렬이나 다른 종류를 사용하십시오. – ChaoSXDemon

+0

@ChaoSXDemon : 그래서 나는 "평균적으로"썼다. 힙 정렬은 복잡성을 보장합니다. 반면에 단일 작업은 더 복잡하므로 quicksort가 일반적으로 선호되고 평균적으로 이깁니다. 그리고 네, 맞습니다, Baum Mit Augen, 작은 숫자의 경우 숫자가 다를 수 있습니다. sort() 함수는 일반적으로 요소 수가 적은 경우 간단한 비교를 선호하지 않습니다. –

관련 문제