時(shí)間復(fù)雜度計(jì)算

算法中基本操作重復(fù)執(zhí)行的次數(shù)是問(wèn)題規(guī)模n的某個(gè)函數(shù),用T(n)表示,若有某個(gè)輔助函數(shù)f(n),使得當(dāng)n趨近于無(wú)窮大時(shí),T(n)/f(n)的極限值為不等于零的常數(shù),則稱f(n)是T(n)的同數(shù)量級(jí)函數(shù)。記作T(n)=O(f(n)),稱O(f(n))為算法的漸進(jìn)時(shí)間復(fù)雜度(O是數(shù)量級(jí)的符號(hào) ),簡(jiǎn)稱時(shí)間復(fù)雜度。
計(jì)算步驟可以分解為:

  1. 找到執(zhí)行次數(shù)最多的語(yǔ)句
  2. 計(jì)算語(yǔ)句執(zhí)行次數(shù)的數(shù)量級(jí)
  3. 用大O來(lái)表示結(jié)果

一、O(n)

function getSum (n) {
  let sum = 0;
  for(let i = 0; i <= n; i++) {
    sum += i;
   }
return sum;
}

只有可運(yùn)行的語(yǔ)句才會(huì)增加時(shí)間復(fù)雜度,因此,上面方法里的內(nèi)容除了循環(huán)之外,其余的可運(yùn)行語(yǔ)句的復(fù)雜度都是O(1)。
時(shí)間復(fù)雜度 = for的O(n)+O(1) = 忽略常量 = O(n)。

二、O(log2n)

function makeDouble(n) {
  let i= 1;
  while(i<n){
    i = i*2;
  }
  return i;
}

設(shè)while循環(huán)里面的頻度為t,2^t(2的t次方)<=n; 兩邊去對(duì)數(shù)t<=log2n,考慮最壞情況,取最大值t=log2n。
T(n) = O(log2n)。
排序算法的復(fù)雜度可以參見(jiàn)排序算法

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

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

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