具体描述
本书内容按照算法策略分为7章。
第1章从算法之美、简单小问题、趣味故事引入算法概念、时间复杂度、空间复杂度的概念和计算方法,以及算法设计的爆炸性增量问题,使读者体验算法的奥妙。
第2~7章介绍经典算法的设计策略、实战演练、算法分析及优化拓展,分别讲解贪心算法、分治算法、动态规划、回溯法、分支限界法、线性规划和网络流。每一种算法都有4~10个实例,共50个大型实例,包括经典的构造实例和实际应用实例,按照问题分析、算法设计、完美图解、伪代码详解、实战演练、算法解析及优化拓展的流程,讲解清楚且通俗易懂。附录介绍常见的数据结构及算法改进用到的相关知识,包括sort函数、优先队列、邻接表、并查集、四边不等式、排列树、贝尔曼规则、增广路复杂性计算、最大流最小割定理等内容。
本书可作为程序员的学习用书,也适合从未有过编程经验但又对算法有强烈兴趣的初学者使用,同时也可作为高等院校计算机、数学及相关专业的师生用书和培训学校的教材。
作者简介
陈小玉,副教授,硕士,高级程序员,研究方向:智能计算、机器学习与数据挖掘。主讲《数据结构》、《算法设计与分析》、《人工智能》等专业课程,并发表过多篇计算机专业论文和项目。
目录信息
1.1 打开算法之门 2
1.2 妙不可言—算法复杂性 2
1.3 美不胜收—魔鬼序列 9
1.4 灵魂之交—马克思手稿中的数学题 16
1.5 算法学习瓶颈 21
1.6 你怕什么 22
第2章 贪心算法 24
2.1 人之初,性本贪 25
2.1.1 贪心本质 25
2.1.2 贪亦有道 26
2.1.3 贪心算法秘籍 26
2.2 加勒比海盗船—最优装载问题 27
2.2.1 问题分析 27
2.2.2 算法设计 28
2.2.3 完美图解 28
2.2.4 伪代码详解 29
2.2.5 实战演练 30
2.2.6 算法解析及优化拓展 31
2.3 阿里巴巴与四十大盗—背包问题 32
2.3.1 问题分析 32
2.3.2 算法设计 33
2.3.3 完美图解 33
2.3.4 伪代码详解 34
2.3.5 实战演练 35
2.3.6 算法解析及优化拓展 36
2.4 高级钟点秘书—会议安排 37
2.4.1 问题分析 38
2.4.2 算法设计 39
2.4.3 完美图解 40
2.4.4 伪代码详解 41
2.4.5 实战演练 42
2.4.6 算法解析及优化拓展 45
2.5 一场说走就走的旅行—最短路径 45
2.5.1 问题分析 46
2.5.2 算法设计 46
2.5.3 完美图解 47
2.5.4 伪代码详解 51
2.5.5 实战演练 52
2.5.6 算法解析及优化拓展 55
2.6 神秘电报密码—哈夫曼编码 59
2.6.1 问题分析 60
2.6.2 算法设计 62
2.6.3 完美图解 63
2.6.4 伪代码详解 65
2.6.5 实战演练 74
2.6.6 算法解析及优化拓展 77
2.7 沟通无限校园网—最小生成树 77
2.7.1 问题分析 78
2.7.2 算法设计 79
2.7.3 完美图解 80
2.7.4 伪代码详解 87
2.7.5 实战演练 88
2.7.6 算法解析 90
2.7.7 算法优化拓展 90
第3章 分治法 99
3.1 山高皇帝远 100
3.1.1 治众如治寡—分而治之 100
3.1.2 天时地利人和—分治算法要素 100
3.1.3 分治算法秘籍 101
3.2 猜数游戏—二分搜索技术 101
3.2.1 问题分析 101
3.2.2 算法设计 102
3.2.3 完美图解 102
3.2.4 伪代码详解 103
3.2.5 实战演练 104
3.2.6 算法解析与拓展 105
3.3 合久必分,分久必合—合并排序 107
3.3.1 问题分析 108
3.3.2 算法设计 108
3.3.3 完美图解 108
3.3.4 伪代码详解 108
3.3.5 实战演练 111
3.3.6 算法解析与拓展 112
3.4 兵贵神速—快速排序 113
3.4.1 问题分析 114
3.4.2 算法设计 115
3.4.3 完美图解 116
3.4.4 伪代码详解 117
3.4.5 实战演练 118
3.4.6 算法解析与拓展 120
3.5 效率至上—大整数乘法 124
3.5.1 问题分析 124
3.5.2 算法设计 125
3.5.3 完美图解 126
3.5.4 伪代码详解 128
3.5.5 实战演练 132
3.5.6 算法解析与拓展 135
3.6 分治算法复杂度求解秘籍 137
第4章 动态规划 141
4.1 神奇的兔子序列 142
4.2 动态规划基础 143
4.2.1 算法思想 143
4.2.2 算法要素 143
4.2.3 解题秘籍 143
4.3 孩子有多像爸爸—最长的公共子序列 145
4.3.1 问题分析 145
4.3.2 算法设计 147
4.3.3 完美图解 148
4.3.4 伪代码详解 152
4.3.5 实战演练 153
4.3.6 算法解析及优化拓展 155
4.4 DNA基因鉴定—编辑距离 156
4.4.1 问题分析 156
4.4.2 算法设计 158
4.4.3 完美图解 159
4.4.4 伪代码详解 161
4.4.5 实战演练 162
4.4.6 算法解析及优化拓展 163
4.5 长江一日游—游艇租赁 164
4.5.1 问题分析 164
4.5.2 算法设计 166
4.5.3 完美图解 166
4.5.4 伪代码详解 170
4.5.5 实战演练 171
4.5.6 算法解析及优化拓展 172
4.6 快速计算—矩阵连乘 172
4.6.1 问题分析 173
4.6.2 算法设计 176
4.6.3 完美图解 176
4.6.4 伪代码详解 180
4.6.5 实战演练 181
4.6.6 算法解析及优化拓展 182
4.7 切呀切披萨—最优三角剖分 183
4.7.1 问题分析 183
4.7.2 算法设计 186
4.7.3 完美图解 187
4.7.4 伪代码详解 191
4.7.5 实战演练 192
4.7.6 算法解析及优化拓展 194
4.8 小石子游戏—石子合并 194
4.8.1 问题分析 195
4.8.2 算法设计 197
4.8.3 完美图解 198
4.8.4 伪代码详解 203
4.8.5 实战演练 205
4.8.6 算法解析及优化拓展 206
4.9 大卖场购物车1—0-1背包问题 209
4.9.1 问题分析 210
4.9.2 算法设计 211
4.9.3 完美图解 212
4.9.4 伪代码详解 216
4.9.5 实战演练 217
4.9.6 算法解析及优化拓展 218
4.10 快速定位—最优二叉搜索树 220
4.10.1 问题分析 221
4.10.2 算法设计 225
4.10.3 完美图解 226
4.10.4 伪代码详解 239
4.10.5 实战演练 241
4.10.6 算法解析及优化拓展 243
4.11 动态规划算法秘籍 246
第5章 回溯法 248
5.1 回溯法基础 249
5.1.1 算法思想 249
5.1.2 算法要素 249
5.1.3 解题秘籍 251
5.2 大卖场购物车2—0-1背包问题 252
5.2.1 问题分析 252
5.2.2 算法设计 253
5.2.3 完美图解 255
5.2.4 伪代码详解 258
5.2.5 实战演练 259
5.2.6 算法解析 262
5.2.7 算法优化拓展 262
5.3 部落护卫队—最大团 265
5.3.1 问题分析 266
5.3.2 算法设计 267
5.3.3 完美图解 269
5.3.4 伪代码详解 274
5.3.5 实战演练 275
5.3.6 算法解析及优化拓展 277
5.4 地图调色板—地图着色 278
5.4.1 问题分析 278
5.4.2 算法设计 279
5.4.3 完美图解 280
5.4.4 伪代码详解 285
5.4.5 实战演练 286
5.4.6 算法解析及优化拓展 288
5.5 一山不容二虎—n皇后问题 289
5.5.1 问题分析 290
5.5.2 算法设计 291
5.5.3 完美图解 292
5.5.4 伪代码详解 300
5.5.5 实战演练 301
5.5.6 算法解析及优化拓展 303
5.6 机器零件加工—最优加工顺序 305
5.6.1 问题分析 305
5.6.2 算法设计 308
5.6.3 完美图解 308
5.6.4 伪代码详解 313
5.6.5 实战演练 314
5.6.6 算法解析 316
5.6.7 算法优化拓展 316
5.7 奇妙之旅1—旅行商问题 319
5.7.1 问题分析 319
5.7.2 算法设计 320
5.7.3 完美图解 321
5.7.4 伪代码详解 330
5.7.5 实战演练 331
5.7.6 算法解析及优化拓展 333
5.8 回溯法算法秘籍 336
第6章 分支限界法 338
6.1 横行天下—广度优先 339
6.1.1 算法思想 340
6.1.2 算法步骤 340
6.1.3 解题秘籍 341
6.2 大卖场购物车3—0-1背包问题 341
6.2.1 问题分析 342
6.2.2 算法设计 343
6.2.3 完美图解 345
6.2.4 伪代码详解 350
6.2.5 实战演练 352
6.2.6 算法解析 355
6.2.7 算法优化拓展—优先队列式分支限界法 356
6.3 奇妙之旅2—旅行商问题 366
6.3.1 问题分析 366
6.3.2 算法设计 367
6.3.3 完美图解 368
6.3.4 伪代码详解 371
6.3.5 实战演练 373
6.3.6 算法解析 376
6.3.7 算法优化拓展 377
6.4 铺设电缆—最优工程布线 385
6.4.1 问题分析 386
6.4.2 算法设计 386
6.4.3 完美图解 387
6.4.4 伪代码详解 399
6.4.5 实战演练 400
6.4.6 算法解析及优化拓展 403
6.5 回溯法与分支限界法的异同 404
第7章 线性规划网络流 405
7.1 线性规划问题 406
7.1.1 线性规划标准型 408
7.1.2 单纯形算法图解 409
7.1.3 解题秘籍 413
7.1.4 练习 413
7.2 工厂最大效益—单纯形算法 414
7.2.1 问题分析 414
7.2.2 完美图解 415
7.2.3 伪代码详解 418
7.2.4 实战演练 420
7.2.5 算法解析及优化拓展 423
7.3 最大网络流—最短增广路算法 424
7.3.1 问题分析 424
7.3.2 增广路算法 427
7.3.3 完美图解 431
7.3.4 伪代码详解 437
7.3.5 实战演练 439
7.3.6 算法解析 441
7.3.7 算法优化拓展—重贴标签算法ISAP 442
7.4 最小费用最大流—最小费用路算法 455
7.4.1 问题分析 456
7.4.2 算法设计 456
7.4.3 完美图解 457
7.4.4 伪代码详解 459
7.4.5 实战演练 461
7.4.6 算法解析 465
7.4.7 算法优化拓展—消圈算法 466
7.5 精明的老板—配对方案问题 468
7.5.1 问题分析 468
7.5.2 算法设计 469
7.5.3 完美图解 469
7.5.4 伪代码详解 470
7.5.5 实战演练 471
7.5.6 算法解析 475
7.5.7 算法优化拓展—匈牙利算法 475
7.6 国际会议交流—圆桌问题 480
7.6.1 问题分析 481
7.6.2 算法设计 482
7.6.3 完美图解 482
7.6.4 伪代码详解 484
7.6.5 实战演练 485
7.6.6 算法解析及优化拓展 489
7.7 要考试啦—试题库问题 489
7.7.1 问题分析 490
7.7.2 算法设计 490
7.7.3 完美图解 491
7.7.4 伪代码详解 493
7.7.5 实战演练 494
7.7.6 算法解析及优化拓展 498
7.8 太空实验计划—最大收益问题 499
7.8.1 问题分析 499
7.8.2 算法设计 500
7.8.3 完美图解 502
7.8.4 伪代码详解 505
7.8.5 实战演练 506
7.8.6 算法解析及优化拓展 510
7.9 央视娱乐节目购物街—方格取数问题 511
7.9.1 问题分析 511
7.9.2 算法设计 512
7.9.3 完美图解 513
7.9.4 伪代码详解 514
7.9.5 实战演练 516
7.9.6 算法解析及优化拓展 520
7.10 走着走着,就走到了西藏—旅游路线问题 521
7.10.1 问题分析 521
7.10.2 算法设计 523
7.10.3 完美图解 523
7.10.4 伪代码详解 525
7.10.5 实战演练 528
7.10.6 算法解析及优化拓展 532
7.11 网络流问题解题秘籍 533
附录A 特征方程和通项公式 534
附录B sort函数 537
附录C 优先队列 541
附录D 邻接表 549
附录E 并查集 555
附录F 四边不等式 561
附录G 排列树 565
附录H 贝尔曼规则 579
附录I 增广路中称为关键边的次数 582
附录J 最大流最小割定理 585
· · · · · · (收起)
读后感
用户评价
《趣学算法》这本书给我的感觉就像是把我带进了一个算法的游乐园。以前我觉得算法是高高在上的学术殿堂,普通人很难企及,但这本书用一种特别亲民的方式,把这些“高冷”的知识变得触手可及。我最欣赏的一点是,它在讲解过程中,始终保持着一种“授人以渔”的教学理念。它不仅仅是告诉你“怎么做”,更重要的是告诉你“为什么这么做”,并且会引导你去思考,让你自己去发现其中的规律。书中的每一个算法,作者都会从它的起源、解决的问题、到它的优缺点,都介绍得清清楚楚,而且还会对比不同的算法,分析它们的适用场景,这一点对我来说非常有帮助。我以前学算法的时候,总是搞不清楚什么时候用这个,什么时候用那个,这本书就帮我理清了思路。另外,它在讲到一些优化技巧的时候,也非常实用,不是那种理论上的空谈,而是能够直接应用到实际编程中的。我感觉自己读完这本书,不仅对算法有了更深入的理解,还学会了一些能够提升代码效率的好方法,这对我未来的学习和工作都大有裨益。
哇,我最近刚入手一本新书,名字叫《趣学算法》,拿到手的时候就被它简洁大方的封面吸引了。这本书的排版设计真的太舒服了,字体大小适中,行距恰到好处,每一页都让人感觉很放松,一点也不像那种枯燥的技术书籍。我特别喜欢它用的插图,不是那种生硬的技术图表,而是那种有点卡通风格的,把一些抽象的概念具象化了,第一次看算法的时候,我总觉得像在跟一堆无聊的数学公式打交道,但这本书的插图简直是救星,让我一下子就理解了那些复杂的逻辑。而且,它在讲解概念的时候,没有一开始就丢给我一大堆术语,而是循序渐进,从最基础的东西开始讲起,就好像老师在耐心解答你的问题一样,一点也不怕你问得太简单。书里面还穿插了一些小故事和实际应用场景的例子,这一点真的太棒了!让我觉得算法不是冰冷的理论,而是能解决实际问题的工具,瞬间就激发了我继续往下读的兴趣。我之前尝试过几本算法书,但都因为看不懂或者觉得枯燥而放弃了,这次《趣学算法》给了我全新的体验,感觉真的能坚持下去,把这些知识学扎实。
拿到《趣学算法》之后,我最大的感受就是它的“有趣”名副其实。翻开第一页,就有一种耳目一新的感觉,完全颠覆了我对算法书籍的刻板印象。书中的语言风格特别轻松幽默,不是那种一本正经的学术腔调,而是像朋友在给你讲故事一样,把原本晦涩难懂的算法知识讲得活灵活现。我最喜欢它在讲解一些核心概念时,会用一些非常形象的比喻,比如讲到递归的时候,它用了一个“套娃”的比喻,一下子就让我明白了它的原理,再也不用对着那些函数调用堆栈发愁了。而且,这本书的作者好像特别懂我们初学者的痛点,他会提前预判你会遇到的问题,然后在讲解的过程中给出提示和解决方案,这一点真的太贴心了!我最怕的就是看了半天,发现自己根本没理解,然后又得回头去查资料,浪费时间。这本书就很好地避免了这种情况,让我能够流畅地一路读下去。除了理论讲解,书中还提供了不少小练习题,这些题目设计得很有代表性,能够很好地检验我刚才学到的知识,而且答案解析也写得很详细,让我知道自己错在哪里,下次怎么改进。
坦白说,我曾经对算法一直心存畏惧,总觉得它是程序员的“硬骨头”,学起来特别费劲。直到我遇到了《趣学算法》,我的看法才彻底改变。这本书的魅力在于它的“趣”字,它让我发现算法也可以很有意思。作者在书中运用了大量的图示和生活中的例子,将抽象的算法逻辑变得可视化、具象化。比如,在解释排序算法时,它就用生动的比喻,把各种排序方法比作不同的排队方式,一下子就让我理解了它们之间的差异和效率。而且,这本书的叙述语言非常流畅自然,读起来一点也不觉得枯燥,就像是在听一位经验丰富的老师娓娓道来。它不是那种堆砌代码的教科书,而是注重概念的理解和思想的传达。我最喜欢它在每一章的结尾都会有一个“小结”或者“思考题”,引导读者回顾本章内容,并思考一些延伸性的问题,这对于加深理解非常有帮助。我感觉自己读完这本书,不仅仅是学到了一些算法知识,更重要的是培养了解决问题的思维方式,这对于我以后遇到更复杂的编程问题非常有启发。
《趣学算法》这本书,真的让我对算法这门学科有了全新的认识。它不是那种冷冰冰的技术手册,而是充满了智慧和趣味。我印象最深刻的是,它在讲解每一个算法时,都会从一个非常具体的问题出发,然后一步步地引导你找到解决方案,这个过程就像是在解谜一样,让人充满成就感。书中的图解设计非常精妙,把复杂的算法流程以一种清晰易懂的方式呈现出来,我感觉比单纯看文字和代码更容易理解。而且,作者在语言运用上也非常考究,既有科学的严谨性,又不失活泼的趣味性,读起来一点也不会感到疲惫。这本书的逻辑结构也很清晰,每一章都是一个独立的知识点,但又前后呼应,构成了一个完整的知识体系。我之前也读过一些算法相关的书籍,但很多都让我觉得过于理论化,难以落地,而《趣学算法》则非常注重理论与实践的结合,书中还穿插了一些面试中常考的算法题,并给出了详细的解题思路,这一点对我这种准备面试的人来说,简直是福音!让我觉得学到的东西能够真正用得上。
真正的浅显易懂,,
真正的浅显易懂,,
在图书馆翻了几本觉得这个比较适合我,分析-设计-图解-伪码解-实际代码-follow up的形式,便于很快复习集中主要刷题套路...#其实, 我是为了找工作的...逃~
入门。讲的内容不多,但是讲的还算清楚
这本书对新手很友好,比较简单,讲了几种算法策略,结合配图能够很好掌握,第七章的网络流最后的2.3个问题最大流最小割如何构建这个模型,问什么构建,比如二分图左右两边问什么是的容量∞,我不是很理解。但总体来说这本书很不错。