京东
我的京东
加载中,请稍候...
去购物车结算
加载中,请稍候...

算法设计、分析与实现从入门到精通:C、C++和Java

其它类似商品

优惠套装

正在加载中,请稍候...

最佳组合

正在加载中,请稍候...
  • 商品编码:10064500
  • 作者:徐子珊
  • 出版社:人民邮电出版社
  • 版次:1
  • 装帧:平装
  • 纸张:胶版纸
  • 印刷时间:2010-06-01
  • 页数:409
  • 正文语种:中文
  • 开本:16开

编辑推荐

  国内算法界著名学者、计算理论学组组长朱洪教授推荐。
  本算法教材文笔顺畅,处理算法描述的两难问题有自己的特点,且具有丰富的C、C++和Java实现程序,这对读者学以致用很有帮助。《算法设计、分析与实现从入门到精通:C、C++和Java》还有一个特点,文采甚好,如集腋成裘、化整为零、赢得舞伴等,生动形象,易于学习和理解。《算法设计、分析与实现从入门到精通:C、C++和Java》插图也精美,如Hanoi塔图等,都给《算法设计、分析与实现从入门到精通:C、C++和Java》增色很多,让读者在兴趣中学习。此书在应用性例题上,兼有中、英文描述题目,如环法自行车赛、牛牛玩牌、射雕英雄等例题。这些例题来自ACM/ICPC,它们富有挑战性,可引起读者的学习兴趣。
  38个经典范例,包括渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法、线性规划算法和计算几何等算法设计和实现技巧。
  26个国际大学生程序设计竞赛真题的详细解析及算法的应用。
  3种主流语言(C、C++和Java)实现算法范例程序。

内容简介

  《算法设计、分析与实现从入门到精通:C、C++和Java》第1章~第6章按算法设计技巧分成渐增型算法、分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法。每章针对一些经典问题给出解决问题的算法,并分析算法的时间复杂度。这样对于初学者来说,按照算法的设计方法划分,算法思想的阐述比较集中,有利于快速入门理解算法的精髓所在。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以结合已学的方法综合起来解决比较复杂的问题。《算法设计、分析与实现从入门到精通:C、C++和Java》第7章的线性规划和第8章的计算几何是综合算法部分,通过学习这些内容,读者将进一步地学习更前沿的随机算法、近似算法和并行算法等现代算法设计方法和实战技巧。
  《算法设计、分析与实现从入门到精通:C、C++和Java》特色是按照算法之间逻辑关系编排学习顺序,并对每一个经典算法,都给出了完整的C/C++/Java三种主流编程语言的实现程序,是一本既能让读者清晰、轻松地理解算法思想,又能让读者编程实现算法的实用书籍。建议读者对照《算法设计、分析与实现从入门到精通:C、C++和Java》在计算机上自己创建项目、文件,进行录入、调试程序等操作,从中体会算法思想的精髓,体验编程成功带来的乐趣。

热门推荐

目录

第1章 集腋成裘——渐增型算法 1
1.1 算法设计与分析 1
1.2 插入排序算法 4
1.2.1 算法描述与分析 4
1.2.2 程序实现 6
1.2.3 应用——赢得舞伴 30
1.3 两个有序序列的合并算法 32
1.3.1 算法描述与分析 32
1.3.2 程序实现 34
1.4 序列的划分 45
1.4.1 算法描述与分析 45
1.4.2 程序实现 46
1.5 小结 52

第2章 化整为零——分治算法 53
2.1 Hanoi塔问题与递归算法 53
2.1.1 算法的描述与分析 53
2.1.2 程序实现 56
2.1.3 应用——新Hanoi塔游戏 59
2.2 归并排序算法 62
2.2.1 算法描述与分析 62
2.2.2 程序实现 63
2.2.3 应用——让舞伴更开心 69
2.3 快速排序算法 70
2.3.1 算法描述与分析 70
2.3.2 程序实现 72
2.4 堆的实现 79
2.4.1 堆的概念及其创建 79
2.4.2 程序实现 83
2.5 堆排序 88
2.5.1 算法描述与分析 88
2.5.2 程序实现 89
2.6 基于二叉堆的优先队列 94
2.6.1 算法描述与分析 94
2.6.2 程序实现 95
2.7 关于排序算法 105
2.7.1 比较型排序算法的时间复杂度 105
2.7.2 C/C++/Java提供的排序函数(方法) 107
2.7.3 应用——环法自行车赛 108
2.8 小结 109

