算法第一步(Python版)

算法第一步(Python版)

算法第一步(Python版)》是2020年11月電子工業出版社出版的圖書,作者為葉蒙蒙。

軟體開發就是通過各種算法實現具體的業務邏輯,把繁雜的過程抽象化、可計算化的過程,了解基本原理,掌握數據結構和6大經典算法,手寫代碼實現,鍛鍊思維肌肉,讓大腦靈活地轉起來。

即使沒有任何程式設計基礎的讀者也可以閱讀本書,書中同步講解兩方面內容:使用Python 語言編寫程式,基礎經典算法。由編程學算法,以算法促編程。

用妙趣橫生的插畫描述複雜的原理的算法框架。

基本介紹

  • 書名:算法第一步(Python版)
  • 作者:葉蒙蒙
  • 出版社:電子工業出版社
  • 出版時間:2020年11月
  • 頁數:272 頁
  • 定價:89.00 元
  • 開本:16 開
  • ISBN:9787121391279
內容簡介,圖書目錄,作者簡介,

內容簡介

《算法第一步(Python版)》針對零基礎的初學者,以算法為核心,以編程為手段,最終的目的是培養讀者的計算思維。
本書涉及大學計算機課程中程式設計、數據結構和計算機原理等多個領域的知識,從程式、編程和算法是什麼入手;然後重點介紹了控制流程和數據結構,並針對數據結構的限制和實現剖析了現代電子計算機的基礎:二進制和馮·諾依曼結構;最後重點介紹了6大經典算法的原理、過程和編程實現,以及其背後的算法策略。
為了使零基礎的讀者能夠上手編程,本書從操作角度闡述了編程工具的使用和程式編寫、運行、調試的過程。

圖書目錄

