编程的乐趣:用Python解算法谜题作者:[美]德瓦达斯出版时间: 2019.6内容简介 这是一本介绍通过解决复杂谜题来学习编程的书,书中的代码用Python语言编写。与以往的编程书不同,本书将对代码功能的理解与编程语言语法和语义的理解分离开来,从解每个谜题开始,先给出解谜题的算法,随后用Python语法和语义实现对应的算法,并适当做出解释。本书包含了21个谜题,其中很多谜题都广为流传,如多皇后、汉诺塔、在几秒钟内解决数独问题、验证六度分隔猜想等,每个谜题后面都配有不同难度的编程习题,帮读者加深对相关算法的理解。本书在算法谜题的趣味性和计算机编程的实用性之间搭建了一座桥梁,内容饶有趣味,讲述易于理解,适合已掌握初级编程概念并对算法感兴趣的学习者阅读和参考。目录谜题1 保持一致 11.1 寻找想法相同的连续人员 21.2 字符串、列表和元组 31.3 从算法到代码 41.4 代码优化 71.5 列表创建与修改 71.6 作用域 81.7 算法优化 91.8 单遍算法 91.9 应用 101.10 习题 11谜题2 参加派对的最佳时间 132.1 反复检查时间 142.2 聪明地检查时间 162.3 有序的表示 202.4 习题 20谜题3 拥有(需要一点校准的)读心术 223.1 编程完成助手的工作 243.2 编程完成魔术师的任务 283.3 独自掌握技巧 293.4 信息编码 313.5 4张牌的魔术戏法 313.6 习题 32谜题4 让皇后保持分离 344.1 系统地搜索 364.2 用二维列表(数组)表示棋盘 384.3 用一维列表(数组)表示棋盘 414.4 迭代枚举 454.5 习题 46谜题5 请打碎水晶 475.1 两颗球的高效搜索 485.2 d颗球的高效搜索 495.3 对两颗球减少抛球次数 535.4 习题 54谜题6 寻找假币 556.1 分治 556.2 递归分治 576.3 三进制表示 606.4 称量谜题一个流行的变体 616.5 习题 61谜题7 跳到平方根 627.1 迭代查找 627.2 折半查找 657.3 二分搜索 677.4 三分搜索 697.5 习题 69谜题8 猜猜谁不来吃晚餐 718.1 第 一次尝试 728.2 始终寻找最大选择 738.3 生成所有组合 748.4 移除不友好的组合 768.5 选择最大组合 768.6 优化内存使用 778.7 应用 788.8 习题 79谜题9 美国达人秀 819.1 每次生成并测试一个组合 839.2 确定缺少一门绝活的组合 849.3 应用 859.4 习题 86谜题10 多皇后 8810.1 递归求取最大公约数 8810.2 递归获取斐波那契数列 8910.3 递归求解N皇后问题 9110.4 递归的应用 9410.5 习题 96谜题11 请满铺庭院 9811.1 归并排序 9911.2 归并排序的执行与分析 10111.3 基线条件即2 × 2庭院 10211.4 递归步骤 10311.5 列表推导式的基础知识 10711.6 美观打印 10711.7 另一个满铺谜题 10911.8 习题 109谜题12 汉诺塔 11112.1 汉诺塔的递归解决方案 11212.2 相邻汉诺塔的递归解决方案 11412.3 与格雷码的关系 11712.4 习题 118谜题13 没条理的工匠 12113.1 分治时的围绕基准点分拣 12213.2 与排序算法的关系 12313.3 原地划分 12613.4 排序也疯狂 12913.5 习题 129谜题14 再也不玩数独了 13114.1 递归式数独求解 13214.2 递归搜索过程中的推理 13614.3 数独谜题的难度 14014.4 习题 141谜题15 统计零钱的组合方式 14315.1 钞票的递归选取 14315.2 消除重复 14515.3 用最少的钞票支付 14715.4 习题 148谜题16 贪心是好事 15016.1 贪心算法 15116.2 最短历时规则 15116.3 最早开始时间规则 15116.4 最少冲突规则 15216.5 最早结束时间规则 15216.6 贪心算法何时有效 15716.7 习题 158谜题17 字母也疯狂 16017.1 每次找到一组变位词 16017.2 通过排序对变位词进行分组 16217.3 通过散列操作对变位词进行分组 16417.4 字典 16517.5 用字典对变位词进行分组 16717.6 散列表 16917.7 习题 171谜题18 充分利用记忆 17318.1 递归解决方案 17318.2 回溯硬币的选择过程 17518.3 memoization技术 17818.4 避免使用异常 17918.5 动态规划 18018.6 习题 180谜题19 要记得周末 18419.1 找到分区 18519.2 二分图的判别 18719.3 图的表示 18919.4 图的着色 19219.5 习题 193谜题20 六度分隔 19520.1 广度优先搜索 19720.2 集合 19820.3 在广度优先搜索中使用集合 19920.4 历史 20220.5 习题 203谜题21 问题有价 20521.1 用字典构造二叉查找树 20721.2 字典形式下的二叉查找树操作 20921.3 面向对象风格的二叉查找树 21221.4 回到谜题:算法 21621.5 解决谜题的代码 21821.6 多种数据结构的对比 22221.7 习题 222 上一篇: 深度学习:卷积神经网络从入门到精通 下一篇: 微服务实战:Dubbox+Spring Boot+Docker