void push(const Type& e){
if (size() == CAP) {
CAP = CAP + 100;
Type * Snew = new Type[CAP];
for (int i = 0; i < CAP - 100; i++){
Snew[i] = S[i];
}
delete[] S;
S = Snew;
}
TOP++;
S[TOP] = e;
}
Какова временная сложность этого алгоритма и почему? Я смотрю на это, надеясь, что я не ошибаюсь, но я думаю, что он имеет сложность линейного времени (O (n)) из-за наличия одного цикла для цикла, и я думаю, что любая другая операция за пределами цикла является постоянное время работы.Какова временная сложность этого фрагмента кода?
Вы правы, за исключением того факта, что у вас нет никакого 'n' в вашем коде. Сложность времени - «O (CAP)». –
Оба размера() и назначение внутри цикла могут иметь любую сложность, что делает вопрос неопровержимым без дополнительной информации. Кроме того, вы, вероятно, хотите рассмотреть амортизированную стоимость: средняя стоимость вызова функции, если вы называете ее n раз. Таким образом, вы увидите разницу между CAP + 100 (средняя стоимость O (n)) и CAP * 2 (средняя стоимость O (1)), если недостающим кодом является все O (1). –