Мне необходимо оценить сложность данной функции(код ниже), т.к. сложность 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)).
Как развивать веб-проекты в 2026 году: технологии, контент E-E-A-T и факторы доверия
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники