數(shù)據(jù)結(jié)構(gòu)和算法第一講

本講內(nèi)容:

為什么學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法?

學(xué)習(xí)重點是什么?

復(fù)雜度分析?

為什么學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)和算法

閱讀框架源碼,理解其背后的設(shè)計思想

不想只會寫CRUD,只寫出能用的代碼,而是想寫出高質(zhì)量,性能較優(yōu)的代碼

以上都是為了能在軟件開發(fā)行業(yè)有長久的發(fā)展,不管是在升職加薪還是以后跳槽面試,都是必不可少的

學(xué)習(xí)重點是什么?

什么是數(shù)據(jù)結(jié)構(gòu)和算法?

數(shù)據(jù)結(jié)構(gòu),就是一組數(shù)據(jù)的存儲結(jié)構(gòu)。

算法,就是操作數(shù)據(jù)的一組方法。

數(shù)據(jù)結(jié)構(gòu)是為算法服務(wù)的,算法要作用在特定的數(shù)據(jù)結(jié)構(gòu)之上。數(shù)據(jù)結(jié)構(gòu)是靜態(tài)的,它只是組織數(shù)據(jù)的一種方式。如果不在它的基礎(chǔ)上操作、構(gòu)建算法,孤立存在的數(shù)據(jù)結(jié)構(gòu)就是沒用的。

為什么需要數(shù)據(jù)結(jié)構(gòu)和算法?

首先來看數(shù)據(jù)結(jié)構(gòu)和算法解決的是什么問題:如何更省、更快(空間和時間)地存儲和處理數(shù)據(jù)的問題

其次為什么要解決這個問題?原因是隨著計算機(jī)技術(shù)的發(fā)展,數(shù)據(jù)規(guī)模在不斷擴(kuò)大,但是計算機(jī)本身的計算和存儲能力的發(fā)展相比于數(shù)據(jù)的擴(kuò)張較為緩慢。而且人類對于高效率的追求是一個不變的目標(biāo)。如何提高計算機(jī)的計算效率,由此產(chǎn)生了數(shù)據(jù)結(jié)構(gòu)和算法。

如何衡量數(shù)據(jù)結(jié)構(gòu)和算法?

為了提升計算效率,大家設(shè)計了很多種數(shù)據(jù)結(jié)構(gòu)和算法。這些數(shù)據(jù)結(jié)構(gòu)和算法之間誰更優(yōu),這時就需要一個衡量的標(biāo)準(zhǔn)和方法。這個衡量方法即為復(fù)雜度分析。

復(fù)雜度分析:時間復(fù)雜度分析和空間復(fù)雜度分析

這也對應(yīng)了數(shù)據(jù)結(jié)構(gòu)和算法解決的問題:更快和更省的存儲和處理數(shù)據(jù)

學(xué)習(xí)內(nèi)容

10個數(shù)據(jù)結(jié)構(gòu): 數(shù)組,鏈表,棧,隊列,散列表,二叉樹,堆,跳表,圖,Trie樹

10個算法: 遞歸,排序,二分查找,搜索,哈希算法,貪心算法,分治算法,回溯算法,動態(tài)規(guī)劃,字符串匹配算法

復(fù)雜度分析

什么是復(fù)雜度分析?

復(fù)雜度分析是從時間和空間緯度衡量數(shù)據(jù)結(jié)構(gòu)和算法的。具體點說,復(fù)雜度描述的是算法執(zhí)行時間(或占用空間)與數(shù)據(jù)規(guī)模的增長關(guān)系。

為什么要進(jìn)行復(fù)雜度分析?

是一種理論分析的工具,能夠幫助我們計算代碼的性能,在進(jìn)行實際測試之前有個宏觀的認(rèn)識,幫助我們寫出高質(zhì)量的代碼。而且這種分析不依賴執(zhí)行環(huán)境、成本低、效率高、易操作、指導(dǎo)性強(qiáng)。

怎么進(jìn)行復(fù)雜度分析?

大 O 復(fù)雜度表示法

示例:

時間復(fù)雜度分析:

第 2、3 行代碼分別需要 1 個 unit_time 的執(zhí)行時間

第 4、5 行都運行了 n 遍,所以需要 2n*unit_time 的執(zhí)行時間

這段代碼總的執(zhí)行時間就是 (2n+2)*unit_time。

所有代碼的執(zhí)行時間 T(n) 與每行代碼的執(zhí)行次數(shù)成正比。

分析方法:

1. 只關(guān)注循環(huán)執(zhí)行次數(shù)最多的一段代碼

2.?加法法則:總復(fù)雜度等于量級最大的那段代碼的復(fù)雜度

3. 乘法法則:嵌套代碼的復(fù)雜度等于嵌套內(nèi)外代碼復(fù)雜度的乘積

幾種常見時間復(fù)雜度實例分析

多項式階:隨著數(shù)據(jù)規(guī)模的增長,算法的執(zhí)行時間和空間占用,按照多項式的比例增長。包括,O(1)(常數(shù)階)、O(logn)(對數(shù)階)、O(n)(線性階)、O(nlogn)(線性對數(shù)階)、O(n^2)(平方階)、O(n^3)(立方階)

非多項式階:隨著數(shù)據(jù)規(guī)模的增長,算法的執(zhí)行時間和空間占用暴增,這類算法性能極差。包括,O(2^n)(指數(shù)階)、O(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ù)。

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