剛學演算法的小夥伴可能會有乙個疑問,什麼是時間複雜度?時間複雜度怎麼估算?
一般來說時間複雜度是確定演算法流程的總算子量與樣本數量之間的表示式關係,並且只看表示式最高端項的部分
為什麼只看最高端項?
100w * n^3 + 200w * n^2 + 300w
當n趨近於無窮大的時候,真正起到決定性作用的就是n^3,
n^2以及其它常數項的影響都可以忽略掉了
比如我們自己做一件事情,估算時間的時候可能會說:完成這件事需要一周。
但是沒有人說完成這件事需要一周零五小時
所以生活中我們估算乙個時間的時候就已經將影響較小的因素給忽略掉了
如果兩個演算法階數一樣,就需要考慮常數項時間了
如果是o(n^ 3) 和 o(n^2),那麼沒有可比性
但是如果都是o(n^2)就要看常數項了,有的邏輯實現複雜,有的邏輯實現簡單
具體測試就是直接用大樣本測試,看看實際執行時間
不要自己分析,分析這個要求的功力太高
比如加減運算肯定要比乘除效率高
比如位運算肯定比加減運算效率高(與、或、異或、左移、右移)
排名從好到差:
o(1)
o(logn)
o(n)
o(n*logn)
o(n^2) o(n^3) … o(n^k)
o(2^n) o(3^n) … o(k^n)
o(n!)
如果乙個操作的執行時間不以具體樣本量為轉移,每次執行時間都是固定時間,那麼稱這樣的操作為常數時間的操作
常見的常數時間的操作:
常見的算術運算(+、-、*、/、% 等)
常見的位運算(>>、>>>、<<、|、&、^等)
賦值、比較、自增、自減操作等
陣列定址操作
執行時間固定的操作都是常數時間的操作。
反之,執行時間不固定的操作,都不是常數時間的操作。
額外空間是與功能無關,為了支援流程,自己開闢的額外空間
什麼意思?打個比方:
介面傳遞乙個陣列,然後通過這個陣列計算某個值
如果計算過程中自己申請了某些變數,並且這些變數是和陣列長度沒有關係的
那麼這個時候額外空間複雜度就是o(1)
如果計算過程中要建立乙個額外的陣列,那麼這個時候額外空間複雜度就是o(n)
所以總結一下:
作為輸入引數的空間,不算額外空間。
作為輸出結果的空間,也不算額外空間。
因為這些都是必要的、和現實目標有關的。所以都不算。
但除此之外,你的流程如果還需要開闢空間才能讓你的流程繼續下去。這部分空間就是額外空間。
postman第一節 介紹
postman是個什麼東東呢?postman的官網上這麼介紹它 modern software is built on apis,postman helps you develop apis faster 看得出來,它是乙個專門測試 api 的工具,如果你正在進行 api 相關的開發,那這篇文章就是...
第一節綜述
shader是什麼?shader是著色器。渲染流水線的概念?渲染流水線的工作任務在於由乙個三維場景出發,生成一張二維影象。渲染流程分為3個階段 應用階段 幾何階段 光柵化階段。1 應用階段 由cpu負責實現,由開發者主導。最重要的輸出是渲染所需的幾何資訊,即渲染圖元。這些渲染圖元傳遞給幾何階段。2 ...
第一節 熱機
一.熱機 內燃機是熱機的一種,以汽油或柴油為燃料 二.汽油機 練1.三.柴油機 練2.從能量轉化的角度看,一台四衝程內燃機在乙個迴圈中 1 哪個衝程存在著化學能轉化為內能的過程?2 哪個衝程存在著內能轉化為機械能的過程?3 哪個衝程具有很明顯的機械能轉化為內能的過程?練3.關於單缸四衝程內燃機,下列...