資料結構基礎 演算法複雜度分析(二) 典例篇

2021-07-04 07:04:03 字數 2712 閱讀 1084

示例**(1)

decimal factorial(int n)

【分析】

階乘(factorial),給定規模 n,演算法基本步驟執行的數量為 n,所以演算法複雜度為 o(n)。

示例**(2)

int findmaxelement(int array)

}return max;

}

【分析】

這裡,n 為陣列 array 的大小,則最壞情況下需要比較 n 次以得到最大值,所以演算法複雜度為 o(n)。

示例**(3)

long findinversions(int array)

【分析】

這裡,n 為陣列 array 的大小,則基本步驟的執行數量約為 n*(n-1)/2,所以演算法複雜度為 o(n2)。

示例**(4)

long summn(int n, int m)

【分析】

給定規模 n 和 m,則基本步驟的執行數量為 n*m,所以演算法複雜度為 o(n^2)。

示例**(5)

decimal sum3(int n)

【分析】

這裡,給定規模 n,則基本步驟的執行數量約為 n*n*n ,所以演算法複雜度為 o(n^3)。

示例**(6)

decimal calculation(int n)

【分析】

這裡,給定規模 n,則基本步驟的執行數量為 2n,所以演算法複雜度為 o(2n)。

示例**(7)

斐波那契數列:

fib(0) = 0

fib(1) = 1

fib(n) = fib(n-1) + fib(n-2)

f() = 0, 1, 1, 2, 3, 5, 8, 13, 21, 34 ...

int fibonacci(int n)

【分析】

這裡,給定規模 n,計算 fib(n) 所需的時間為計算 fib(n-1) 的時間和計算 fib(n-2) 的時間的和。

t(n<=1) = o(1)

t(n) = t(n-1) + t(n-2) + o(1)

fib(5)   

/             \     

fib(4)         fib(3)   

/      \           /      \

fib(3)  fib(2)  fib(2)   fib(1)

/     \    /    \     /    \      /    \

通過使用遞迴樹的結構描述可知演算法複雜度為 o(2^n)。

示例**(8)

int fibonacci(int n)

return f[n];

}}

【分析】

同樣是斐波那契數列,我們使用陣列 f 來儲存計算結果,這樣演算法複雜度優化為 o(n)。

示例**(9)

int fibonacci(int n)

return f;

}}

【分析】

同樣是斐波那契數列,由於實際只有前兩個計算結果有用,我們可以使用中間變數來儲存,這樣就不用建立陣列以節省空間。同樣演算法複雜度優化為 o(n)。

示例**(10)

static int fibonacci(int n)

, };

power(f, n - 1);

return f[0, 0];

}static void power(int[,] f, int n)

, };

power(f, n / 2);

multiply(f, f);

if (n % 2 != 0)

multiply(f, m);

}static void multiply(int[,] f, int[,] m)

【分析】

通過使用矩陣乘方的演算法來優化斐波那契數列演算法。優化之後演算法複雜度為o(log2(n))。

示例**(11)

更簡潔的**如下。

static double fibonacci(int n)

示例**(12)

private static void insertionsortinplace(int unsorted)

unsorted[j] = key;}}

}

【分析】

插入排序的基本操作就是將乙個資料插入到已經排好序的有序資料中,從而得到乙個新的有序資料。演算法適用於少量資料的排序,時間複雜度為 o(n^2)。

資料結構 演算法基礎 複雜度分析

演示 def func a 1 b 2 c 3if name main func 時間複雜度?執行次數上述 他的複雜度 假設每次執行都花了 unit t 時間,上述 func 執行了3次,花費 3 unit t 的時間。演示2 演示2 deffunc2 n sum 0 unit t for i in...

資料結構 演算法基礎 複雜度分析2

最好 最壞 平均 均攤時間複雜度 最好 最壞時間複雜度 示例1 示例1 deffind x,list for item in list if item x pos list index x return pos上述 時間複雜度 等於len list n o n 改寫 deffind2 x,list ...

資料結構(二) 演算法複雜度

演算法中執行次數最多的那條語句就是基本語句,測定執行時間就是計算基本語句的執行次數 可以忽略加法常數 與最高此項相乘的常數並不重要 最高次項的指數越大,增長越快 判斷乙個演算法執行效率時,函式中的常數和其他次要項常常可以忽略,更應該關注主項 最高端項 的階數 某個演算法,隨著n增大,它會越來越優於另...