第3章 记表备查——动态规划算法 111
3.1 矩阵链乘法 112
3.1.1 算法描述与分析 112
3.1.2 程序实现 115
3.1.3 应用——牛牛玩牌 121
3.2 最长公共子序列 123
3.2.1 算法描述与分析 123
3.2.2 程序实现 126
3.2.3 算法的应用 132
3.3 0-1背包问题 136
3.3.1 算法描述与分析 136
3.3.2 程序实现 138
3.3.3 算法的应用 142
3.4 带权有向图中任意两点间的最短路径 144
3.4.1 算法描述与分析 144
3.4.2 程序实现 148
3.4.3 应用——牛牛聚会 153
3.5 小结 155

第4章 高效的选择——贪婪算法 156
4.1 活动选择问题 156
4.1.1 算法描述与分析 156
4.1.2 程序实现 158
4.1.3 贪婪算法与动态规划 163
4.1.4 应用——海岸雷达 165
4.2 Huffman编码 166
4.2.1 算法描述与分析 166
4.2.2 程序实现 170
4.2.3 应用——Huffman树 180
4.3 最小生成树 183
4.3.1 算法描述与分析 183
4.3.2 程序实现 187
4.3.3 应用——北方通信网 196
4.4 单源最短路径问题 197
4.4.1 算法描述与分析 197
4.4.2 程序实现 200
4.4.3 应用——西气东送 207
4.5 小结 210

第5章 艰苦卓绝——回溯算法 211
5.1 组合问题与回溯算法 211
5.1.1 3-着色问题 211
5.1.2 n-皇后问题 214
5.1.3 Hamilton回路问题 216
5.1.4 子集和问题 218
5.2 解决组合问题的回溯算法框架 219
5.2.1 算法框架 219
5.2.2 程序实现 223
5.3 排列树和子集树 235
5.3.1 子集树问题 236
5.3.2 排列树问题 241
5.4 用回溯算法解决组合优化问题 245
5.4.1 算法框架 245
5.4.2 旅行商问题 247
5.4.3 应用 253
5.5 PNP和NP-完全问题 260
5.6 小结 262

第6章 图的搜索算法 264
6.1 广度优先搜索 265
6.1.1 算法描述与分析 265
6.1.2 程序实现 268
6.1.3 应用——攻城略地 276
6.2 深度优先搜索 278
6.2.1 算法描述与分析 278
6.2.2 程序实现 280
6.2.3 有向无圈图的拓扑排序 283
6.2.4 应用——全排序 290
6.3 有向图的强连通分支 292
6.3.1 算法描述与分析 292
6.3.2 程序实现 295
6.3.3 应用——亲情号 300
6.4 无向图的双连通分支 303
6.4.1 算法描述与分析 303
6.4.2 程序实现 306
6.4.3 应用——雌雄大盗 308
6.5 流网络与最大流问题 310
6.5.1 算法描述与分析 310
6.5.2 程序实现 319
6.5.3 应用 321
6.6 小结 324

第7章 集组合优化问题之大成——线性规划 325
7.1 标准形式与松弛形式 328
7.1.1 线性规划的标准形式 328
7.1.2 线性规划的松弛形式 331
7.2 单纯形算法 334
7.2.1 单纯形算法的例子 334
7.2.2 轴转操作 337
7.2.3 正规的单纯形算法 340
7.3 初始基本可行解 347
7.4 应用——将组合优化问题形式化为线性规划 355
7.5 小结 359

