這是任何ai工程師必須深入理解的概念,對於每乙個設計出來的演算法都需要從兩個方面來分析演算法複雜度:時間複雜度和空間複雜度。時間複雜度是說演算法執行時間,空間複雜度是佔據的儲存空間。一般我們使用o notation來表示,比如o(n),o(n^2)。
我們看上面**,它的時間複雜度是有乙個0到n的迴圈,有n*1的操作=o(n)。下面的例子有n/2*1個操作,所以時間複雜度為1/2*o(n)=o(n)。總體來講時間複雜度是o(n)。
空間複雜度需要看**用到了多少的記憶體空間,上面的**中唯一用到的是a,b,賦值int型別記憶體空間。可以理解為2個單位的記憶體空 間,這種複雜度我們稱為o(1),我們稱為constant space complexity。是乙個常數複雜度,不依賴n賦值變化。n是100還是10,我們都需要兩個單位記憶體空間。
我們繼續看上面**,這個有兩個for迴圈,首先時間複雜度上,我們分析總共需要多少操作:
空間複雜度上面和前面類似,我們這個**只用到了a,i,j的變數部分,三個單位的記憶體單元,而且與n無關,所以其空間複雜度也是o(1)。
這段**,當i=20時候,總共操作為2*6個,也是2 * log (n) = 2 * o (log n) = o(log n)。所以時間複雜度是o(log n)。空間複雜度是o(1),同理下面的時間複雜度是o(n*log n)
我們經常說演算法x效率高於y的時候,一般是說時間複雜度,時間複雜度大小比較:
但是實際效率上,效率是不一定的,因為複雜度概念是理想情況下,假設n足夠大的時候,一般可以保證複雜度和實際效率的關係。
簡單的演算法複雜度
常見的演算法複雜度 堆排序演算法 構建堆 有比較 交換過程,構建堆 時間複雜度 o n 完全二叉樹某個節點 i 到根節點 距離,logi 1 需要取 n 1 次堆頂記錄,重建堆的時間複雜度為 o nlogn 總的,堆排序的時間複雜度是 o nlogn 效能上遠遠好過 冒泡,簡單選擇,直接插入的o n...
演算法複雜度 時間複雜度和空間複雜度
1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時間多,哪個演算法花費的時間少就可以了。並且乙個演算法花費的時間與演算法中語句的執行次數成正比例,哪個演算法中語句執行次數...
演算法複雜度 時間複雜度和空間複雜度
演算法複雜度 時間複雜度和空間複雜度 關鍵字 演算法複雜度 時間複雜度 空間複雜度 1 時間複雜度 1 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道哪個演算法花費的時 間多,哪個演算法花費的時間少就可以...