算法設計與分析基礎(Python語言描述)(微課視頻版)

李春葆 主編;蔣林 陳良臣 副主編

  • 出版商: 清華大學
  • 出版日期: 2024-08-01
  • 定價: $359
  • 售價: 8.5$305
  • 語言: 簡體中文
  • ISBN: 7302659567
  • ISBN-13: 9787302659563
  • 下單後立即進貨 (約4週~6週)

  • 算法設計與分析基礎(Python語言描述)(微課視頻版)-preview-1
  • 算法設計與分析基礎(Python語言描述)(微課視頻版)-preview-2
  • 算法設計與分析基礎(Python語言描述)(微課視頻版)-preview-3
算法設計與分析基礎(Python語言描述)(微課視頻版)-preview-1

買這商品的人也買了...

商品描述

本書結合Python語言的各種數據類型介紹窮舉法、歸納法、迭代法和遞歸法等基本算法設計方法,重點討論分治法、回溯法、分支限界法、貪心法和動態規劃五大算法設計策略的原理和算法設計框架,通過大量典型示例和LeetCode實戰題解析了多途徑構建模型、求解和驗證的過程。 全書既註重原理又註重實踐,配有大量圖表、練習題、上機實驗題和在線編程題,內容豐富,概念講解清楚,表達嚴謹,邏輯性強,語言精練,可讀性好。 本書既便於教師課堂講授,又便於自學者閱讀,適合作為高等院校“算法設計與分析”課程的教材,也可供ACM和各類程序設計競賽者參考。

目錄大綱

目錄

掃一掃

源碼下載

第1章算法入門——概論/

1.1算法概述/

1.1.1什麽是算法/

1.1.2算法的描述/

1.1.3算法設計的基本步驟/

1.2算法分析/

1.2.1算法的時間復雜度分析/

1.2.2算法的空間復雜度分析/

習題1/

第2章工之利器——常用數據結構及其應用/

2.1線性表——數組/

2.1.1線性表的定義/

2.1.2Python列表/

2.1.3列表元素的排序/

2.1.4列表的復制/

2.1.5實戰——移除元素(LeetCode27★)/

2.2線性表——鏈表/

2.2.1單鏈表/

2.2.2實戰——反轉鏈表(LeetCode206★)/

2.3字符串/

2.3.1字符串的定義/

2.3.2Python中的字符串/

2.3.3實戰——最大重復子字符串(LeetCode1668★)/

2.4棧/

2.4.1棧的定義/

2.4.2用Python列表實現棧/

2.4.3實戰——使括號有效的最少添加

(LeetCode921★★)/

2.5雙端隊列/

2.5.1雙端隊列的定義/

2.5.2Python中的雙端隊列/

2.5.3實戰——滑動窗口中的最大值

(LeetCode239★★★)/

2.6隊列/

2.6.1隊列的定義/

2.6.2Python中的隊列/

2.6.3實戰——無法吃午餐的學生的數量

(LeetCode1700★)/

2.7優先隊列/

2.7.1優先隊列的定義/

2.7.2Python中的優先隊列/

2.7.3實戰——數據流中第k大的元素

(LeetCode703★)/

2.8樹和二叉樹/

2.8.1樹/

2.8.2二叉樹/

2.8.3實戰——二叉樹的完全性檢驗

(LeetCode958★★)/

2.9圖/

2.9.1圖的基礎/

2.9.2實戰——課程表(LeetCode207★★)/

2.10並查集/

2.10.1並查集的基礎/

2.10.2實戰——省份的數量(LeetCode547★★)/

2.11二叉排序樹和平衡二叉樹/

2.11.1二叉排序樹/

2.11.2平衡二叉樹/

2.11.3紅黑樹/

2.11.4Python中的有序類/

2.11.5實戰——前k個高頻單詞(LeetCode692★★)/

2.12哈希表/

2.12.1哈希表的基礎/

2.12.2Python中的哈希表/

