2017-01-02 13 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

Все алгоритмы имеют документальную сложность. Не нужно использовать 'erase()' после сортировки вектора, чтобы найти min и max. – Peter

ответ

-2

Сортировка (быстрая сортировка) имеет среднюю O(n*log2(n)) сложность.

Поиск минимального или максимального значения массива имеет только O(n) сложность.

Поэтому вторая скорость намного быстрее.

+1

* «Поэтому вторая намного быстрее». * Это не так. Все сравнение сложности говорит нам, что существует некоторая «N» такая, что вторая быстрее для всех «n> N». Для 'n

+0

Быстросортировать не гарантируется O (nlogn), а вместо этого вырождается до O (n^2), учитывая плохую ось. Для стабильного сортировки используйте кучу сортировки или другие виды. – ChaoSXDemon

+0

@ChaoSXDemon: Вот почему я написал «в среднем». С другой стороны, сортировка кучи гарантировала сложность, с другой стороны, одна операция более сложная, поэтому quicksort обычно предпочтительнее и в среднем выигрывает. И да, вы правы, Baum Mit Augen, для небольших чисел номера могут быть разными, даже функции sort() обычно предпочитают несколько простых сравнений для небольшого числа элементов. –

Смежные вопросы