这是一本介绍通过解决复杂谜题来学习编程的书,书中的代码用Python语言编写。与以往的编程书不同,本书将对代码功能的理解与编程语言语法和语义的理解分离开来,从解每个谜题开始,先给出解谜题的算法,随后用Python语法和语义实现对应的算法,并适当做出解释。本书包含了21个谜题,其中很多谜题都广为流传,如多皇后、汉诺塔、在几秒钟内解决数独问题、验证六度分隔猜想等,每个谜题后面都配有不同难度的编程习题,帮读者加深对相关算法的理解。

本书在算法谜题的趣味性和计算机编程的实用性之间搭建了一座桥梁,内容饶有趣味,讲述易于理解,适合已掌握初级编程概念并对算法感兴趣的学习者阅读和参考。

很少有初学编程的人愿意为了编程而编程,本书创新地通过求解有趣的谜题来教授读者编程,为枯燥的编程学习过程注入了很强的趣味性,谜题是来自真实世界的应用,饶有趣味、易于描述。

学习编程是从解谜题开始的,在经历一两次失败的解谜尝试后,读者会豁然开朗——可能是一种搜索策略、一个数据结构或一个数学公式,谜题的算法就跃然而出了,剩下的事情就是用Python语法和语义将算法“翻译”成可实现的代码。

读者只需掌握初级的编程概念,就可以阅读本书。本书包含了21 个谜题,其中很多谜题都家喻户晓并广为流传,如多皇后、汉诺塔、在几秒钟内解决数独问题、六度分隔等。每个谜题后面都配有不同难度的编程习题,读者可以先自行完成编码,再对照本书给出的答案进行探索和提升。

作者简介

斯里尼·德瓦达斯(Srini Devadas) 麻省理工学院(MIT)计算机科学和人工智能实验室(CSAIL)电子工程和计算机科学教授,自1988年起在麻省理工学院任教。他目前的研究兴趣主要集中在计算机体系结构、计算机安全和应用密码学领域。他因其研究成就获得了2014年IEEE计算机学会技术成就奖、2015年ACM/IEEE理查德·牛顿技术影响力奖和2017年IEEE华莱士·麦克道尔奖。他在MIT教授编程基础、算法导论和算法设计与分析等课程。

译者简介

戴 旭 高级项目管理师,从事金融信息化和电子政务工作多年,现为杭州城市大脑研发团队成员,译有《Python快速入门》《Android平板电脑开发秘籍》《编写高性能的.NET代码》等。

李亚舟 现任职于知乎,负责数据库平台,关注存储、分布式系统、容器等技术,译有《Haskell趣学指南》。

许亚运 曾任职于高德、饿了么,有多年互联网行业后端开发经验,爱好Python,喜欢探索新技术。

谜题1 保持一致1

1.1 寻找想法相同的连续人员 2

1.2 字符串、列表和元组 3

1.3 从算法到代码 4

1.4 代码优化 7

1.5 列表创建与修改 7

1.6 作用域 8

1.7 算法优化 9

1.8 单遍算法 9

1.9 应用 10

1.10 习题 11

谜题2 参加派对的最佳时间 13

2.1 反复检查时间 14

2.2 聪明地检查时间 16

2.3 有序的表示 20

2.4 习题 20

谜题3 拥有(需要一点校准的)读心术 22

3.1 编程完成助手的工作 24

3.2 编程完成魔术师的任务 28

3.3 独自掌握技巧 29

3.4 信息编码 31

3.5 4张牌的魔术戏法 31

3.6 习题 32

谜题4 让皇后保持分离 34

4.1 系统地搜索 36

4.2 用二维列表(数组)表示棋盘 38

4.3 用一维列表(数组)表示棋盘 41

4.4 迭代枚举 45

4.5 习题 46

谜题5 请打碎水晶 47

5.1 两颗球的高效搜索 48

5.2 d颗球的高效搜索 49

5.3 对两颗球减少抛球次数 53

5.4 习题 54

谜题6 寻找假币 55

6.1 分治 55

6.2 递归分治 57

6.3 三进制表示 60

6.4 称量谜题一个流行的变体 61

6.5 习题 61

谜题7 跳到平方根 62

7.1 迭代查找 62

