科技
类型
可以朗读
语音朗读
533千字
字数
2016-09-01
发行日期
展开全部
主编推荐语
一本书的容量,讲解了入门类、范例类和项目实战类三类图书的内容。
内容简介
算法是程序的灵魂,只有掌握了算法,才能轻松地驾驭程序开发。算法能够告诉开发者在面对一个项目功能时用什么思路去实现,有了这个思路后,编程工作只需遵循这个思路去实现即可。
本书循序渐进、由浅入深地详细讲解了算法实现的核心技术,并通过具体实例的实现过程演练了各个知识点的具体使用流程。 全书共20章,其中,第1章讲解了算法为什么是程序的灵魂;第2~8章分别讲解了常用的算法,如线性表、队列和栈,树,图,查找算法,内部排序算法,外部排序算法等知识,这些内容都是算法技术核心的语法知识;第9~15章分别讲解了经典的数据结构问题、解决数学问题、解决趣味问题、解决图像问题、算法的经典问题、解决奥赛问题、常见算法应用实践等高 级编程技术,这些内容是算法技术的重点和难点;第16~20章分别通过5个综合实例的实现过程,介绍了算法在综合开发项目中的使用流程和发挥的作用。
全书内容以“技术解惑”和“实践应用”贯穿全书,引领读者全面掌握算法的核心技术。本书不但适合算法研究和学习的初学者,也适合有一定算法基础的读者,还可以作为大中专院校相关专业师生的学习用书和培训学校的教材。
目录
- 版权信息
- 内容提要
- 前言
- 一本合适的书
- 本书的特色
- 本书的内容
- 本书的读者对象
- 致谢
- 本书实例
- 第1章 算法是程序的灵魂
- 1.1 算法的基础
- 1.1.1 算法的特征
- 1.1.2 何为算法
- 1.2 计算机中的算法
- 1.2.1 认识计算机中的算法
- 1.2.2 为什么说算法是程序的灵魂
- 1.3 在计算机中表示算法的方法
- 1.3.1 用流程图来表示算法
- 1.3.2 用N-S流程图来表示算法
- 1.3.3 用计算机语言表示算法
- 1.4 技术解惑
- 第2章 常用的算法思想
- 2.1 枚举算法思想
- 2.1.1 枚举算法基础
- 2.1.2 实战演练——百钱买百鸡
- 2.1.3 实战演练——解决“填写运算符”问题
- 2.2 递推算法思想
- 2.2.1 递推算法基础
- 2.2.2 实践演练——解决“斐波那契数列”问题
- 2.2.3 实践演练——解决“银行存款”问题
- 2.3 递归算法思想
- 2.3.1 递归算法基础
- 2.3.2 实践演练——解决“汉诺塔”问题
- 2.3.3 实践演练——解决“阶乘”问题
- 2.4 分治算法思想
- 2.4.1 分治算法基础
- 2.4.2 实践演练——解决“大数相乘”问题
- 2.4.3 实践演练——欧洲冠军杯比赛日程安排
- 2.5 贪心算法思想
- 2.5.1 贪心算法基础
- 2.5.2 实践演练——解决“装箱”问题
- 2.5.3 实践演练——解决“找零方案”问题
- 2.6 试探法算法思想
- 2.6.1 试探法算法基础
- 2.6.2 实践演练——解决“八皇后”问题
- 2.6.3 实践演练——体彩29选7彩票组合
- 2.7 迭代算法
- 2.7.1 迭代算法基础
- 2.7.2 实践演练——解决“求平方根”问题
- 2.8 模拟算法思想
- 2.8.1 模拟算法的思路
- 2.8.2 实践演练——解决“猜数字游戏”问题
- 2.8.3 实践演练——解决“掷骰子游戏”问题
- 2.9 技术解惑
- 2.9.1 衡量算法的标准是什么
- 2.9.2 在什么时候选择使用枚举法
- 2.9.3 递推和递归有什么差异
- 2.9.4 总结分治法能解决什么类型的问题
- 2.9.5 分治算法的机理是什么
- 2.9.6 为什么说贪婪算法并不是最优解决问题的方案
- 2.9.7 回溯算法会影响算法效率吗
- 2.9.8 递归算法与迭代算法有什么区别
- 第3章 线性表、队列和栈
- 3.1 线性表详解
- 3.1.1 线性表的特性
- 3.1.2 顺序表操作
- 3.1.3 实践演练——顺序表操作函数
- 3.1.4 实践演练——操作顺序表
- 3.1.5 链表操作
- 3.1.6 实践演练——定义链表操作函数
- 3.1.7 实践演练——操作链表
- 3.2 先进先出的队列详解
- 3.2.1 什么是队列
- 3.2.2 链队列和循环队列
- 3.2.3 队列的基本操作
- 3.2.4 队列的链式存储
- 3.2.5 实践演练——完整的顺序队列的操作
- 3.2.6 实践演练——完整的循环队列的操作
- 3.2.7 实践演练——实现一个排号程序
- 3.3 后进先出栈
- 3.3.1 什么是栈
- 3.3.2 栈的基本分类
- 3.3.3 实践演练——栈操作函数
- 3.3.4 实践演练——测试栈操作
- 3.4 技术解惑
- 3.4.1 线性表插入操作的时间复杂度是多少
- 3.4.2 线性表删除操作的时间复杂度是多少
- 3.4.3 线性表按值查找操作的时间复杂度是多少
- 3.4.4 线性表链接存储(单链表)操作的11种算法是什么
- 3.4.5 堆和栈的区别是什么
- 第4章 树
- 4.1 树基础
- 4.1.1 什么是树
- 4.1.2 树的相关概念
- 4.2 二叉树详解
- 4.2.1 二叉树的定义
- 4.2.2 二叉树的性质
- 4.2.3 二叉树存储
- 4.2.4 操作二叉树
- 4.2.5 遍历二叉树
- 4.2.6 线索二叉树
- 4.2.7 实践演练——测试二叉树操作函数
- 4.2.8 实践演练——C++的二叉树操作
- 4.2.9 实践演练——实现各种线索二叉树的操作
- 4.2.10 实践演练——测试线索二叉树的操作
- 4.3 霍夫曼树
- 4.3.1 霍夫曼树基础
- 4.3.2 实践演练——实现各种霍夫曼树操作
- 4.3.3 实践演练——测试霍夫曼树的操作
- 4.3.4 总结霍夫曼编码的算法实现
- 4.4 技术解惑
- 4.4.1 树和二叉树的差别是什么
- 4.4.2 二叉树和链表的效率谁更牛
- 4.4.3 如何打印二叉树中的所有路径
- 第5章 图
- 5.1 图的起源
- 5.2 图的相关概念
- 5.3 存储结构
- 5.3.1 表示顶点之间相邻关系的邻接矩阵
- 5.3.2 邻接表
- 5.3.3 十字链表
- 5.3.4 实践演练——创建一个邻接矩阵
- 5.3.5 实践演练——测试霍夫曼树的操作
- 5.4 图的遍历
- 5.4.1 深度优先搜索
- 5.4.2 广度优先搜索
- 5.4.3 实践演练——求一条包含图中所有顶点的简单路径
- 5.4.4 实践演练——求距v0的各顶点中最短路径长度最长的一个顶点
- 5.4.5 实践演练——实现图的遍历操作方法
- 5.4.6 实践演练——实现图的遍历操作
- 5.5 图的连通性
- 5.5.1 无向图连通分量
- 5.5.2 最小生成树
- 5.5.3 实践演练——创建一个最小生成树
- 5.5.4 实践演练——调用最小生成树函数实现操作
- 5.5.5 关键路径
- 5.6 寻求最短路径
- 5.6.1 求某一顶点到其他各顶点的最短路径
- 5.6.2 任意一对顶点间的最短路
- 5.6.3 实践演练——创建最短路径算法函数
- 5.6.4 实践演练——调用最短路径算法实现测试
- 5.7 技术解惑
- 5.7.1 几种最短路径算法的比较
- 5.7.2 邻接矩阵与邻接表的对比
- 5.7.3 如何表示有向图的十字链表存储
- 5.7.4 比较深度优先算法和广度优先算法
- 第6章 查找算法
- 6.1 几个相关概念
- 6.2 基于线性表的查找法
- 6.2.1 顺序查找法
- 6.2.2 实践演练——实现顺序查找算法
- 6.2.3 实践演练——改进的顺序查找算法
- 6.2.4 折半查找法
- 6.2.5 实践演练——使用折半查找算法查找数据
- 6.2.6 实践演练——查找10个已排好序的数
- 6.2.7 分块查找法
- 6.3 基于树的查找法
- 6.3.1 二叉排序树
- 6.3.2 实践演练——将数据插入到二叉树节点中
- 6.3.3 实践演练——删除二叉树中一个节点
- 6.3.4 平衡二叉排序树
- 6.4 哈希法
- 6.4.1 哈希法的基本思想
- 6.4.2 构造哈希函数
- 6.4.3 处理冲突
- 6.4.4 哈希表的查找过程
- 6.5 索引查找
- 6.5.1 索引查找的过程
- 6.5.2 实践演练——索引查找法查找指定的关键字
- 6.5.3 实践演练——实现索引查找并插入一个新关键字
- 6.6 技术解惑
- 6.6.1 分析查找算法的性能
- 6.6.2 演示对二叉树的完整操作
- 6.6.3 分析哈希法的性能
- 第7章 内部排序算法
- 7.1 排序基础
- 7.1.1 排序的目的和过程
- 7.1.2 内部排序与外部排序
- 7.1.3 稳定排序与不稳定排序
- 7.2 插入排序算法
- 7.2.1 直接插入排序
- 7.2.2 实践演练——编写直接插入排序算法
- 7.2.3 实践演练——插入排序算法对数据进行排序处理
- 7.2.4 折半插入排序
- 7.2.5 表插入排序
- 7.2.6 希尔排序
- 7.2.7 实践演练——使用希尔排序算法对数据进行排序处理
- 7.2.8 实践演练——使用希尔排序处理数组
- 7.3 交换类排序法
- 7.3.1 冒泡排序(相邻比序法)
- 7.3.2 快速排序
- 7.3.3 实践演练——用冒泡排序算法实现对数据的排序处理
- 7.3.4 实践演练——使用快速排序算法
- 7.4 选择类排序法
- 7.4.1 直接选择排序
- 7.4.2 树形选择排序
- 7.4.3 堆排序
- 7.4.4 实践演练——直接选择排序算法对数据的排序处理
- 7.4.5 实践演练——堆排序算法实现排序处理
- 7.5 归并排序
- 7.5.1 归并排序思想
- 7.5.2 两路归并算法的思路
- 7.5.3 实现归并排序
- 7.5.4 实践演练— —用归并算法实现排序处理
- 7.5.5 实践演练——使用归并排序算法求逆序对
- 7.6 基数排序
- 7.6.1 多关键字排序
- 7.6.2 链式基数排序
- 7.7 技术解惑
- 7.7.1 插入排序算法的描述是什么
- 7.7.2 希尔排序和插入排序谁更快
- 7.7.3 快速排序的时间耗费是多少
- 7.7.4 堆排序与直接选择排序的区别是什么
- 7.7.5 归并排序的效率如何,应该如何选择
- 7.7.6 综合比较各种排序方法
- 第8章 外部排序算法
- 8.1 外部信息概览
- 8.1.1 磁带存储器
- 8.1.2 磁盘存储器
- 8.2 外部排序的基本方法
- 8.2.1 磁盘排序
- 8.2.2 磁带排序
- 8.3 文件的基础知识
- 8.4 文件组织方式
- 8.4.1 顺序文件
- 8.4.2 索引文件
- 8.4.3 ISAM文件
- 8.4.4 VSAM文件
- 8.4.5 散列文件
- 8.4.6 多关键字文件
- 第9章 经典的数据结构问题
- 9.1 约瑟夫环
- 9.2 大整数运算
- 9.2.1 数组实现大整数运算
- 9.2.2 链表实现大整数运算
- 9.3 计算机进制转换
- 9.4 中序表达式转换为后序表达式
- 第10章 解决数学问题
- 10.1 最大公约数和最小公倍数
- 10.2 哥德巴赫猜想
- 10.3 完全数
- 10.4 亲密数
- 10.5 自守数
- 10.6 方程求解
- 10.6.1 用高斯消元法解方程组
- 10.6.2 用二分法解非线性方程
- 10.6.3 用牛顿迭代法解非线性方程
- 10.7 矩阵运算
- 10.8 实现n×n整数方阵的转置
- 10.9 一元多项式运算
- 10.9.1 一元多项式的加法运算
- 10.9.2 一元多项式的减法运算
- 第11章 解决趣味问题
- 11.1 歌星大奖赛
- 11.2 借书方案
- 11.3 打鱼还是晒网
- 11.4 捕鱼和分鱼
- 11.5 出售金鱼
- 11.6 平分七筐鱼
- 11.7 绳子的长度和井深
- 11.8 鸡兔同笼
- 11.9 汉诺塔
- 11.9.1 递归法
- 11.9.2 非递归法
- 11.10 马踏棋盘
- 11.10.1 使用循环查找法
- 11.10.2 使用递归法
- 11.10.3 使用栈方法
- 11.11 三色球问题
- 11.12 新郎和新娘问题
- 11.13 计算年龄
- 第12章 解决图像问题
- 12.1 “八皇后”问题
- 12.1.1 使用递归法
- 12.1.2 使用循环法
- 12.2 生命游戏
- 12.3 黑白棋问题
- 12.4 “骑士迷宫”问题
- 12.5 找出迷宫问题中的所有路径
- 第13章 算法的经典问题
- 13.1 存钱利息最大化
- 13.2 背包问题
- 13.2.1 使用动态规划法
- 13.2.2 使用递归法
- 13.3 农夫过河
- 13.4 三色旗问题
- 13.5 取石子
- 13.6 停车场管理
- 13.7 约瑟夫生死者游戏
- 第14章 解决奥赛问题
- 14.1 孪生素数问题
- 14.2 百钱买百鸡问题
- 14.3 马克思手稿中的数学题
- 14.4 正整数分解质因数
- 14.5 水仙花数
- 14.6 素数
- 14.6.1 求1000以内的所有素数
- 14.6.2 求1000以内的回文素数
- 14.6.3 求1000以内的平方回文数
- 14.7 阶乘
- 14.7.1 使用递归法
- 14.7.2 实现大数的阶乘
- 14.8 青蛙过河
- 14.9 过河卒
- 14.10 素数组合
- 14.11 校验码问题
- 14.12 老师排座位
- 14.13 模拟立体图
- 14.14 采药问题
- 14.15 等价表达式问题
- 14.16 购买年货问题
- 第15章 常见算法应用实践
- 15.1 实现Ping功能中的校验和算法
- 15.2 24点游戏算法
- 15.3 洗牌
- 15.4 21点游戏
- 15.5 2048游戏
- 15.6 引用计数算法
- 15.7 猫捉老鼠游戏
- 第16章 俄罗斯方块游戏
- 16.1 游戏功能描述
- 16.2 游戏总体设计
- 16.2.1 功能模块设计
- 16.2.2 数据结构设计
- 16.2.3 构成函数介绍
- 16.3 游戏具体实现
- 16.3.1 预处理
- 16.3.2 主函数——递归算法
- 16.3.3 初始化界面处理——分治算法
- 16.3.4 时钟中断处理
- 16.3.5 成绩、速度和帮助处理
- 16.3.6 满行处理——碰撞检测算法
- 16.3.7 方块显示和消除处理——分治算法
- 16.3.8 游戏方块操作判断处理——枚举算法
- 第17章 学生成绩管理系统
- 17.1 系统总体描述
- 17.1.1 开发目标和项目背景介绍
- 17.1.2 系统功能模块
- 17.2 系统总体设计
- 17.2.1 功能模块设计
- 17.2.2 数据结构设计
- 17.2.3 构成函数介绍
- 17.3 系统具体实现
- 17.3.1 预处理
- 17.3.2 主函数main——递归算法
- 17.3.3 系统主菜单函数——模拟算法
- 17.3.4 表格显示信息
- 17.3.5 信息查找定位——分治算法
- 17.3.6 格式化输入数据——递归、分治算法
- 17.3.7 增加学生记录——试探算法
- 17.3.8 查询学生记录——分治算法
- 17.3.9 删除学生记录——分治、递归算法
- 17.3.10 修改学生记录——递归、模拟算法
- 17.3.11 插入学生记录——递推算法
- 17.3.12 统计学生记录——分治算法
- 17.3.13 排序处理——插入排序算法
- 17.3.14 存储学生信息
- 第18章 绘图板系统
- 18.1 项目规划分析
- 18.1.1 绘图板的核心技术
- 18.1.2 功能描述
- 18.1.3 总体设计
- 18.2 设计数据结构
- 18.2.1 设计数据结构
- 18.2.2 规划系统函数
- 18.3 具体编码
- 18.3.1 预处理模块
- 18.3.2 功能控制模块——递推、递归算法
- 18.3.3 保存加载模块——递归算法
- 18.3.4 鼠标控制模块——枚举、递归算法
- 18.3.5 图形绘制模块——递归、分治、枚举、递推算法
- 18.3.6 主函数模块——模拟、递归算法
- 18.4 项目调试
- 第19章 UDP传输系统
- 19.1 项目规划分析
- 19.1.1 功能描述
- 19.1.2 功能模块设计
- 19.1.3 系统流程图
- 19.1.4 广播消息发送流程
- 19.1.5 广播消息接收流程图
- 19.1.6 多播消息接收流程图
- 19.2 设计数据结构
- 19.2.1 定义常量
- 19.2.2 定义全局变量
- 19.3 规划系统函数
- 19.4 具体编码
- 19.4.1 预处理
- 19.4.2 初始化模块处理
- 19.4.3 获取参数——枚举算法
- 19.4.4 用户帮助模块——递归算法
- 19.4.5 广播信息发送模块——试探算法
- 19.4.6 广播信息接收模块——试探算法
- 19.4.7 多播功能控制模块——试探算法
- 19.4.8 多播消息发送模块——试探算法
- 19.4.9 多播消息接收模块——试探算法
- 19.4.10 主函数——递归算法
- 19.5 项目调试
- 第20章 推箱子游戏
- 20.1 项目规划分析
- 20.1.1 功能描述
- 20.1.2 功能模块分析
- 20.1.3 剖析执行流程
- 20.2 设计数据结构
- 20.3 规划系统函数
- 20.4 具体编码
- 20.4.1 预处理
- 20.4.2 初始化模块——递归算法
- 20.4.3 画图模块——试探算法
- 20.4.4 移动箱子模块——试探、分治、递归、枚举算法
- 20.4.5 移动小人模块——枚举、试探算法
- 20.4.6 功能控制模块——递归、分治算法
- 20.4.7 系统主函数——枚举、模拟、递归、试探算法
- 20.5 项目调试
- 欢迎来到异步社区!
- 异步社区的来历
- 社区里都有什么?
- 购买图书
- 下载资源
- 与作译者互动
- 灵活优惠的购书
- 纸电图书组合购买
- 社区里还可以做什么?
- 提交勘误
- 写作
- 会议活动早知道
- 加入异步
展开全部
出版方
人民邮电出版社
人民邮电出版社是工业和信息化部主管的大型专业出版社,成立于1953年10月1日。人民邮电出版社坚持“立足信息产业、面向现代社会、传播科学知识、服务科教兴国”,致力于通信、计算机、电子技术、教材、少儿、经管、摄影、集邮、旅游、心理学等领域的专业图书出版。