給出乙個確定在n個元素的任何排列中逆序對數量的演算法,最壞情況需要o(nlgn)時間
#include
#include
#include
int calculate(int *num, int l, int r)
}return total;
}int main() ;
int total = calculate(num, 0, 4);
printf("total: %d\n", total);
return
0;}
看到這個題的時候這個方法在腦海一閃而過,以為這個時間複雜度至少是o(n^2)的,之後在白板上畫了畫才發現居然是(n + 1/2*n)*lgn的。 演算法導論 時間複雜度分析
非遞迴演算法時間複雜度分析較為簡單,通常是計算演算法中基本語句的執行次數,一般都是乙個關於問題規模n的表示式。例1 如果演算法的執行時間不隨著問題規模n的增加而增長,它的基本語句執行的次數是固定的,總的時間由乙個常數來限界。此類演算法的時間複雜度是o 1 例2 當有若干個迴圈語句時,時間複雜度是由巢...
O n lgn 時間複雜度的逆序對統計演算法實現思想
逆序對定義 設a 1.n 是乙個包含n個不同數的陣列。如果在ia j 則 i,j 就稱為a中的乙個逆序對 inversion 現給出乙個演算法,其可以用o n lgn 的最壞情況執行時間,確定n個元素的任何排列中逆序對的數量。簡單的演算法實現思想 我們可以單純的通過從前往後的逐一比對來確定逆序對的數...
演算法導論 第24章 Dijkstra演算法
dikstra演算法解決的是有向圖上單源最短路徑問題 無向圖可以看成有相反的兩條有向邊 且要求邊的權重都是非負值 如果有負權,已經確定的最短路徑到v點有可能會被右面發現的點有條負權值的邊到v點而導致v點的最短路徑不成立 演算法導論用了很多引理,性質來證明dijstra演算法的正確性,這裡不說了,也表...