7.2 折半查找 65

7.3 二分搜索 67

7.4 三分搜索 69

7.5 习题 69

谜题8 猜猜谁不来吃晚餐 71

8.1 第 一次尝试 72

8.2 始终寻找最大选择 73

8.3 生成所有组合 74

8.4 移除不友好的组合 76

8.5 选择最大组合 76

8.6 优化内存使用 77

8.7 应用 78

8.8 习题 79

谜题9 美国达人秀 81

9.1 每次生成并测试一个组合 83

9.2 确定缺少一门绝活的组合 84

9.3 应用 85

9.4 习题 86

谜题10 多皇后 88

10.1 递归求取最大公约数 88

10.2 递归获取斐波那契数列 89

10.3 递归求解N皇后问题 91

10.4 递归的应用 94

10.5 习题 96

谜题11 请满铺庭院 98

11.1 归并排序 99

11.2 归并排序的执行与分析 101

11.3 基线条件即2 × 2庭院 102

11.4 递归步骤 103

11.5 列表推导式的基础知识 107

11.6 美观打印 107

11.7 另一个满铺谜题 109

11.8 习题 109

谜题12 汉诺塔 111

12.1 汉诺塔的递归解决方案 112

12.2 相邻汉诺塔的递归解决方案 114

12.3 与格雷码的关系 117

12.4 习题 118

谜题13 没条理的工匠 121

13.1 分治时的围绕基准点分拣 122

13.2 与排序算法的关系 123

13.3 原地划分 126

13.4 排序也疯狂 129

13.5 习题 129

谜题14 再也不玩数独了 131

14.1 递归式数独求解 132

14.2 递归搜索过程中的推理 136

14.3 数独谜题的难度 140

14.4 习题 141

谜题15 统计零钱的组合方式 143

15.1 钞票的递归选取 143

15.2 消除重复 145

15.3 用最少的钞票支付 147

15.4 习题 148

谜题16 贪心是好事 150

16.1 贪心算法 151

16.2 最短历时规则 151

16.3 最早开始时间规则 151

16.4 最少冲突规则 152

16.5 最早结束时间规则 152

16.6 贪心算法何时有效 157

16.7 习题 158

谜题17 字母也疯狂 160

17.1 每次找到一组变位词 160

17.2 通过排序对变位词进行分组 162

17.3 通过散列操作对变位词进行分组 164

17.4 字典 165

17.5 用字典对变位词进行分组 167

17.6 散列表 169

17.7 习题 171

谜题18 充分利用记忆 173

18.1 递归解决方案 173

18.2 回溯硬币的选择过程 175

18.3 memoization技术 178

18.4 避免使用异常 179

18.5 动态规划 180

18.6 习题 180

谜题19 要记得周末 184

19.1 找到分区 185

19.2 二分图的判别 187

19.3 图的表示 189

19.4 图的着色 192

19.5 习题 193

谜题20 六度分隔 195

20.1 广度优先搜索 197

20.2 集合 198

20.3 在广度优先搜索中使用集合 199

20.4 历史 202

20.5 习题 203

谜题21 问题有价 205

21.1 用字典构造二叉查找树 207

21.2 字典形式下的二叉查找树操作 209

21.3 面向对象风格的二叉查找树 212

21.4 回到谜题:算法 216

21.5 解决谜题的代码 218

21.6 多种数据结构的对比 222

21.7 习题 222

