Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 寻找摊销时间复杂度_C++_Time_Amortized Analysis - Fatal编程技术网

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)
。同样,最大调整大小在size
N
时完成。因此,采取的总金额为:

T = 1 + 4 + 16 + ... + 4^x

4^x中,简单的答案是,随着存储空间的增大,拷贝所需的时间是原来的4倍,但拷贝的频率仅为原来的1/4。四分之一和四分之一取消,因此最终得到(摊销)恒定时间


忽略您选择的精确因子,从长期来看,您得到O(N*1/N)=O(1)->摊销固定时间。

这可能更适合。是的,回答如下: