Оценка сложности функции

299
10 декабря 2017, 12:04

Мне необходимо оценить сложность данной функции(код ниже), т.к. сложность 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);
Answer 1

Я бы сказал, что да, вы оценили верно...

Но если вам не критично расположение элементов в векторе, я бы предложил отсортировать его по полю bits, вызвать unique с соответствующим предикатом, а потом - erase. Самая высокая сложность - у сортировки, так вы получите O(n*log(n)).

READ ALSO
Перегрузка операции &ldquo;&gt;&gt;&rdquo; в с++

Перегрузка операции “>>” в с++

Как можно реализовать перегрузку операции >> так, чтоб выражение a>>b>>c (a,b,c - объекты одного класса) работало следующим образом:

214
Сдвиг части текста С++

Сдвиг части текста С++

Как можно сдвинуть часть текста? Например, из слова "привет" сделать "при вет"Без memmove

220
Почему minGW компилятор не открывает Handle файл?

Почему minGW компилятор не открывает Handle файл?

создаю Handle hfileИспользую FindFirstFile,и проверяю с hFile!=INVALID_HANDLE_VALUE

202