時間複雜度

2021-10-25 06:20:07 字數 1992 閱讀 1797

演算法的時間複雜度定義

在進行演算法分析時,語句總的執行次數 t(n)是關於問題規模 n 的函式,進而分

析 t(n)隨 n 的變化情況並確定 t(n)的數量級。演算法的時間複雜度,也就是演算法

的時間量度,記作:t(n}=0(f(n))。它表示隨問題規模 n 的增大,演算法執行時間

的埔長率和 f(n)的埔長率相同,稱作演算法的漸近時間複雜度,簡稱為時間複雜

度。其中 f( n)是問題規橫 n 的某個函式。

求解演算法的時間複雜度的具體步驟

⑴ 找出演算法中的基本語句;

演算法中執行次數最多的那條語句就是基本語句,通常是最內層迴圈的迴圈

體。⑵ 計算基本語句的執行次數的數量級;

只需計算基本語句執行次數的數量級,這就意味著只要保證基本語句執行次

數的函式中的最高次冪正確即可,可以忽略所有低次冪和最高次冪的係數。這樣

能夠簡化演算法分析,並且使注意力集中在最重要的一點上:增長率。

⑶ 用大ο記號表示演算法的時間效能。

將基本語句執行次數的數量級放入大ο記號中。

大 o 的推導方法:

1.用常數 1 取代執行時間中的所有加法常數。

2.在修改後的執行次數函式中,只保留最髙階項。

3.如果最高端項存在且不是 1,則去除與這個項相乘的常數。

簡單的說,就是保留求出次數的最高次冪,並且把係數去掉。 如 t(n)=2n^2+n+1

=o(n^2)

例 1

public

static

void

main

(string[

] args)

}system.out.

println

(sum);/

1}

t(n) = 1+n+1+n+2n2+1=2n2+2n+3

用 1 取代所有執行時間中的加法常數

t(n) =2n^2+2n+1

修改後的函式中只保留最高端項

t(n) =2n^2

如果最高端項存在且不是 1 則去除與這一項相乘的常數

t(n) =n^2

則該**執行的時間複雜度為: o(n^2)

常見的演算法時間複雜度以及他們在效率上的高低順序

o(1) 常數階 < o(logn) 對數階 < o(n) 線性階 < o(nlogn) < o(n^2) 平方階 < o(n^3) <

例 2計算 1+2+3+4+5+…+100 一般演算法

public static void main1(string args) 

system.out.println(sum);//1

}

t(n) = 2n+4=2n

或簡記 t(n) = n

根據上面的計算流程得出時間複雜度為: o(n)

高斯演算法

public static void main(string args)
時間複雜度為: o(4) , 一般簡記為 o(1)

例題:t(n) = 2n3+3n2+2n+1

t(n) <= n/2 - 1

例 3

public static void main(string args) ;

arrays.sort(arr);

system.out.println(arrays.tostring(arr));

system.out.println(dichotomizingsearch(arr,9));

}private static int dichotomizingsearch(int arr, int value)

if (value > arr[middle])

if (value < arr[middle])

}return -1;

}n/2^k = 1

k = logn

t(n) = logn * 5 + 3 = logn = o(logn)

dfs時間複雜度 時間複雜度 空間複雜度

時間複雜度的數學證明方法相對比較複雜,通常在工程實際中,會分析就好。注意 只看最高複雜度的運算 int for for for for int遞迴如何分析時間複雜度?常數係數可以忽略,在分析時不用考慮,只要說以上術語即可。主定理 master throrem 上述第四種是歸併排序,所有排序演算法,最...

時間複雜度 空間複雜度

時間複雜度 在電腦科學中,演算法的時間複雜度是乙個函式,它定性描述了該演算法的執行時間。這是乙個關於代表演算法輸入值的字串 的長度的函式。時間複雜度常用大o符號 表述,不包括這個函式的低階項和首項係數。計算時間複雜度的方法 1 只保留高階項,低階項直接丟棄 2 係數不要 3 執行次數是常數是為o 1...

時間複雜度 空間複雜度

演算法複雜度分為時間複雜度和空間複雜度。其作用 時間複雜度是指執行演算法所需要的計算工作量 而空間複雜度是指執行這個演算法所需要的記憶體空間。一 時間複雜度 時間頻度 乙個演算法執行所耗費的時間,從理論上是不能算出來的,必須上機執行測試才能知道。但我們不可能也沒有必要對每個演算法都上機測試,只需知道...