2.12.3實戰——多數元素(LeetCode169★)/

習題2/

第3章必備技能——基本算法設計方法/

3.1窮舉法/

3.1.1窮舉法概述/

3.1.2最大連續子序列和/

3.1.3實戰——最大子序列和(LeetCode53★)/

3.2歸納法/

3.2.1歸納法概述/

3.2.2直接插入排序/

3.2.3實戰——不同路徑(LeetCode62★★)/

3.2.4猴子摘桃子問題/

3.3迭代法/

3.3.1迭代法概述/

3.3.2簡單選擇排序/

3.3.3實戰——多數元素(LeetCode169★)/

3.3.4求冪集/

3.3.5實戰——子集(LeetCode78★★)/

3.4遞歸法/

3.4.1遞歸法概述/

3.4.2冒泡排序/

3.4.3求全排列/

3.4.4實戰——字符串解碼(LeetCode394★★)/

3.5遞推式計算/

3.5.1直接展開法/

3.5.2遞歸樹方法/

3.5.3主方法/

習題3/

第4章分而治之——分治法/

4.1分治法概述/

4.1.1什麽是分治法/

4.1.2分治法算法的框架/

4.2求解排序問題/

4.2.1快速排序/

4.2.2實戰——最小的k個數(面試題17.14★★)/

4.2.3歸並排序/

4.2.4實戰——數組中的逆序對(劍指Offer51★★★)/

4.3求解查找問題/

4.3.1查找最大和次大元素/

4.3.2二分查找/

4.3.3二分查找的擴展/

4.3.4實戰——尋找峰值(LeetCode162★★)/

4.3.5查找兩個等長有序序列的中位數/

4.3.6查找假幣問題/

4.4求解組合問題/

4.4.1最大連續子序列的和/

4.4.2實戰——最大子序列的和(LeetCode53★)/

4.4.3實戰——多數元素(LeetCode169★)/

4.4.4實戰——三數之和(LeetCode15★★)/

4.4.5求最近點對距離/

習題4/

第5章走不下去就回退——回溯法/

5.1回溯法概述/

5.1.1問題的解空間/

5.1.2什麽是回溯法/

5.1.3回溯法算法的時間分析/

5.2深度優先搜索/

5.2.1圖的深度優先遍歷/

5.2.2深度優先遍歷和回溯法的差別/

5.2.3實戰——二叉樹的所有路徑(LeetCode257★)/

5.3基於子集樹框架的問題求解/

5.3.1子集樹算法框架概述/

5.3.2實戰——子集(LeetCode78★★)/

5.3.3實戰——子集Ⅱ(LeetCode90★★)/

5.3.4實戰——目標和(LeetCode494★★)/

5.3.5子集和問題/

5.3.6簡單裝載問題/

5.3.70/1背包問題/

5.3.8完全背包問題/

5.3.9實戰——皇後Ⅱ(LeetCode52★★★)/

5.3.10任務分配問題/

5.3.11*實戰——完成所有工作的最短時間

(LeetCode1723★★★)/

5.3.12圖的m著色/

5.4基於排列樹框架的問題求解/

5.4.1排列樹算法框架概述/

5.4.2實戰——含重復元素的全排列Ⅱ(LeetCode47★★)/

5.4.3任務分配問題/

5.4.4貨郎擔問題/

習題5/

第6章朝最優解方向前進——分支限界法/

6.1分支限界法概述/

6.1.1什麽是分支限界法/

6.1.2分支限界法的設計要點/

6.1.3分支限界法的時間分析/

6.2廣度優先搜索/

6.2.1圖的廣度優先遍歷/

6.2.2廣度優先搜索算法框架/

6.2.3實戰——到家的最少跳躍次數(LeetCode1654★★)/

6.2.4實戰——滑動謎題(LeetCode773★★★)/

6.2.5實戰——腐爛的橘子(LeetCode994★★)/

