内容简介
本书第1章~第6章按算法设计技巧分成渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法。每章针对一些经典问题给出解决问题的算法,并分析算法的时间复杂度。这样对于初学者来说,按照算法的设计方法划分,算法思想的阐述比较集中,有利于快速入门理解算法的精髓所在。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以结合已学的方法综合起来解决比较复杂的问题。本书第7章的线性规划和第8章的计算几何是综合算法部分,通过学习这些内容,读者将进一步地学习更前沿的随机算法、近似算法和并行算法等现代算法设计方法和实战技巧。
本书特色是按照算法之间逻辑关系编排学习顺序,并对每一个经典算法,都给出了完整的C/C /Java三种主流编程语言的实现程序,是一本既能让读者清晰、轻松地理解算法思想,又能让读者编程实现算法的实用书籍。建议读者对照本书在计算机上自己创建项目、文件,进行录入、调试程序等操作,从中体会算法思想的精髓,体验编程成功带来的乐趣。
目录
- 第1章集腋成裘——渐增型算法
- 1.1算法设计与分析
- 1.2插入排序算法
- 1.2.1算法描述与分析
- 1.2.2程序实现
- 1.2.3应用——赢得舞伴
- 1.3两个有序序列的合并算法
- 1.3.1算法描述与分析
- 1.3.2程序实现
- 1.4序列的划分
- 1.4.1算法描述与分析
- 1.4.2程序实现
- 1.5小结
- 第2章化整为零——分治算法
- 2.1Hanoi塔问题与递归算法
- 2.1.1算法的描述与分析
- 2.1.2程序实现
- 2.1.3应用——新Hanoi塔游戏
- 2.2归并排序算法
- 2.2.1算法描述与分析
- 2.2.2程序实现
- 2.2.3应用——让舞伴更开心
- 2.3快速排序算法
- 2.3.1算法描述与分析
- 2.3.2程序实现
- 2.4堆的实现
- 2.4.1堆的概念及其创建
- 2.4.2程序实现
- 2.5堆排序
- 2.5.1算法描述与分析
- 2.5.2程序实现
- 2.6基于二叉堆的优先队列
- 2.6.1算法描述与分析
- 2.6.2程序实现
- 2.7关于排序算法
- 2.7.1比较型排序算法的时间复杂度
- 2.7.2C/C /Java提供的排序函数(方法)
- 2.7.3应用——环法自行车赛
- 2.8小结
- 第3章记表备查——动态规划算法
- 3.1矩阵链乘法
- 3.1.1算法描述与分析
- 3.1.2程序实现
- 3.1.3应用——牛牛玩牌
- 3.2最长公共子序列
- 3.2.1算法描述与分析
- 3.2.2程序实现
- 3.2.3算法的应用
- 3.3背包问题
- 3.3.1算法描述与分析
- 3.3.2程序实现
- 3.3.3算法的应用
- 3.4带权有向图中任意两点间的最短路径
- 3.4.1算法描述与分析
- 3.4.2程序实现
- 3.4.3应用——牛牛聚会
- 3.5小结
- 第4章高效的选择——贪婪算法
- 4.1活动选择问题
- 4.1.1算法描述与分析
- 4.1.2程序实现
- 4.1.3贪婪算法与动态规划
- 4.1.4应用——海岸雷达
- 4.2Huffman编码
- 4.2.1算法描述与分析
- 4.2.2程序实现
- 4.2.3应用——Huffman树
- 4.3最小生成树
- 4.3.1算法描述与分析
- 4.3.2程序实现
- 4.3.3应用——北方通信网
- 4.4单源最短路径问题
- 4.4.1算法描述与分析
- 4.4.2程序实现
- 4.4.3应用——西气东送
- 4.5小结
- 第5章艰苦卓绝——回溯算法
- 第6章图的搜索算法
- 第7章集组合优化问题之大成——线性规划
- 第8章图形学基础——计算几何
- 附录
- 参考文献