最近加入了個重溫演算法的群,60天將常用的資料結構和演算法過一遍,要求每週至少打卡3次。在時間允許的情況下,每天晚上看上1到2個小時,鞏固演算法還是很不錯的。在重溫的同時,我將筆記整理到到此。
決定演算法快慢的因素有很多,但是所有的因素可以分為兩類。第一類是不隨資料量變化的因素,第二類是隨著數量變化的。
資料結構和演算法的目的是減少資源占用和響應時間,提高執行效率。
因此,需要有統計資源占用和響應時間的考量指標。於是,空間複雜度和時間複雜度就誕生了。
時間複雜度
t(n)=o(f(n))
1.執行時間 t(n) 與每行**的執行次數 n 成正比;
2.n 表示資料規模的大小;
3.f(n) 表示每行**執行的次數總和;
4.o表示**的執行時間 t(n) 與 f(n) 表示式成正比
分析方法:
1. 只關注迴圈執行次數最多的一段**
2. 加法法則:總複雜度等於量級最大的那段**的複雜度。示例:
如果 t1(n)=o(f(n)),t2(n)=o(g(n));
那麼 t(n)=t1(n)+t2(n)=max(o(f(n)), o(g(n))) =o(max(f(n), g(n))).
3. 乘法法則:巢狀**的複雜度等於巢狀內外**複雜度的乘積。示例:
t(n) = t1(n) * t2(n) = o(n*n) = o(n2)
空間複雜度分析
表示演算法的儲存空間與資料規模之間的增長關係
資料結構和演算法的複雜度都跑不出這幾個
o(logn):
o(n):最常見的一維陣列遍歷,鍊錶遍歷
o(nlogn):歸併,快排
o(n2):冒泡,插入
Day1 複雜度分析
問 複雜度分析要解決什麼問題?答 分析 統計演算法的執行效率和資源的消耗 問 通過 跑一遍,統計 監控,得到演算法執行的時間和占用的記憶體大小的侷限性 答 1.測試結果依賴測試環境 2.受資料規模的影響較大 問 什麼是大o複雜度表示法?答 表示 執行時間隨著資料規模增長的趨勢,也稱漸進時間複雜度 問...
演算法複雜度分析 1
空間複雜度 複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。如果存在常數c和n0使得當n n0時t n cf n 則記為t n o f n 例如 雖然對於較小的n值1000n要比n2大,但n2以更快地速度增長,因此n2最終將是更大的函式。在這種情況下,n 1...
複雜度分析 上
1什麼是複雜度分析?分別用時間複雜度 執行的快慢 和空間複雜度 記憶體的消耗 兩個概念來描述效能問題,二者統稱為複雜度.複雜度就是用來分析演算法執行效率與資料規模之間增長關係。2.為什麼要進行複雜度分析?1.和效能測試相比,複雜度分析有不依賴執行環境 成本低 效率高 易操作 指導性強的特點。2.掌握...