半部论语治天下: 《算法设计指南》(本科教学版)

算法设计指南(本科教学版)

0. 为何是半部

算法世界中的故事由作者娓娓道来, 各种设计技术非常自然地穿插其中, 读者更像是在阅读一本小说, 你没看错, 这就是Steven Skiena教授的名作The Algorithm Design Manual. 要是在美国亚马逊网站上输入“Algorithms”, 可以发现这本书长期排名居于前五, 而且还一度是计算机算法类的最畅销书籍(Best Seller). 你可随手翻开一页往下读去, 肯定觉得妙趣横生不忍释卷, 仿佛就像走进了Skiena教授的课堂一样, 这也许是它广受欢迎的主要原因吧. 此外, Skiena教授的主页上还提供了在线课程视频, 若是身临其境更能深入体会其妙.

考虑到国内算法课程教学情况, 我们认为本书的卷I(讨论“实用算法设计”)单独成书比较适合讲授, 而且携带这本“算法小说”也更为方便. 为此我们征求了作者本人的同意, 特将这本书的精简版(仅包含卷I)译出以飨读者. 不过, 阅读是一个可能随时中断的过程, 而原书中许多段落只能在课堂讲授的语境中才能理解, 为此我们补充了一些起承转合的词句. 此外, 作者对很多掌故信手拈来, 而且经常还有弦外之音, 妙则妙哉, 可是对于不能一窥堂奥的读者实为遗憾, 中译本尽量对它们给出注释.

1. 资源下载

我在GitHub上给出了如下材料:

  • 中文版序
  • 译者的话
  • 前言
  • 目录
  • 第10章:如何设计算法

后续我们将补充算法问题便览部分, 也就是《算法设计指南》后半部分的精髓. 可在原书配套网站的"By Problem"处查阅, 包含如下类型的问题:

  • 数据结构
  • 数值问题
  • 组合问题
  • 图问题: 多项式时间问题
  • 图问题: 难解问题
  • 计算几何
  • 集合与字符串问题

2. 一本书主义之"吸星大法":《算法设计指南》

注: 原文载于我的微信公众号"算法时空".

吸星大法

对于程序员来说, 算法可以说就是内功. 大家都知道, 要想功力高超, 必得勤学苦练.

可是, 如果功力不够又很想去行走江湖, 怎么办呢?

少年, 看你骨骼清奇, 是万中无一的算法奇才, 这里有本秘籍《算法设计指南》(本科教学版), 号称算法中的“吸星大法”, 马上就要上市了!

哇, 丁春秋的吸星大法! 居然还有这样的神作? 嗯, 它早已名噪江湖了:

《算法设计指南》由算法领域的知名专家Steven Skiena教授编写, 其主要内容包括基本算法设计、算法分析、数据结构、排序与查找、图算法、动态规划以及难解问题与近似算法. Skiena教授荣获了IEEE计算机科学与工程教学奖, 这本书则是其教学理念的最好展现. 该书长期居于算法畅销教材前列, 是一本不可多得的“算法设计指南”, 它不仅能作为计算机相关专业算法课程的教材, 对于相关领域从业人员亦是极具价值的参考书.

看完这个评价, 是不是很有兴趣? 且听我慢慢道来, 顺便告诉你《算法设计指南》(本科教学版)这本秘籍背后的故事.

关注算法思想

曾经看到个笑话: C++程序员面试时要对一个长为10000的数组a排序, 应聘者写下了一句:

std::sort(a, a + 10000);

考官莞尔一笑, 转向了下一题.

注: 当然上面的这句也可以写成:

std::sort(std::begin(a), std::end(a));

《算法设计指南》这本书的思想基本就是这样, 能用现成的库函数就不要自己写, 优先把程序组织起来. 以排序来说, 作者认为先把数据排序再进行处理是非常重要的一招, 有了排序之后的数据, 我们就可以:

  • 运行二分查找.
  • 找到差异最小的一组元素.
  • 统计元素的频率分布.
  • 构造出点集的凸包.

由此可以看出, 我们主要应该去关注算法思想, 再借助绝顶高手的深厚内力(不妨挑战一下std::sort函数的性能), 便可迸发出很强的武功招数. 事实上, 那些自己写排序的中级选手, 还真打不过你这个只会吸星大法的毛头小伙子呢.

更妙的是, 目前各种库函数层出不穷, 随随便便就可以吸取众多大牛的内力, 构建程序时只需心无旁骛地从实际出发建立合适的模型便可马到功成.

化为己有

