例項**:
//全域性變數,大小為10的陣列 array,長度 len,下標 i。
int array = new int[10];
int len = 10;
int i = 0;
//往陣列中新增乙個元素
void add(int element)
// new_array複製給 array,array現在大小就是2倍 len
array = new_array;
len = 2 * len;
}//將 element 放到下標為i的位置, 下標 i 加一
array[i] = element;
++i;
}
以上**中, 10次呼叫以後,陣列長度變為20,緊接著執行一輪10次拷貝操作
再10次呼叫之後,陣列長度變為40,緊接著執行一輪20次拷貝操作
再20次呼叫之後,陣列長度變為80,緊接著執行一輪40次拷貝操作
再40次呼叫之後,陣列長度變為160,緊接著執行一輪80次拷貝操作
再80次呼叫之後,陣列長度變為320,緊接著執行一輪160次拷貝操作
雖然每次陣列變化的長度都不一樣,都是以兩倍的形式擴張。
但是,以上過程可以抽象如下:
不考慮第一次特殊情況,每次陣列倍增之前,函式都會被呼叫n/2(o(1))次,倍增時執行一輪n次(o(n))拷貝操作。
根據以上分析:
最好時間複雜度,此時函式呼叫中未趕上陣列倍增,每次時間複雜度都是o(1)(因為此時每次執行時間、執行步數都是固定的)。
最壞時間複雜度,此時函式呼叫對應趕上陣列倍增,此時時間複雜度是o(n)(除了拷貝,其他操作都是固定步數,複雜度為o(1),根據加法準則,時間複雜度按最高標準計算)
平均時間複雜度:
計算平均執行步數:
以上,每次陣列倍增前,都要被呼叫
均攤時間複雜度:
均攤時間複雜度就是一種特殊的平均時間複雜度。
攤還分析:
還以上述**為例:(n/2-1)次o(1),1次 o(n),均攤下來,常量級的時間複雜度,最終均攤時間複雜度就是o(1)
黑馬 Python資料結構與演算法系列課程
目錄 1 01 演算法引入.mp4 1 05 執行時間測量模組timeit.mp4 1 06 python列表型別不同操作的時間效率.mp4 1 04 常見時間複雜度與大小關係.mp4 1 08 資料結構引入.mp4 1 03 最壞時間複雜度與計算規則.mp4 1 07 python列表與字典操作的...
資料結構與演算法系列二(複雜度分析)
有人說,資料結構與演算法,計算機網路,與作業系統都一樣,脫離日常開發,除了面試這輩子可能都用不到呀!有人說,我是做業務開發的,只要熟練api,熟練框架,熟練各種中介軟體,寫的 不也能 飛 起來嗎?於是問題來了 為什麼還要學習資料結構與演算法呢?理由一 面試的時候,千萬不要被資料結構與演算法拖了後腿 ...
資料結構與演算法系列 時間 空間複雜度
資料結構和演算法本質就是幫我們用最快的時間和最少的空間來執行我們的 所以,執行效率是衡量乙個演算法的非常重要的指標。那如何來計算你的演算法 的執行效率呢?這就需要時間 空間複雜度來分析了。有人可能會說,我把 執行一遍,然後通過統計 監控就能知道執行的時間和需要的記憶體大小。幹嘛還需要時間 空間複雜度...