C++ 寻找摊销时间复杂度
因此,我为一个向量类编写了一个函数C++ 寻找摊销时间复杂度,c++,time,amortized-analysis,C++,Time,Amortized Analysis,因此,我为一个向量类编写了一个函数push_back,现在我正在尝试计算摊销时间复杂度。我对编程的理论方面还很陌生,所以如果有人能带我走过这段路,那就太棒了 这是我的职责: void Vector<T>::push_back(const T &e) { if(vsize + 1 > capacity) allocate_new(); array[vsize] = e; vsize++; } void Vector<T>
push_back
,现在我正在尝试计算摊销时间复杂度。我对编程的理论方面还很陌生,所以如果有人能带我走过这段路,那就太棒了
这是我的职责:
void Vector<T>::push_back(const T &e) {
if(vsize + 1 > capacity)
allocate_new();
array[vsize] = e;
vsize++;
}
void Vector<T>::allocate_new() {
capacity = vsize * 4;
T* tmp = new T[capacity];
for(int i = 0; i < vsize; i++)
tmp[i] = array[i];
delete[] array;
array = tmp;
}
在数组中插入
N
元素时,数组必须按4的每一次幂调整大小。调整大小为4^i
所需的时间量为O(4^i)
。同样,最大调整大小在sizeN
时完成。因此,采取的总金额为:
T = 1 + 4 + 16 + ... + 4^x
在
4^x中,简单的答案是,随着存储空间的增大,拷贝所需的时间是原来的4倍,但拷贝的频率仅为原来的1/4。四分之一和四分之一取消,因此最终得到(摊销)恒定时间
忽略您选择的精确因子,从长期来看,您得到O(N*1/N)=O(1)->摊销固定时间。这可能更适合。是的,回答如下: