高效算法:竞赛、应试与提高必修128例

内容简介

本书旨在探讨如何优化算法效率,详细阐述了经典算法和特殊算法的实现、应用技巧和复杂度验证过程,内容由浅入深,能帮助读者快速掌握复杂度适当、正确率高的高效编程方法以及自检、自测技巧,是参加 ACM ICPC、Google Code Jam 等国际编程竞赛、备战编程考试、提高编程效率、优化编程方法的参考书目。

适读人群:本书适合算法爱好者和编程人员,尤其是参加编程竞赛和考试的人员,可作为参加编程竞赛的备赛参考书目。

编辑推荐
  • 法国畅销算法与编程参考书
  • 128个简单、实用的算法实例
  • 透彻讲解基于 Python 的高效算法思路与编程要点
  • 战胜编程竞赛技术难关
  • 在线提供更多趣题和拓展实战例子
  • 国际编程大赛导师经验精髓,破解竞赛的制胜秘籍
  • 提高竞赛、应试与编程技能
作者简介

Christoph Dürr,法国国家科学研究院研究员,巴黎皮埃尔-玛丽 · 居里大学博士生导师,Operation Research 科研组研究主任。

Jill-Jênn Vie,法国高等电力学院博士、算法讲师,担任法国高等师范学院 Paris-Saclay 团队在 ACM 竞赛中的算法导师;曾任法国国际编程大赛 Prologin 主席,并于2014年获 Google RISE Award。

本书内容
译者序

22 年前的秋天,我刚刚进入初中时,得到了一台中华学习机。它的 1 MHz 主频甚至赶不上现在一台 10 元钱的计算器。我从第一行用 BASIC 语言写的 IF/ELSE 开始,开启了自己的编程人生。1996 年,还是初中生的我凭着不多的算法和逻辑知识参加了国家信息学奥林匹克竞赛,当然,最后只得到了安慰奖。二十多年后,我得知当年斩获金牌的是王小川,如今搜狗的 CEO。

现在,我在一家互联网公司负责技术并管理研发团队。从自身的职业发展经历,以及在中国和法国的招聘和用人经历中,我深刻体会到了软件工程师的成就在很大程度上取决于他的专业知识视野。这是个很现实的问题。因此,我在得到翻译这本法语技术书的机会时,欣然接受了这个颇有难度的任务。

法国是一个盛产数学家的国度。不同于大家的传统印象,法国人在“浪漫”的同时,在工作和科研中非常讲究逻辑与验证——产品原型要验证,技术探索要验证。证明和实验有着同样不可或缺的地位。理论和实践的结合,让法国学界和企业界在相当长时间内保持着旺盛的生命力与创造力。这是我在法国 8 年学习和工作中的真实体验。

本书由法国国际信息学奥林匹克竞赛“国家队”辅导老师编写,凝聚了作者辅导高中生、大学生参加国际信息学奥林匹克竞赛的大量经验和技巧。书中提及的部分算法十分常见,在实际工作中也十分常用。但也有另一部分算法,例如舞蹈链算法以及一些涉及图论与匹配的算法,在中国的大学教育都不太提及。

在人工智能和深度学习大发展的今天,Python 语言、算法,特别是证明算法可靠性和高效性的能力,是进入大数据和人工智能人才市场的入场券。希望读者善用 Github 和作者准备的源代码网站,以及网上能够找到的技术资源,在尝试代码实现的同时,去理解算法复杂度的证明过程,从而彻底掌握并熟练运用这些凝聚了很多代人智慧的无形资产。

我要感谢教我写下第一行代码的哥哥史轶,支持并指导我参加国家信息学奥林匹克竞赛的湖北省十堰市东风汽车公司第四中学的陈长国老师,用大量课外知识开拓了我的见识的东风汽车公司第一中学的吴华山老师,支持我前往法国留学的父母,以及一直以来给我带来太多快乐的妻子和孩子。

由于个人水平有限,译文不能做到尽善尽美,欢迎读者通过我的个人网站 www.jetwaves.cn 与我交流。

史世强

2017 年 10 月于巴黎

我们编写本书的主要动力是对 Python 语言编程的热爱和对解决算法问题的激情。Python 语言能够如此打动人,是因为这种语言能让我们编写清晰而优雅的代码,把注意力集中于算法的本质步骤,而不需要过多关注复杂的语法和数据结构。同时,我们用 Python 完成编写程序后数个月再回头来读的时候,仍然可以理解自己写的代码,这一点十分有教益。作为本书的作者,我们最希望的是能接受新的挑战,其次是能经得住各种测试,因为一段程序代码只有在毫无 bug 地实现后,我们才算真正地掌握了编程技巧。我们希望用自己的热情感染读者,营造出一种氛围,鼓励大家学习和掌握扎实的算法和编程基础知识。这种学习经历往往会受到大型软件企业招聘人员的赏识,而对于软件工程师或计算机科学教育工作者来说,这对其整个职业生涯也会有所帮助。

本书按照主题而不是技术分类收录了 128 种算法。其中某些算法是常见的经典算法,另一些则不太常见。尤其在读者备战 ACM-ICPC、Google Code Jam、Facebook Hacker Cup、Prologin 和 France-ioi 等编程竞赛时,本书编写的大量问题将起到积极的辅导作用。我们希望本书能够成为算法的基础教程和高级程序设计教程的参考,或者能让学习数学和计算机专业的读者看到与众不同的进修内容。读者可以在网站 tryalgo.org(http://tryalgo.org/code/)上找到本书使用的源代码库 {1[也可以用 PyPI 直接安装后下载查看并执行。——译者注]},以及用来测试代码调试结果和实现性能的链接。

感谢 Huong 和智子,如果没有这两位朋友的支持,本书是无法完成的。感谢法国综合理工学院和法国高等师范学院 Cachan 分校的学生们,他们多次通宵达旦的训练,为本书提供了很多素材。最后,感谢所有审阅手稿的朋友们,他们是 René Adad、Evripidis Bampis、Binh-Minh Bui-Xuan、Stéphane Henriot、Lê Thành Dững Nguyễn、Alexandre Nolin 和 Antoine Pietri。本书的作者之一要特别感谢在 Tiers 高中时的老师 Yves Lemaire 先生:当年就是在这位老师的启迪下,作者才初次发现了本书 2.5 节中描述的“宝藏”。

最后,我们希望读者在碰到算法难题时,能够耐心地花时间去思考。祝愿大家能在豁然间找到解答,甚至是一个优雅的解答,享受到胜利的喜悦之情。

好,我们要开始了!

第1章 引言
第2章 字符串
第3章 序列
第4章 数组
第5章 区间
第6章 图
第7章 图中的环
第8章 最短路径
第9章 耦合性和流
第10章 树
第11章 集合
第12章 点和多边形
第13章 长方形
第14章 计算
第15章 穷举

阅读全文: http://gitbook.cn/gitchat/geekbook/5bbd724d9ccd7c1379f30155

评论 16
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值