1. 程式人生 > >學習:資料結構與演算法之美(1-3)

學習:資料結構與演算法之美(1-3)

第一課

基礎知識就像是一座大樓的地基,它決定了我們的技術高度。而要想快速做出點事情,前提條件一定是基礎能力過硬,“內功”要到位。

第二課

為什麼要學習資料結構和演算法(摘自網友極客時間留言)

  1. 直接好處是能夠寫出效能更優的程式碼,
  2. 演算法是一種解決問題的思路和方法,有機會應用到生活和事業的其他方面
  3. 長期來看,大腦思考能力是個人最重要的核心競爭力,而演算法是為數不多的能夠有效訓練大腦思考能力的途徑之一。

一定要動手寫,看十遍也不如寫一遍的牢
寫程式碼能力缺失,把學到的資料結構和演算法都實現一遍,可很好的鍛鍊變成能力
十年磨一劍,做技術就是不要浮躁,要耐得住寂寞,沉得下心。
臥薪嚐膽,提高自己,沉澱自己。
總有一天,機會會到來,你做好充分抓住他的準備就好。

資料結構和演算法的概念:

廣義上來說,資料結構是一組資料的儲存結構,演算法是操作資料的一組方法
資料結構是為演算法服務的,演算法要作用在特定的資料結構之上。

在學習過程中,我們要注重這三點:
“是什麼”,“為什麼”,“怎麼做”

那麼資料結構與演算法比較重要的內容如下所示:

10個數據結構:陣列,連結串列,棧,佇列,散列表,二叉樹,堆,跳錶,圖,Tire樹
10個演算法:遞迴,排序,二分查詢,搜尋,雜湊演算法,貪心演算法,分治演算法,回溯演算法,動態規劃,字元匹配演算法。

一些可以讓你事半功倍的技巧:

  1. 邊學邊練,適度刷題
  2. 多問多思考多互動
  3. 打怪升級學習方法,克服“堅持不下來”的毛病,列一些切實可行的目標
  4. 知識需要沉澱,不要想試圖一下子掌握所有

第三課

大O表示程式碼執行時間隨資料規模增長的變化趨勢—>時間複雜度

時間複雜度的分析方法:

  1. 只關注迴圈次數最多的一段程式碼
  2. 加法法則:總複雜度等於量級最大的那段程式碼複雜度
  3. 乘法法則:巢狀程式碼的複雜度等於巢狀內外程式碼複雜度的乘積。

O(1)
是常量級時間複雜度的表示方法
只要程式碼的時間不隨n的增大而增大,這種程式碼的時間複雜度記作O(1)
時間複雜度:執行時間與資料規模之間的增長關係。反映執行快慢
空間複雜度:演算法的儲存空間與資料規模之間的增長關係。反映記憶體消耗

以上內容就是今晚學習的資料結構與演算法之美整理出來的部分內容,僅以此種方式監督自己學習。