第8章 图形学基础——计算几何 360
8.1 线段的性质 360
8.1.1 叉积及其应用 361
8.1.2 程序实现 364
8.2 判断是否存在线段相交 367
8.2.1 算法描述与分析 367
8.2.2 程序实现 370
8.3 求凸壳 374
8.3.1 Graham扫描 375
8.3.2 Jarvis行进 381
8.4 求最邻近点对 384
8.4.1 算法描述与分析 385
8.4.2 程序实现 387
8.5 应用 389
8.5.1 光导管 389
8.5.2 最小边界矩形 391
8.5.3 得克萨斯一日游 392
8.6 小结 394
附录 395
参考文献 410

前言

  算法作为数学的一个分支已经存在几百年了。然而,算法真正焕发青春得到长足的发展,还是发生在20世纪电子计算机发明的时代。随着计算机技术的广泛应用,人们越来越清楚地认识到,作为计算机科学与工程最主要的技术——程序设计,其灵魂就是解决问题的算法。
  能否提供一本既能让广大读者清晰、轻松地理解算法思想,又能为读者提供算法的程序实现各种关键技术建议的书是作者一个很长时间的思考。现在摆在读者面前的这本书,就是这一思考的结果。作者希望本书在读者研习算法与程序设计时不仅是书桌前或是床头边的参考书,更多的是计算机旁的参考书。
  本书先按算法设计技巧分类为渐增型算法、递归分治算法、动态规划算法、贪婪算法、回溯算法和图的搜索算法等前6章。每章对2~3个经典问题针对一种算法设计技巧,给出解决问题的算法,并分析算法的时间复杂度。笔者认为,对于初学者来说,按算法的设计方法划分章节,算法思想的阐述比较集中,有利于入门。一旦具备了算法设计的基本方法,按应用领域划分专题深入学习,读者可以应用已学的方法综合起来解决比较复杂的问题。第7章的线性规划和第8章的计算几何可以算作这部分内容。在此基础上,读者可以更进一步探讨更前沿的随机算法、近似算法和并行算法等现代算法设计方法。本书之所以按照这样的8章编排,还有一个重要原因是它们之间有一定的前后逻辑关系:第1章渐增型算法和第2章分治算法是最基本的算法,并且在这两章内容展开的同时我们还介绍了后面各章所需要的数据结构,例如第2章介绍的优先队列就是第4章讨论贪婪算法时所需要的。建议读者以本书的章节顺序研读,特别是实现的程序中也有很多是前后呼应的代码段。
  算法理论对于程序设计实践的指导意义已经被大家所接受,但不管是在校学生还是已踏上职业征程的程序员,很多人对算法学习都有一种“枯燥繁难”的先人之见。如何有效地学习算法的设计与分析,是本书试图与读者一起探讨的最重要的目标之一。其实,算法都是针对具体问题的。对于要解决的问题进行深入理解与分析,是设计出正确有效的算法的前提。然而,“深入理解与分析”似乎是个模糊概念,怎样的“度”才能认为是对问题深入理解了呢?计算学科提出了一个非常重要的“标准”:简单地说,能够把一个问题输入与输出准确地提炼并表述出来,就可以认为是理解了这个问题。这样对问题的描述称为“问题的形式化描述”。一旦形式化地描述出了问题的输入与输出,也就能准确地把握住算法解决问题所需要的条件和所要达到的目标。换句话说,设计算法是要在问题的输入与输出之间架起一座通达的桥梁。本书以此为目标,无论是对正文中讨论的问题还是“动手做”题目中的问题或者是作为应用的ICPC问题,我们都给出其形式化描述。有了问题的输入与输出的数据表示,运用人们的常识、数学知识和科学知识建立起从输入到输出之间的对应关系,这就是算法。
  算法可以用自然语言或是图形等工具加以描述,但要将算法作为计算机程序的设计蓝图,则需要将其无歧义地表述出来。用伪代码表述算法是迄今为止人们所使用的最有效的方法。计算机程序设计语言当然也能做到无歧义地描述算法。事实上,市场上也有以某种具体的程序设计语言为描述工具的算法书籍,但这样的图书往往要面对一个两难问题:一方面,若要使具体语言描述的算法能直接运行,则必须做诸如变量声明、用该语言所提供的方式表示各种复杂的数学表达式以及其他操作等各种技术细节工作。这样就会大大降低算法描述的可读性,妨碍读者对算法思想本身的理解与接受。另一方面,如果为提高算法描述的可读性而省略上述的各种技术细节,则仍然回到伪代码描述的起点,让读者在实现程序时有隔靴抓痒的感觉。