用python解算法谜题_编程的乐趣 用Python解算法谜题相关推荐

  1. python女神讲师视频教程_阿里巴巴讲师高赞Python全集视频教程,这就是你需要的...

    Python是世界上功能最多,功能最强大的编程语言之一.通过Python,可以编写自己的应用程序,创建游戏,设计算法,甚至编程机器人.而且Python的热度现在一直高居不下,比如,完成同一个任务,C语 ...

  2. 阿里云python自测答案_阿里云技能测试python初级中级高级

    简介 偶尔发现,阿里云-开发者社区,里竟然有技能测试平台 覆盖知识面也较多 初级(65) 涉及知识点:Python语言的基本特性.编程环境.语法基础.数据结构,了解Python的网络编程与Web开发, ...

  3. python新手入门教程思路-Python新手入门教程_教你怎么用Python做数据分析

    Python新手入门教程_教你怎么用Python做数据分析 跟大家讲了这么多期的Python教程,有小伙伴在学Python新手教程的时候说学Python比较复杂的地方就是资料太多了,比较复杂.很多网上 ...

  4. python跳舞的线_舞蹈链(Dance Link X)算法详解及python实现

    这两天打算做个数独玩玩,查了一下解数独最好的算法叫舞蹈链:Dance Link X 该算法主要是解决精确覆盖问题:比如有个集合X,以及其若干子集的集合Y,要求出一个Y的子集Y*,能够恰好分割X. 举个 ...

  5. python路线寻优_基于DEAP库的Python进化算法从入门到入土 --(四)遗传算法的改进...

    前言 前面一节我们尝试了用GA求解TSP问题,简单遗传算法总是不能很好收敛到一个较优的解,在用时和求解精度上都被贪心算法吊打.在末尾我们总结了三个可能的改进方向,这次我们想要沿着这三个方向试着改进简单 ...

  6. c语言python零基础教学_编程零基础应当如何开始学习 Python?附教程

    零基础学编程,用python入门是个不错的选择,虽然国内基本上还是以c语言作为入门开发语言,但在国外,已经有很多的学校使用python作为入门编程语言.此外,python在机器学习,人工智能领域也非常 ...

  7. c语言python零基础教学_编程零基础应当如何开始学习 Python?

    目录 1.学习了解Python的基础知识. 2.安装Python,边学边练. 3.收集资料,作为练习指引. 4.确定学习方向,项目练手. 5.学习过程中要注意多练.多问! 编程零基础选择Python开 ...

  8. python游戏开发工程师_史上最全Python课程整理——我是如何从编程小白到Python研发工程师的...

    从编程小白,到Python研发工程师,需要多久呢? 答案就是:91门课,450个小时. 听起来似乎难以实现,但其实如果每天抽出八小时学习,两个月的时间,就能由编程小白转变成为Python工程师,听起来 ...

  9. python清单全套教程_编程最经典的一份python学习清单,零基础都可以学会的教程...

    站在风口上,猪都能飞起来.人工智能风口,让Pyhon这门胶水语言转变成非常火的网红语言. 编程功力深厚的程序员花一两个星期就能上手Python,而一些新手程序员花几个月就可以上手. 学编程,用Pyth ...

最新文章

  1. dataimagepng php_php用header('content-type: image/png')输出验证码,但响应回来的是text/html...
  2. conj--复数的共轭值
  3. MySQL数据库服务器 主从配置
  4. 【数据结构与算法】之深入解析“水壶问题”的求解思路与算法示例
  5. 二分答案二题-P1182数列分段II,P1873砍树
  6. 学校门口的树C语言算法,C语言校园导游程序设计汇报.doc
  7. 配置spring事务管理的几种方式(声明式事务)
  8. EasyUI 搜索框
  9. linux上运行tcpserver没反应,linux网络编程/tcp_server中server bind失败原因的调研
  10. 混日子的老程序员感受结对编程的威力【工作效率狂提高】
  11. 飞客蠕虫专杀工具_案例-飞客蠕虫攻击
  12. LoadRunner11下载、安装与破解
  13. Visual Studio 2015(C#)编写实现TCP调试助手(服务端+客户端一体)-新手
  14. 前端7大常用布局方式
  15. Windows设置开机自启动的三种方式
  16. Cisco QoS配置说明(CBWFQ/LLQ/PQ/CQ/WFQ)
  17. 印度it公司_2016年印度十大IT公司
  18. follow your heart
  19. Type-C口充电器头为什么没有电压输出?
  20. 海洋cms解析接口最新

热门文章

  1. 给迷茫的Java员一些中肯建议,你还在虚度光阴吗?
  2. 3个月带你通关Go语言
  3. java中gso是什么意思_Java中用Gson解析json字符串
  4. java 圈复杂度_关于Java:降低Switch语句的循环复杂度-Sonar
  5. Spring事务--笔记
  6. insightface mxnet训练 旧版
  7. DataFrame 拼接,筛选,修改
  8. opencv 选择矩形框
  9. pytorch维度统计
  10. NMS和soft-nms算法