hashmap时间和空间复杂度_Python算法 00--时间复杂度和空间复杂度
通常,我們衡量一個算法的優劣,從「 時間復雜度 」和「 空間復雜度 」兩個維度去考量
● 時間復雜度
執行當前算法所消耗的時間
● 空間復雜度
執行當前算法需要占用多少內存空間
「 時間復雜度 」
我們先來看一個例子:
圖1
我們通過打印程序的執行時間來看算法的「時間復雜度 」。這種栗子存在弊端,受運行環境的影響,在性能高的機器上跑出來的結果與在性能低的機器上跑的結果相差會很大。
時間復雜度表示方法:「 大 O 符號表示法 」
公式:T [n] = O (f (n))
f (n) 表示每行代碼執行次數之和,而 O 表示正比例關系,這個公式又叫“算法的漸進時間復雜度”。
通過「 大 O 符號表示法 」,圖1 的時間復雜度為:O (n)
● 常數階 O (1)
圖2
有時候在 Python 中看到存在 ++i 這種形式,這其實不是自增,只是簡單的表示正負數的正號而已。正正得正,負負得正,所以 ++i 和 --i 都是 i 。(有Java基礎的老鐵注意啦)
無論代碼執行了多少行,只要是沒有循環等復雜結構,那這個代碼的時間復雜度就都是 O (1)
圖2代碼在執行的時候,它消耗的時候并不隨著某個變量的增長而增長,那么無論這類代碼有多長,即使有幾萬幾十萬行,都可以用 O (1) 來表示它的時間復雜度。
● 線性階 O (n)
從最開始圖1 的栗子,for 循環里面的代碼會執行 n 遍,因此它消耗的時間是隨著 n 的變化而變化的,因此這類代碼都可以用 O (n) 來表示它的時間復雜度。
● 平方階 O (n2)
如果把 O (n) 的代碼再嵌套循環一遍,它的時間復雜度就是 O (n2) 了。
● 對數階 O (logN)
① 先回顧哈 log
② 舉個栗子
圖3
從圖3代碼中,變量i從1開始, while 循環里面,每次都將 i 乘以 2,當 i 的值大于 n 時,推出循環
也就是說當循環 log(2)(n) 次以后,這個代碼就結束了。因此這個代碼的時間復雜度為:O(logN)
● 線性對數階 O (nlogN)
線性對數階 O (nlogN) 其實將時間復雜度為 O (logn) 的代碼循環 N 遍的話,那么它的時間復雜度就是 n * O (logN),也就是了 O (nlogN)。
「 空間復雜度 」
● 常數階 O (1)
如果算法執行所需要的臨時空間不隨著某個變量 n 的大小而變化,即此算法空間復雜度為一個常量,可表示為 O (1)
空間復雜度 S (n) = O (1)
● 線性階 O (n)
第 3 行新建一個數組出來,這個數據占用的大小隨著 for 循環的增加而增加。所以
S (n) = O (n)
● 平方階 O (n2)
二維數組,雙層 for 循環生成。空間復雜度 S (n) = O (n2)
小憩一下
只有程序猿才看的懂的圖
總結
以上是生活随笔為你收集整理的hashmap时间和空间复杂度_Python算法 00--时间复杂度和空间复杂度的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: react组件放在数组中_为什么要在函数
- 下一篇: centos7不能安装mysql数据库_