《算法设计指南》不单授你吸取功力的方法, 还注重将内力逐渐化为自己的技能. 例如动态规划这种内力向来难以融合到体内, 而《算法设计指南》独创一派, 让你自己在意念中构造动态规划, 便能左右逢源. 秘籍里说得好:

一旦你理解了动态规划这种方式就会发现很好用, 它也许应该是最简单易用的算法设计技术了. 事实上, 我发现完全依靠自己思考来设计动态规划算法更为简单, 而在书里去查现成的算法还得找半天. 也就是说, 你要是还没有真正理解动态规划, 那它看起来就如同魔法一般. 你得弄明白其中的窍门才能去用它.

说到这里, 你肯定非常想看看如何完全依靠自己思考设计动态规划了.

算法世界搭车客指南

要避免所吸取的内功让你走火入魔, 那么最好按照作者推荐的内功心法来. 《算法设计指南》推荐了很多优秀的算法库和资源, 而这些精髓都在(http://www3.cs.stonybrook.edu/~algorith/), 作为新时代的算法设计者, 肯定更愿意在网络上阅读这些内容吧. 作者在前言里提到:

有位颇具洞察力的评论家因为这份便览非常强大的缘故, 将我的这本书称作“算法世界搭车客手册”(The Hitchhiker’s Guide to Algorithms).

能被评为“算法世界搭车客指南”, 和闪耀着宇宙终极答案(大家都知道是42)的那本《银河系搭车客指南》相提并论, 确实是一份极高的评价.

译者注释

这本书里面有很多典故, 还有很多笑话. 有些地方要是不认真看, 可能还理解不了作者的深意. 虽然吸星大法功力强大, 也需要指点一番才能理解.

多年以前很是佩服钱钟书老先生的《管锥编》, 可惜至今放在书架上未能看懂, 但先生的风范我是非常佩服的. 一条注释虽然短小, 但也是经过深思熟虑之后写出的结论, 而且有时候看注释比看原文更有趣.

所以, 我在翻译《算法设计指南》的时候践行了钱先生的理念, 为这本书编写了270条翻译注释(也就是说随手翻开就能看到“译者注”). 当然, 有的读者不喜欢注释, 他们喜欢那种读下顺畅的感觉而觉得注释很啰嗦, 只能对这部分读者报以歉意了.

War Story

“设计”是本书的核心, 作者不但以生动有趣的语言讲授了算法设计中的常用技术与思想, 还着重教导我们应从已有经典设计和实现中汲取力量来完成问题求解, 而这正是一个优秀算法工作者所必备的素养. 为了更全面真实地展现作者的算法设计观, 《算法设计指南》每章都给出了若干取自现实案例的精彩War Story, 读者可以从中深刻体验到优秀算法设计的曲折历程. 为了减轻阅读的难度, 作者淡化了繁难的算法分析而仅仅给出性能结论与对比, 这在同类算法书中是相当少见的.

实际上, War Story就是实战案例, 学习了内功心法再配合这个, 实在是无敌了. 关键在于, Skiena教授的文笔风趣幽默, 谈笑间灰飞烟灭收拾了许多算法难题, 这滋味着实酸爽哪!

一睹为快

当然, 作为微博/微信公众号“算法时空”的读者, 你将提前看到如下新鲜发布的材料——也就是《算法设计指南》(本科教学版)的目录和样章. 我们专门选择了第10章这份“吸星大法”的要诀赠送给你!

目录
样章

选购

《算法设计指南》(本科教学版)由清华大学出版社出版(2017年7月), ISBN号为978-7-302-45734-3, 定价为69元, 欢迎大家持续关注, 喜欢这本吸星大法秘籍的就转发到朋友圈吧!

可在各大电商购买此书:
天猫
亚马逊
当当
京东

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 171,401评论 25 707
  • 本文把程序员所需掌握的关键知识总结为三大类19个关键概念,然后给出了掌握每个关键概念所需的入门书籍,必读书籍,以及...
    dle_oxio阅读 11,075评论 6 244
  • 罗大伦讲《弟子规》,有一个贯穿始终的底层代码:家庭VS社会。他每一集都在强调,家庭是孩子走向社会的演练场。在家庭中...
    坤厚载物德合无疆阅读 416评论 0 0
  • 开发的时候对于UE一般会根据视觉图给一个xxx像素的资源,怎么对应到代码中的dp/sp/px ? 基本概念 px ...
    Skywalker_Yang阅读 495评论 0 0
  • 僻静的街道上有一家杂货店,只要写下烦恼投进卷帘门的投信口,第二天就会在店后的牛奶箱里得到答案。 这么神奇的事情也有...
    叶小诺阅读 304评论 2 1