1. 程式人生 > >資料結構與演算法_開篇

資料結構與演算法_開篇

我決定了,每天的寫作內容就是今天學到了什麼。

 

很無趣是不是?

因為我終於意識到知識的掌握很大程度上依賴於“是否記住了它”。簡單來說就是記憶。或者說這種簡單的事情我現在還沒有做到,所以我決定每天記錄一下。

 

你好,歡迎你。

這裡是組蒽,很高興能和你分享我的成長

記錄和分享是我寫作的初衷

就這麼簡單,幹就行了

Just Enjoy Ourselves!

 

以上是公眾號的簡介,名字就叫組蒽。

 

演算法與資料結構的課程這週一共學習了10小節,內容有:時間複雜度、空間複雜度、陣列、連結串列、棧、佇列。具體的概念我已經忘得差不多了,就大概寫寫現在的我還記得的。

 

首先是時間複雜度,簡單來說就是“執行次數與輸入資料量有關的”程式碼的執行次數的數量級。這裡有一個概念應當注意,那就是均攤時間複雜度。顧名思義,就是將時間複雜度均攤。如果一段程式碼的時間複雜度呈週期性變化,比如以8(次)為一個週期,前7次的複雜度都為O(1),而第8次為O(n)(是不是有點像單位衝激序列?),那麼我們還是認為這段程式碼的時間複雜度為O(1),第8次的複雜度就被前幾次平攤了。

 

空間複雜度是什麼我有點模糊,好像是說記憶體空間的概念。如果程式碼“申請的記憶體與輸入的資料量有關”,輸入的資料量越大,申請的記憶體也就越大,那麼就認為這段程式碼的空間複雜度較高。

 

陣列是一段連續的記憶體空間,而連結串列是發散的記憶體空間。使用連結串列儲存會消耗較多的記憶體空間,因為要儲存下一個節點的記憶體地址。陣列的特點是查詢快,增刪慢,因為查詢可以直接通過下標找到地址,從中間刪除時需要將該點以後的物件全部向前挪一位(話說python中的列表在增刪資料的時候會自動移動剩下的資料,底層應該是實現好的,然而在C語言中手動管理記憶體的確挺麻煩的)。連結串列的特點與之相反,增刪快,查詢慢,因為連結串列的查詢只能從頭開始依次查詢,增刪時只要修改下一個節點的指向的地址就行了。陣列與連結串列還有一些變種。(那麼具體都有那些變種?)

 

棧和佇列是兩種資料管理方式,其底層可以用陣列也可以用連結串列實現。佇列中的資料遵循先進先出的原則,而棧是先進後出。似乎也有一些變形。(又來了)

 

最後還學習了遞迴。這一段是我後來加上的,因為第一次寫的時候我給忘了,這一節課我是分段學的,效果很差。

這10節課所展示的例項程式碼我都沒有直接寫過,具體的程式碼實現我將在下次的文稿中展示,

文章中忘記的知識也會補上。

 

最後謝謝你肯讀到這裡,這對我來說是莫大的鼓舞,這裡是新人寫手,請多關照!