编辑推荐
掌握多种不同的思维方式是每个人大学时代的必修课。事实上,高等院校要求学生学习多个学科的课程,其目的就是为了培养他们从多个角度思考问题的能力。《编程导论》以麻省理工学院开放式课程(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