1.時間復(fù)雜度和空間復(fù)雜度

算法設(shè)計的要求:正確性,可讀性,健壯性和效率與低存儲量需求.

為了比較同一問題的不同算法,通常的做法是從算法中選取一種對于所研究的問題來說是基本操作的原操作,以該操作的重復(fù)執(zhí)行次數(shù)作為算法的時間量度.

例如:

for(i=1;i<=n;i++){

? ? for(j=1;j<=n;j++){

? ? ? ? sum=i*j;

}}

在代碼中,乘法是該循環(huán)的基本操作,整個算法的執(zhí)行與該基本操作重復(fù)的次數(shù)n^2 成正比,記作T(n)=O(n^2 ).

1.時間復(fù)雜度:

T(n)=O(f(n))

他表示隨規(guī)模n的增大,算法執(zhí)行時間的增長率和f(n)的增長率相同,稱為算法的漸進時間復(fù)雜度,簡稱時間復(fù)雜度.

如何使用時間復(fù)雜度描述?

首先我們需要確定一個基本操作n,根據(jù)這個基本操作的重復(fù)次數(shù)來表示O(f(n)).

例如常量階O(1),線性階O(n),平方階O(n^k),對數(shù)階O(logN),指數(shù)階O(2^n)等等.

看樣子回頭又得補高數(shù)了...

補充:由于算法的時間復(fù)雜度考慮的只是對于問題規(guī)模n的增長率,則在難以精確計算基本操作執(zhí)行次數(shù)的情況下,只需求出它關(guān)于n的增長率或階即可.

補充:for(i=1;i<=n;i++){a++};

for(i=1;i<=n;i++){for(j=1;j<=n;j++){a++;}

第一個for循環(huán)時間復(fù)雜度是O(n),第二個是O(n^2),那么整個就是O(n+n^2).

一般來說,只要算法中不存在循環(huán)語句,時間復(fù)雜度就為O(1)。

2.空間復(fù)雜度

通常來說,只要算法不涉及到動態(tài)分配的空間,以及遞歸、棧所需的空間,空間復(fù)雜度通常為O(1);

一般的遞歸算法空間復(fù)雜度為O(n^2),

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容