空間複雜度
複雜度分析是整個演算法學習的精髓,只要掌握了它,資料結構和演算法的內容基本上就掌握了一半。
如果存在常數c和n0使得當n>=n0時t(n)<=cf(n),則記為t(n)=o(f(n))。例如:雖然對於較小的n值1000n要比n2大,但n2以更快地速度增長,因此n2最終將是更大的函式。在這種情況下,n=1000是轉折點。
如上面定義所說,最後總會存在某個點n0從它以後cf(n)總是至少與t(n)一樣大,從而若忽略常數因子,則f(n)至少與t(n)一樣大。
在例子中,t(n)=1000n,f(n)=n2,n0=1000而c=1。我們也可以讓n0=10而c=100。
因此可以說,1000n=o(n2)。這種記法稱為大o標記法。
通過分析**,總結了乙個規律,所有**的執行時間 t(n) 與每行**的執行次數 n 成正比。
把這個規律總結成乙個公式。
t(n)=o(f(n))其中,t(n) 它表示**執行的時間;n 表示資料規模的大小;f(n) 表示每行**執行的次數總和。因為這是乙個公式,所以用 f(n) 來表示。公式中的 o,表示**的執行時間 t(n) 與 f(n) 表示式成正比。
大 o 時間複雜度實際上並不具體表示**真正的執行時間,而是表示**執行時間隨資料規模增長的變化趨勢,所以,也叫作漸進時間複雜度(asymptotic time complexity),簡稱時間複雜度。
當 n 很大時,公式中的低階、常量、係數三部分並不左右增長趨勢,所以都可以忽略。我們只需要記錄乙個最大量級就可以了。
只關注迴圈執行次數最多的一段**
加法法則:總複雜度等於量級最大的那段**的複雜度
t1(n)=o(f(n)),t2(n)=o(g(n))
則t(n)=t1(n)+t2(n)= o(f(n) + g(n)) = max(o(f(n)), o(g(n)))
乘法法則:巢狀**的複雜度等於巢狀內外**複雜度的乘積
t1(n)=o(f(n)),t2(n)=o(g(n))
則t(n)=t1(n)*t2(n)=o(f(n)*g(n))
多項式量級
非多項式量級只有兩個:
o(2n) 和 o(n!)
空間複雜度全稱就是漸進空間複雜度(asymptotic space complexity),表示演算法的儲存空間與資料規模之間的增長關係
複雜度分析 1
空間複雜度 時間複雜度 第一段 1 intcal int n 7return sum 8 如上所示 求 1,2,3 n 的累加和,從cpu的角度看,這段 每一行都執行著類似的操作 讀資料 運算 寫資料。我們假設每行 執行的時間是一樣的,為unit time,在這個基礎上,我們可以估算出這段 的總的執...
演算法複雜度分析
分析非遞迴演算法效率的通用方案 1.決定用哪個 哪些 引數作為輸入規模的度量 2.找出演算法的基本操作 作為一規律,它總是位於演算法的最內層迴圈中 3.檢查基本操作的執行次數是否只依賴輸入規模。如果它還依賴一些其他的特性,則最差效率 平均效率以及最優效率 如果必要 需要分別研究。4.建立乙個演算法基...
演算法複雜度分析
演算法分析的四個漸進表示法 一般,o裡的,取最小的 一般,裡的,取最大的 一般分析時間複雜度,且常考慮最壞複雜度,常用o分析 三法則 法則一 如果t1 n o f n t2 n0 o g n t1 n t2 n max o f n o g n t1 n t2 n o f n o g n 法則二 如果...