引言

本文集是作者閱讀《算法圖解》一書所做的讀書筆記,內(nèi)容難免過于淺薄。之后將針對部分細節(jié)進行補充和完善,如有錯漏還望讀者留言指正。

算法是一組完成任務(wù)的指令,任何代碼片段都可視為算法。優(yōu)秀的算法可以提高程序執(zhí)行效率,或者解決一些有趣的問題。在學(xué)習(xí)算法的過程中我們可以嘗試理解算法的思路和應(yīng)用場景,從而開闊視野,提升自身水準(zhǔn)。

大O表示法
大O表示法是一種特殊的表示法,用來表示算法處理數(shù)據(jù)花費的時間隨數(shù)據(jù)規(guī)模變化的規(guī)律,即算法的時間復(fù)雜度
下面以簡單查找算法為例進一步了解算法復(fù)雜度的概念以及大O表示法的使用方法。

public int search(int key, int[] arr) {
  for (int idx = 0; idx < arr.length; idx++) {
    if (key == arr[idx]) {
      return idx;
    }
  }
  return -1;
}

以上代碼實現(xiàn)了一個簡單的查找算法,search()方法接收兩個參數(shù),key為要查找的目標(biāo),arr為查找的集合,如果arr中包含該元素則返回元素的下標(biāo),否則返回-1。
假設(shè)檢查一個元素花費的時間為1,上面的算法當(dāng)中在最差的情況下需要檢查的次數(shù)為arr.length,平均檢查次數(shù)為1/2 * arr.length,所以上面查找算法查找元素花費的時間可以表示為t = 1/2 * arr.length。使用大O表示法時通常會省略表達式中的常數(shù)項,所以簡單查找算法的時間復(fù)雜度為O(n)。
了解算法復(fù)雜度的意義在于:通過算法時間復(fù)雜度可以比較不同算法的操作數(shù),計算算法運行時間隨數(shù)據(jù)規(guī)模的增速,從而評價算法的質(zhì)量。

常見的大O運行時間有以下幾種:

  1. O(logN), 也叫對數(shù)時間。
  2. O(N), 也叫線性時間。
  3. O(N*logN)。
  4. O(N2)。
  5. O(N!)。

下圖來自Time complexity - Wikipedia,圖中展示了常見算法復(fù)雜度的操作數(shù)隨輸入規(guī)模變化的曲線。

Comparison computational complexity

至此引言部分結(jié)束,后續(xù)內(nèi)容將涉及常見排序算法,查找算法以及簡單的圖算法。


作者水平有限,本文旨在記錄作者閱讀和學(xué)習(xí)過程,內(nèi)容質(zhì)量難以保證,暫不支持轉(zhuǎn)載,還望見諒

最后編輯于
?著作權(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)容