精彩书摘

  1.1 算法设计与分析
  1.什么是算法
  众所周知,算法是程序的灵魂。只有对需要解决的计算问题有一个正确的算法,才可能编写出解决此问题的程序。所谓算法就是解决一个计算问题的一系列计算步骤有序、合理的排列。对一个具体问题(有确定的输入数据)依次执行一个正确的算法中的各操作步骤,最终将得到该问题的解。算法研究有着悠久的历史,内容极其丰富。人们对各种典型的问题研究出了很多经典的算法设计方法。例如,本书详细讨论的渐增型算法、分治算法、动态规划、贪婪策略和回溯算法等都是具有代表性的经典算法设计方法。对这些方法的学习,可以为我们在解决各种具体问题时设计出正确、高效的算法提供有益的启示。
  2.算法分析基本概念
  解决一个问题,算法不必是唯一的。对表示问题的数据的不同组织方式(数据结构),解决问题的不同策略(算法思想)将导致不同的算法。解决同一问题的不同算法,消耗的时间和空间资源量有所不同。算法运行所需要的计算机资源的量称为算法的复杂性。一般来说,解决同一问题的算法,需要的资源量越少,我们认为越优秀。计算算法运行所需资源量的过程称为算法复杂性分析,简称为算法分析。理论上,算法分析既要计算算法的时间复杂性,也要计算它的空间复杂性。然而,算法的运行时间都是消耗在数据处理上的,从这个意义上说,算法的空间复杂性不会超过时间复杂性。出于这个原因,人们多关注于算法的时间复杂性分析。本书中除非特别说明,所说的算法分析,仅局限于对算法的时间复杂性分析。
  为客观、科学地评估算法的时间复杂性,我们设置一台抽象的计算机,它只用一个处理机,却有无限量的随机存储器。它的有限个基本操作——算术运算、逻辑运算和数据的移动(比如对变量的赋值)均在有限固定时间内完成,我们进一步假定所有这些基本操作都消耗一个时间单位。

内页插图

信息反馈:如果您发现商品信息或者图片不准确,欢迎更新
权利声明: 1.京东商城上的所有商品信息、客户评价、商品咨询、网友讨论等内容,是京东商城重要的经营资源,未经许可,禁止非法转载使用。
2.本商品信息来自于出版社,其真实性、准确性、合法性、及时性由信息拥有者(出版社)负责,本站不提供任何保证,并不承担任何 法律责任。且因供应商发货等不可控因素、页面关于赠品信息以及商品封面图片信息变更的及时性等均由供应商负责,消费者需以收 到的实物为准。
3.若有建议或意见请您联系本网站,本网站会依相关法律对相关信息进行删除、修改或作相应处理。

查看此书的读者还看过

正在加载中,请稍候...

商品评价

正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...
正在加载中,请稍候...

京东商城·正品保证

购物指南
购物流程
会员介绍
团购/机票
常见问题
大家电
联系客服
配送方式
上门自提
211限时达
配送服务查询
配送费收取标准
如何送礼
Global Shipping
支付方式
货到付款
在线支付
分期付款
邮局汇款
公司转账
售后服务
售后政策
价格保护
退款说明
返修/退换货
取消订单
特色服务
夺宝岛
DIY装机
延保服务
京东卡
节能补贴