6.3隊列式分支限界法/

6.3.1隊列式分支限界法概述/

6.3.2圖的單源最短路徑/

6.3.3SPFA算法/

6.3.4實戰——網絡延遲時間(LeetCode743★★)/

6.3.50/1背包問題/

6.4優先隊列式分支限界法/

6.4.1優先隊列式分支限界法概述/

6.4.2圖的單源最短路徑/

6.4.3實戰——最小體力消耗路徑(LeetCode1631★★)/

6.4.4*實戰——完成所有工作的最短時間

(LeetCode1723★★★)/

6.4.50/1背包問題/

6.4.6任務分配問題/

6.4.7貨郎擔問題/

習題6/

第7章每一步局部最優——貪心法/

7.1貪心法概述/

7.1.1什麽是貪心法/

7.1.2貪心法求解問題具有的性質/

7.1.3實戰——分發餅乾(LeetCode455★)/

7.1.4貪心法的一般求解過程/

7.2求解組合問題/

7.2.1活動安排問題Ⅰ/

7.2.2實戰——無重疊區間(LeetCode435★★)/

7.2.3求解背包問題/

7.2.4實戰——雪糕的最大數量(LeetCode1833★★)/

7.2.5實戰——最大數(LeetCode179★★)/

7.2.6求解零錢兌換問題/

7.3求解圖問題/

7.3.1使用Prim算法構造最小生成樹/

7.3.2使用Kruskal算法構造最小生成樹/

7.3.3實戰——連接所有點的最小費用

(LeetCode1584★★)/

7.3.4使用Dijkstra算法求單源最短路徑/

7.3.5實戰——網絡延遲時間(LeetCode743★★)/

7.4求解調度問題/

7.4.1不帶懲罰的調度問題/

7.4.2帶懲罰的調度問題/

7.5哈夫曼編碼/

7.5.1哈夫曼樹和哈夫曼編碼/

7.5.2實戰——最後一塊石頭的重量

(LeetCode1046★)/

習題7/

第8章保存子問題的解——動態規劃/

8.1動態規劃概述/

8.1.1從一個簡單示例入門/

8.1.2動態規劃的原理/

8.1.3動態規劃求解問題的性質和步驟/

8.1.4動態規劃與其他方法的比較/

8.2一維動態規劃/

8.2.1最大連續子序列和/

8.2.2實戰——最大子序列和(LeetCode53★)/

8.2.3最長遞增子序列/

8.2.4*活動安排問題Ⅱ/

8.3二維動態規劃/

8.3.1三角形的最小路徑和/

8.3.2實戰——下降路徑最小和(LeetCode931★★)/

8.4三維動態規劃/

8.4.1使用Floyd算法求多源最短路徑/

8.4.2*雙機調度問題/

8.5字符串動態規劃/

8.5.1最長公共子序列/

8.5.2編輯距離/

8.6背包動態規劃/

8.6.10/1背包問題/

8.6.2實戰——目標和(LeetCode494★★)/

8.6.3完全背包問題/

8.6.4實戰——零錢兌換(LeetCode322★★)/

8.6.5*多重背包問題/

8.7樹形動態規劃/

8.7.1樹形動態規劃概述/

8.7.2實戰——找礦(LeetCode337★★)/

8.7.3實戰——監控二叉樹(LeetCode968★★★)/

8.8區間動態規劃/

8.8.1區間動態規劃概述/

8.8.2矩陣連乘問題/

8.8.3實戰——最長迴文子串(LeetCode5★★)/

習題8/

第9章最難問題——NP完全問題/

9.1P類和NP類/

9.1.1易解問題和難解問題/

9.1.2判定問題/

9.1.3P類/

9.1.4NP類/

9.2多項式時間變換和NP完全問題/

9.2.1多項式時間變換/

9.2.2NP完全性及其性質/

9.2.3第一個NP完全問題/

9.2.4其他NP完全問題/

習題9/

參考文獻/