評估算法優劣的核心指標是什么?


評估算法優劣的核心指標是什么?

時間復雜度(流程決定)

額外空間復雜度(流程決定)

常數項時間(實現細節決定)

什么是時間復雜度?時間復雜度怎么估算?

•常數時間的操作

•確定算法流程的總操作數量與樣本數量之間的表達式關系

•只看表達式最高階項的部分

常見的常數時間的操作

Misplaced &

總之,執行時間固定的操作都是常數時間的操作。

反之,執行時間不固定的操作,都不是常數時間的操作

選擇排序

過程:

arr[0~N-1]范圍上,找到最小值所在的位置,然后把最小值交換到0位置。

arr[1~N-1]范圍上,找到最小值所在的位置,然后把最小值交換到1位置。

arr[2~N-1]范圍上,找到最小值所在的位置,然后把最小值交換到2位置。

arr[N-1~N-1]范圍上,找到最小值位置,然后把最小值交換到N-1位置。

估算:

很明顯,如果arr長度為N,每一步常數操作的數量,如等差數列一般

所以,總的常數操作數量 = a(N^2) + bN + c (a、b、c都是常數)

所以選擇排序的時間復雜度為O(N^2)。

冒泡排序

過程:

在arr[0~N-1]范圍上:

arr[0]和arr[1],誰大誰來到1位置;arr[1]和arr[2],誰大誰來到2位置…arr[N-2]和arr[N-1],誰大誰來到N-1位置

在arr[0~N-2]范圍上,重復上面的過程,但最后一步是arr[N-3]和arr[N-2],誰大誰來到N-2位置

在arr[0~N-3]范圍上,重復上面的過程,但最后一步是arr[N-4]和arr[N-3],誰大誰來到N-3位置

最后在arr[0~1]范圍上,重復上面的過程,但最后一步是arr[0]和arr[1],誰大誰來到1位置

估算:

很明顯,如果arr長度為N,每一步常數操作的數量,依然如等差數列一般

所以,總的常數操作數量 = a(N^2) + bN + c (a、b、c都是常數)

所以冒泡排序的時間復雜度為O(N^2)。

插入排序

過程:

想讓arr[0~0]上有序,這個范圍只有一個數,當然是有序的。

想讓arr[0~1]上有序,所以從arr[1]開始往前看,如果arr[1]<arr[0],就交換。否則什么也不做。

想讓arr[0~i]上有序,所以從arr[i]開始往前看,arr[i]這個數不停向左移動,一直移動到左邊的數字不再比自己大,停止移動。

最后一步,想讓arr[0~N-1]上有序, arr[N-1]這個數不停向左移動,一直移動到左邊的數字不再比自己大,停止移動。

估算時發現這個算法流程的復雜程度,會因為數據狀況的不同而不同。

最差的情況時間復雜度為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!)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM