編輯推薦
掌握多種不同的思維方式是每個人大學時代的必修課。事實上,高等院校要求學生學習多個學科的課程,其目的就是為瞭培養他們從多個角度思考問題的能力。《編程導論》以麻省理工學院開放式課程(OpenCourseWare)中受歡迎的計算機科學課程為基礎,旨在培養讀者的編程思維,使讀者擁有計算機科學傢的視野。
內容簡介
《編程導論》基於麻省理工學院(MIT)的一門課程寫成,主要目標是幫助讀者掌握並熟練使用各種計算技術。本書涵蓋瞭Python的大部分特性,重點介紹如何使用Python這門語言,共包含編程基礎、Python程序設計語言、理解計算的關鍵概念、計算問題的解決技術等四個方麵。本書將Python語言特性和編程方法貫穿全書,目的是幫助讀者在學習Python的同時掌握如何使用計算來解決有趣的問題。
本書適閤那些對編程知之甚少卻需要(或者想要)使用計算方法來解決問題的學生,是學習更高級計算機科學課程的基礎。
作者簡介
John V. Guttag,1999年至2004年任麻省理工學院電氣工程與計算機科學係主任(此前擔任瞭5年的副主任)。Guttag教授目前是計算機科學與人工智能實驗室網絡及移動係統組的聯閤負責人。此外,他還進行軟件工程、機器定理證明、硬件驗證等領域的研究以及培訓工作,並齣版過相關主題的圖書。Guttag教授獲得美國布朗大學英語專業學士學位、應用數學碩士學位,獲得多倫多大學計算機科學博士學位。
內頁插圖
目錄
第1章 起步
第2章 Python介紹
2.1 Python的基本元素
2.1.1 對象、錶達式和數值類型
2.1.2 變量和賦值
2.1.3 IDLE
2.2 分支程序
2.3 字符串和輸齣
2.3.1 輸入
2.4 循環
第3章 一些簡單的數值類程序
3.1 窮舉法
3.2 for循環
3.3 近似解和二分查找
3.4 關於浮點數
3.5 牛頓?拉夫遜方法
第4章 函數、作用域和規範抽象
4.1 函數和作用域
4.1.1 函數定義
4.1.2 關鍵字參數和默認值
4.1.3 作用域
4.2 規範
4.3 遞歸
4.3.1 斐波那契數
4.3.2 迴文和分治
4.4 全局變量
4.5 模塊
4.6 文件
第5章 結構化類型、可變性和高階
函數
5.1 元組
5.1.1 序列和多重賦值
5.2 列錶和可變性
5.2.1 剋隆
5.2.2 列錶解析
5.3 函數對象
5.4 字符串、元組和列錶
5.5 字典
第6章 測試和調試
6.1 測試
6.1.1 黑盒測試
6.1.2 白盒測試
6.1.3 執行測試
6.2 調試
6.2.1 學習調試
6.2.2 設計實驗
6.2.3 如果遇到阻礙
6.2.4 找到"目標"錯誤之後
第7章 異常和斷言
7.1 處理異常
7.2 把異常當作控製流來使用
7.3 斷言
第8章 類和麵嚮對象編程
8.1 抽象的數據類型和類
8.1.1 使用抽象的數據類型來設計
程序
8.1.2 使用類來記錄學生和教師
8.2 繼承
8.2.1 多層繼承
8.2.2 替代法則
8.3 封裝和信息隱藏
8.3.1 生成器
8.4 進階實例:抵押貸款
第9章 算法復雜度簡介
9.1 思考計算復雜度
9.2 漸近錶示
9.3 一些重要的復雜度
9.3.1 常數復雜度
9.3.2 對數復雜度
9.3.3 綫性復雜度
9.3.4 對數綫性復雜度
9.3.5 多項式復雜度
9.3.6 指數復雜度
9.3.7 復雜度對比
第10章 一些簡單的算法和數據結構
10.1 搜索算法
10.1.1 綫性搜索和間接訪問元素
10.1.2 二分查找和利用假設
10.2 排序算法
10.2.1 歸並排序
10.2.2 把函數當做參數
10.2.3 Python中的排序
10.3 散列錶
第11章 繪圖以及類的擴展內容
11.1 使用PyLab繪圖
11.2 擴展實例:繪製抵押貸款
第12章 隨機算法、概率以及統計
12.1 隨機程序
12.2 統計推斷和模擬
12.3 分布
12.3.1 正態分布和置信水平
12.3.2 均勻分布
12.3.3 指數分布和幾何分布
12.3.4 本福德分布
12.4 強隊的獲勝概率
12.5 散列和碰撞
第13章 隨機遊動和數據可視化
13.1 醉漢遊動
13.2 有偏隨機遊動
13.3 危機重重的田地
第14章 濛特卡羅模擬
14.1 帕斯卡的問題
14.2 過還是不過
14.3 使用查錶提高性能
14.4 尋找π
14.5 模擬模型的結束語
第15章 理解實驗數據
15.1 彈簧的行為
15.2 彈丸的行為
15.2.1 決定係數
15.2.2 使用計算模型
15.3 擬閤指數分布
15.4 當理論缺失時
第16章 謊言和統計
16.1 垃圾輸入隻能産生垃圾輸齣
16.2 圖錶會騙人
16.3 與此謬誤
16.4 統計方法並不能代替數據
16.5 抽樣偏差
16.6 語境問題
16.7 當心外推法
16.8 得剋薩斯神槍手謬誤
16.9 百分比會說謊
16.10 小心謹慎
第17章 背包和圖的最優化問題
17.1 背包問題
17.1.1 貪婪算法
17.1.2 0/1背包問題的最優解法
17.2 圖的最優化問題
17.2.1 一些典型的圖論問題
17.2.2 疾病傳播和最小割
17.2.3 最短路徑、深度優先搜索和廣度優先搜索
第18章 動態規劃
18.1 斐波那契數列
18.2 動態規劃和0/1背包問題
18.3 動態規劃和分治
第19章 機器學習簡介
19.1 特徵嚮量
19.2 距離度量
19.3 聚類
19.4 類型示例和聚類
19.5 K-means聚類
19.6 人造案例
19.7 稍微真實一些的示例
19.8 小結
附錄 Python 2.7快速參考
前言/序言
本書基於MIT的一門課程寫成。這門課從2006年起每年開課兩次,主要針對那些對編程知之甚少卻需要(或者想要)使用計算方法來解決問題的學生。每年都有少數學生在掌握這門課之後繼續學習更高級的計算機科學課程,但對於大多數學生來說,這是他們唯一一門計算機科學課程。
正因為如此,相比深度我們更加注重廣度。我們的目標是讓學生初步瞭解大部分主題,當他們需要使用計算方法來實現目標時更容易想到可行的方法。也就是說,這不是一門“計算賞析”課程,而是一門充滿挑戰、要求嚴格的課程,需要學生投入很多時間和精力來讓計算機按照他們的想法運行。
本書的主要目標是幫助你掌握並熟練使用各種計算技術。你要學會如何將理論計算模式應用到實際問題,以及如何使用計算方法從數據中提取信息。本書會嚮你展示解決計算問題的藝術。
內容結構比較獨特。第一部分(第1章至第8章)介紹瞭如何使用Python編程。和其他教程不同的是,本書涉及四個方麵:
編程基礎;
Python程序設計語言;
理解計算的關鍵概念;
計算問題的解決技術。
本書涵蓋瞭Python的大部分特性,但側重點是如何使用這門語言,而不是語言本身。例如,前三章介紹瞭窮舉的概念、猜測和驗證算法、二分查找以及高效近似算法,但隻涉及一小部分Python知識。我們將Python的特性貫穿全書,類似地,也將編程方法貫穿全書,目的是幫助你在學習Python的同時掌握如何使用計算來解決有趣的問題。
第二部分(第9章至第16章)主要介紹如何使用計算來解決問題。這部分知識不會超齣高中綫性代數的範圍,但讀者要有嚴謹的思維並且不會被數學概念嚇到。這部分會介紹一些入門教材中常見的主題,比如計算復雜度和簡單算法,同時也會介紹許多在入門教材中很少提到的主題,比如數據可視化、概率和統計思維、模擬模型以及使用計算來理解數據。
第三部分(第17章至第19章)介紹三個進階內容——最優化問題、動態規劃以及集群計算。
第一部分可以作為獨立的基礎課程講授,大約需要1/4到1/2學期。我建議用整個學期來講授本書的第一部分和第二部分。如果要包含第三部分,學生可能會感到吃力。
有兩個主題貫穿全書:係統性地解決問題以及抽象能力。學完本書之後你能:
學會用Python這門語言來錶示計算;
學會係統性地組織、編寫和調試中等規模的程序;
理解計算復雜度;
將模棱兩可的問題陳述轉換為可計算的形式,從而解決問題;
學會一些實用的算法和問題簡化技術;
學會用隨機化和模擬來處理棘手的問題;
學會使用計算工具,包括用簡單的統計和可視化工具對數據建模,以及理解數據的意義。
編程從本質上來說是一件很難的事。就像“幾何無坦途”一樣,編程同樣無坦途。你可以讓學生完成一係列限製嚴格的“填空”編程題,讓他們誤以為自己已經學會瞭編程。但是,這並不能讓學生掌握解決問題所必需的計算思維。
如果你真的想學懂這本書,隻靠閱讀是不夠的,還要親自動手運行書中的代碼。書中的所有代碼都可以在http://mitpress.mit.edu/ICPPRE上找到。從2008年開始,MIT的開源課程網站上就有瞭這門課的多個版本。網站收錄瞭課程的視頻錄像、一係列練習題以及考試。從2012年鞦季開始,edX和MITx提供瞭這門課的在綫版。如果你真的想學懂這本書,我們強烈建議你完成這些網站上的練習題。
編程導論 下載 mobi epub pdf txt 電子書