Назад к вопросамКакова временная сложность
JuniorТеорияОчень часто
Какова временная сложность has_duplicate в худшем случае для вектора из n элементов?
#include <vector>
bool has_duplicate(const std::vector<int>& v) {
for (std::size_t i = 0; i < v.size(); ++i) {
for (std::size_t j = i + 1; j < v.size(); ++j) {
if (v[i] == v[j]) {
return true;
}
}
}
return false;
}O(n²)
- Ждать
O(n): циклы вложены, а не идут друг за другом, поэтому их числа шагов перемножаются, а не складываются. - Ждать
O(n log n), раз внутренний цикл короче: всего он выполняется n(n−1)/2 раз, а без постоянного множителя 1/2 остаётсяO(n²).
- Как с помощью
std::setсделатьhas_duplicateза O(n log n)? - Сколько дополнительной памяти использует
has_duplicateв зависимости от n?