第1章 認識算法
1.1 算法究竟是什麼
1.1.1 廣義的算法
1.1.2 計算機領域的算法
1.2 程式、編程和算法之間的關係
1.2.1 算法與程式
1.2.2 算法與編程
1.2.3 學習算法和編程的用處
1.3 學習算法的深度
1.3.1 掌握算法的5個層次
1.3.2 對應不同層次的講解方法
1.3.3 算法驅動編程
1.3.4 算法的難點:從原理到實現
第2章 萬事的抽象:控制流程
2.1 認識流程
2.1.1 順序
2.1.2 順序結構
2.1.3 條件(分支)
2.1.4 條件(分支)結構
2.1.5 循環(疊代)
2.1.6 循環(疊代)結構
2.2 用簡單的結構表達複雜的過程:控制結構的排列和嵌套
2.2.1 什麼是流程圖
2.2.2 極簡版流程圖符號表
2.2.3 最簡單的流程圖
2.3 流程圖的粒度與嵌套
2.3.1 粒度
2.3.2 嵌套
2.3.3 條件結構和循環結構的嵌套
2.3.4 粒度均衡的流程圖
第3章 計算機是如何運行的
3.1 數據
3.1.1 信息數位化
3.1.2 數據化與數據
3.1.3 數據的組織
3.1.4 數據結構
3.2 計算機原理淺釋
3.2.1 電子計算機的前世今生
3.2.2 馮·諾依曼結構
3.2.3 存儲空間的地址和內容
3.2.4 一條指令是如何被執行的
3.2.5 馮·諾依曼結構的直觀解釋
3.2.6 馮·諾依曼結構的套用
3.2.7 馮·諾依曼結構的瓶頸
3.2.8 哈佛結構
第4章 萬物的抽象:數據結構
4.1 認識數據結構
4.1.1 數組
4.1.2 鍊表
4.2 直觀理解數據結構
4.2.1 數組與鍊表
4.2.2 數組與鍊表之同
4.2.3 數組與鍊表之異
4.3 預留給貨物的固定貨架:記憶體中的數組
4.3.1 存儲空間
4.3.2 數組:一塊連續的存儲空間
4.3.3 數組的下標
4.3.4 數組中的元素
4.3.5 數組的元素值
4.3.6 數組的特性
4.3.7 連續存儲惹的禍
4.4 見縫插針地擺放貨物:記憶體中的鍊表
4.4.1 鍊表
4.4.2 鍊表的編輯
4.5 數據結構的特性和發展
4.5.1 特性各異的鍊表與數組
4.5.2 數據結構的發展
第5章 複雜一些的數據結構:圖和樹
5.1 圖
5.1.1 圖的定義和分類
5.1.2 相關概念和算法
5.2 樹
5.2.1 樹的定義
5.2.2 二叉樹
5.3 遍歷算法
5.3.1 樹的遍歷和圖的遍歷
5.3.2 二叉樹的深度優先遍歷算法
5.3.3 二叉樹的廣度優先遍歷算法
5.4 圖和樹的現實意義
5.4.1 圖的抽象
5.4.2 樹的抽象
5.5 圖和樹
5.5.1 樹是圖的真子集
5.5.2 樹比圖更加嚴謹
第6章 第一行Python代碼
6.1 跟你的計算機聊天:程式語言
6.1.1 什麼是程式語言
6.1.2 從低級語言到高級語言
6.1.3 編譯和解釋
6.2 直觀感受不同的程式語言
6.3 一條可愛的小蟒蛇:Python語言
6.3.1 主流程式語言
6.3.2 為什麼選擇Python
6.3.3 Python的特性
6.3.4 結合數組與鍊表的優點的列表
6.4 Python的編輯、運行環境
6.4.1 順序安裝
6.4.2 創建項目
6.4.3 開始編寫第一個程式
6.5 第一個Python程式:讓Python小蟒蛇動起來
6.5.1 你好世界
6.5.2 運行Python程式的幾種方式
6.5.3 程式語言的基本概念
6.5.4 Python中的print()函式
第7章 開始用Python語言編寫程式
7.1 數據值和數據類型
7.1.1 數據的抽象和具象含義
7.1.2 數據類型
7.2 標識符
7.3 字面量、變數和常量
7.4 變數賦值
7.4.1 賦值的方式
7.4.2 賦值前無須聲明類型
7.4.3 賦值後不能隱性轉換類型
7.5 Python中的數組
7.5.1 邏輯上的數組
7.5.2 列表和元素
7.5.3 列表的賦值和複製
7.6 Python中的流程控制
7.6.1 用縮進劃分代碼塊
7.6.2 關鍵字
7.6.3 Python中的3種控制結構
7.6.4 不同類型結構的嵌套
第8章 實現第一個算法並衡量其優劣
8.1 從最簡單的算法開始學:順序查找
8.1.1 什麼是查找算法
8.1.2 查找算法的要素
8.1.3 順序查找
8.2 順序查找的數據結構和控制流程
8.2.1 數據結構
8.2.2 控制流程
8.3 用Python實現順序查找算法
8.3.1 用變數和賦值重繪流程圖
8.3.2 代碼實現
8.4 用for語句實現順序查找算法
8.4.1 Python循環關鍵字:for和while
8.4.2 用for循環實現順序查找算法
8.5 如何衡量算法的性能
8.5.1 時間複雜度
8.5.2 常見算法的時間複雜度
8.5.3 空間複雜度
第9章 簡單但有用的經典查找算法
9.1 猜數遊戲
9.1.1 遊戲規則
9.1.2 不限制猜測次數的遊戲的必勝攻略
9.1.3 限制猜測次數的猜數遊戲
9.2 從“挨著找”到“跳著找”
9.3 二分查找:從原理到形式化描述
9.3.1 二分查找的原理
9.3.2 結構化的自然語言描述——流程圖
9.3.3 形式化描述第一步——變數和賦值
9.4 二分查找的編程實現
9.4.1 形式化流程控制
9.4.2 從流程圖到代碼
9.5 二分查找的性能
9.5.1 二分查找的時間複雜度
9.5.2 二分查找的空間複雜度
第10章 程式中的函式
10.1 計算機領域的函式
10.1.1 編程中的函式
10.1.2 函式的定義
10.1.3 函式的調用
10.1.4 二分查找函式
10.2 函式的作用
10.2.1 重用
10.2.2 抽象和封裝
10.2.3 從程式之外獲得數據
10.3 函式的參數
10.3.1 函式的參數及其值的變化
10.3.2 Python的函式參數傳遞
10.3.3 函式參數問題的簡化理解
第11章 編程實現猜數遊戲
11.1 用Python實現猜數遊戲
11.1.1 猜數遊戲與二分查找
11.1.2 編寫猜數遊戲攻擊者輔助程式
11.2 修改後的猜數小助手為什麼輸了
11.3 Bug
11.4 Bug的天敵——Debug
11.4.1 什麼是Debug
11.4.2 常用Debug方法:列印變數中間值
11.5 和Bug鬥智鬥勇
11.5.1 Bug的嚴重性
11.5.2 產生Bug的原因
11.5.3 防止Bug產生危害的方法
第12章 二分查找的變形
12.1 二分查找變形記:重複數列二分查找
12.1.1 包含重複元素數列的二分查找
12.1.2 包含重複元素數列的二分查找的變形
12.2 讓變形更高效:與經典二分查找相同的時間複雜度
12.2.1 包含重複元素數列的二分查找的時間複雜度
12.2.2 時間複雜度的計算
12.2.3 包含重複元素數列的二分查找的O(log(n))算法
12.3 二分查找再變形:旋轉數列二分查找
12.3.1 有序數列的旋轉
12.3.2 不包含重複元素旋轉數列的二分查找
12.3.3 算法實現
12.3.4 代碼最佳化
12.4 包含重複元素旋轉數列的二分查找
第13章 認識排序算法
13.1 處處可見的排行榜
13.1.1 什麼是排序
13.1.2 排序算法的江湖地位
13.1.3 無處不在的排行榜
13.2 排序算法的分類
13.2.1 排序算法的分類方式
13.2.2 比較排序
13.2.3 比較排序的局限和優勢
13.3 排序算法的基本操作:兩兩交換數組中的元素
13.3.1 查找算法和排序算法
13.3.2 兩兩交換數組中的元素
13.3.3 swap()函式
13.3.4 沒有返回值的swap()函式
第14章 幾種簡單排序算法
14.1 撲克牌遊戲
14.1.1 用撲克牌做一個小遊戲
14.1.2 排序要解決的問題
14.1.3 基於直覺的排序算法
14.2 選擇排序
14.2.1 算法原理
14.2.2 數據結構
14.2.3 算法步驟
14.2.4 編程實現
14.3 起泡排序
14.3.1 歷史
14.3.2 算法原理
14.3.3 算法步驟
14.3.4 編程實現
14.3.5 算法最佳化
14.4 插入排序
14.4.1 算法原理:又見撲克牌
14.4.2 在數組中插入元素
14.4.3 算法步驟
14.4.4 編程實現
14.5 簡單排序概述
14.5.1 排序的時間複雜度
14.5.2 排序的空間複雜度
14.5.3 簡單排序算法性能總結
第15章 必須掌握的排序算法
15.1 快速排序
15.1.1 一個“笑話”
15.1.2 算法原理
15.1.3 算法的江湖地位
15.1.4 算法步驟
15.2 快速排序的時間複雜度
15.2.1 時間複雜度的計算
15.2.2 最佳時間複雜度
15.2.3 最差時間複雜度
15.2.4 平均時間複雜度
15.2.5 理解快速排序的平均時間複雜度
15.3 快速排序的空間複雜度
15.3.1 簡單的分區函式
15.3.2 最佳化分區函式
15.4 解讀分區算法原始碼
15.4.1 “人肉計算機”法
15.4.2 列印解讀法
15.5 編程實現快速排序算法
15.5.1 分治策略
15.5.2 快速排序的分與治
15.5.3 編程實現快速排序算法
第16章 遞歸實現快速排序
16.1 遞歸:像“貪吃蛇”一樣“吃掉”自己
16.1.1 歷史悠久的概念
16.1.2 無效遞歸
16.1.3 有效遞歸
16.1.4 分形
16.1.5 斐波那契數列
16.2 遞歸函式
16.2.1 遞歸和分治
16.2.2 遞歸函式
16.2.3 最簡單的遞歸函式
16.2.4 Python 限制遞歸深度
16.2.5 限制運行次數的遞歸函式
16.2.6 遞歸實現斐波那契數的計算
16.3 實現遞歸式快速排序
16.3.1 遞歸式快速排序的原理
16.3.2 遞歸式快速排序的編程實現
16.3.3 算法性能
16.4 測試算法程式
16.4.1 構造測試數據集
16.4.2 安裝 pip 和用 pip 安裝模組
16.4.3 用生成數據測試快速排序
16.4.4 分區函式帶來的差異
第17章 算法精進
17.1 如何算學會了一個算法
17.1.1 以二分查找為例了解“掌握算法的幾個層次”
17.1.2 依據掌握的知識解決問題
17.1.3 學習算法的誤區
17.2 學會之後——創新
17.3 如何自學算法
17.3.1 自學三要素
17.3.2 學習材料和內容
17.3.3 學習目的和深度
17.3.4 學習方法
17.3.5 如何閱讀代碼
17.3.6 練習與實踐
17.4 說說刷題

作者簡介

葉蒙蒙,微軟資深算法工程師,科普寫手。近二十年間積累了大量用C/C++, Java, C# 和 Python開發各類軟體的經驗,深刻體會到編程的核心在於算法。本著幫助更多朋友了解、學習計算機算法,掌握計算思維的初心,寫作此書。

相關詞條

熱門詞條

聯絡我們