Algorithm 这个代码片段的时间复杂度是多少?

Algorithm 这个代码片段的时间复杂度是多少?,algorithm,time,big-o,complexity-theory,analysis,Algorithm,Time,Big O,Complexity Theory,Analysis,这个算法的时间复杂度是多少?为什么?我在看它,希望我没有错,但我认为它的复杂性是线性的,因为存在一个for循环,我认为循环之外的每一个其他操作都是一个常数时间操作。它打开了,好的。根据new的实现情况,如果清除mem或其他内容,这也可能是开启的,而不是常量,但这仍然使整个过程开启。复杂性开启。但是,请注意,大多数堆栈实现将数组的大小增加一倍,而不是增加固定的数量,以实现摊销的恒定时间。请参阅以进行讨论。您是正确的,只是代码中没有任何n。时间复杂度是OCAP。循环中的大小和分配都可能有任何复杂度,

这个算法的时间复杂度是多少?为什么?我在看它,希望我没有错,但我认为它的复杂性是线性的,因为存在一个for循环,我认为循环之外的每一个其他操作都是一个常数时间操作。

它打开了,好的。根据new的实现情况,如果清除mem或其他内容,这也可能是开启的,而不是常量,但这仍然使整个过程开启。

复杂性开启。但是,请注意,大多数堆栈实现将数组的大小增加一倍,而不是增加固定的数量,以实现摊销的恒定时间。请参阅以进行讨论。

您是正确的,只是代码中没有任何n。时间复杂度是OCAP。循环中的大小和分配都可能有任何复杂度,如果没有更多信息,问题就无法回答。此外,你可能想考虑摊销成本:调用函数的平均成本,如果你称之为N次。这样,您将看到CAP+100平均成本On和CAP*2平均成本O1之间的差异,假设丢失的代码都是O1。
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;
    }