Мне необходимо оценить сложность данной функции(код ниже), т.к. сложность vector::erase
- O(n), то я получаю в худшем случае O(n3), где n - это implicants.size()
.
Правильна ли полученная оценка?
for (size_t i = 0; i < implicants.size() - 1; ++i)
for (size_t j = implicants.size() - 1; j > i; --j)
if (implicants[j].bits == implicants[i].bits)
implicants.erase(implicants.begin() + j);
Я бы сказал, что да, вы оценили верно...
Но если вам не критично расположение элементов в векторе, я бы предложил отсортировать его по полю bits
, вызвать unique
с соответствующим предикатом, а потом - erase
. Самая высокая сложность - у сортировки, так вы получите O(n*log(n))
.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Как можно реализовать перегрузку операции >> так, чтоб выражение a>>b>>c (a,b,c - объекты одного класса) работало следующим образом:
Как можно сдвинуть часть текста? Например, из слова "привет" сделать "при вет"Без memmove
создаю Handle hfileИспользую FindFirstFile,и проверяю с hFile!=INVALID_HANDLE_VALUE