图灵社区 : 阅读 : 《算法的乐趣》作者王晓华:"玩"过就是收获(图灵访谈)
这个要从上大学时候说起了。像我这样的懒人觉得拼音输入法太繁琐,于是就去学"表形码"(当然,因为笨的原因,现在还在用拼音输入法)。资深一点的游戏玩家都还记得,那个时候为了玩中文DOS游戏,很多人都装了UCDOS中文环境,UCDOS没有表形码,但是支持通过码表文件增加自定义输入法。我研究了Windows上的表形码码表文件(老师给的,适用于Windows 3.x版本)和UCDOS码表文件的格式,发现二者有一定的相似性:都是文本文件,有固定的格式,每一行由一组编码和一个字或词组成一个编码对。二者的区别仅仅在于一个文件是编码在前,对应的字或词在后面,另一个刚好相反,字或词在前,对应的编码在后面。码表文件有十几万行,手工修改是不可能了,刚好当时在上C语言课,就决定写个程序来做这个事情。
第一次运行我写的程序,十几秒钟都没有结束,我觉得程序挂了,于是我就"Ctrl+Break"了,因为我之前写的C语言作业,从来没有哪个程序运行时间超过1秒钟的。但是分析代码又觉得没有问题,看了遗留在磁盘上的码表文件,发现转换了几千行,并且内容是对的。于是再次运行程序,等了2-3分钟,程序结束了。我急不可待地将得到的码表文件导入UCDOS,发现可以用,当时就感觉非常有成就感。这是我第一次为解决一个实际的问题编写算法,尽管当时还没有算法、软件的概念,但是隐隐约约就觉得这东西有用,不是只用于完成作业,还可以解决实际的问题。后来就是接触更多的有用算法以及各种算法竞赛,一直到现在,写个程序解决问题几乎成了一种习惯。
问:《算法的乐趣》这本书在内容的设计上和其他同类型的书相比,最大的特点是什么?
在我学习算法的过程中,兴趣是最大的推动力,兴趣来自于我觉得这东西能解决问题,对自己有用。但是在我写《算法专栏》博客的时候,网上能看到的博客都是对各种竞赛题目的解答,这些竞赛题目虽然有趣,但是对很多人来说依然抽象,与程序员们日常的工作关系不大,难以提起大多数人的兴趣来学习。于是我就想,如过能通过一些现实中普遍应用的算法做切入点,通过这些例子让大家觉得算法是有用的,并通过这个来吸引大家关注算法,学习算法,从而达到提高能力的作用,岂不是个很好的主意?
在策划《算法的乐趣》这本书的时候,我依然沿用了这种思想。选取的例子都是大家生活中没有在意,但是却处处都会遇到的算法,希望以此来"鼓动"起大家学习算法的兴趣。所以本书只用了很少的章节介绍算法的本质和设计算法的常用思想,把主要内容放在介绍这些生活中的趣味算法的解决过程,并在这个过程中给出各种算法设计中常用的模式、技巧和思想,提醒读者在阅读过程中不仅关注本题的解决,更要关注解决这个问题过程背后的思想,既培养了兴趣,又提高了解决问题的能力。
问:算法学习是一条并不简单的路,请问你是否有其他优秀的算法书愿意推荐给读者们?阅读这些书的顺序和注意事项是什么?
就我的经验而言,在计算机上学习算法首先需要熟悉编程语言和数据结构,关于编程语言和数据结构有很多经典的书籍,我就不多介绍了。但就算法而言,我看过的书有Cormen的《算法导论》、Knuth的《计算机程序设计艺术》、Weiss的《数据结构与算法分析》、Levitin的《算法设计与分析基础》、Kleigberg的《算法设计》等等。想参加算法竞赛的同学可以参考刘汝佳等人编写的《算法艺术与信息学竞赛》,以及《ACM国际大学生程序设计竞赛题解》。因为时间过去太久了,已经不记得看这些书的顺序了,只记得最早看的是《算法导论》,关于顺序实在没有什么经验可谈。
至于如何读这些算法的经典书籍,我倒是有一些经验和大家分享。不管哪一本书,都不要泛泛地看一遍就觉得看懂了,而是要把书中的每一个例子算法都用程序写出来,这样才能留下深刻的印象。如果遇到看不懂的地方,不要停下来,跳过去看其他算法,过几天在回头来看,如果还看不懂就再过几天再回头来看。千万不要在一个地方停下来,否则你很可能就此失去兴趣,恐怕永远也看不完这本书了。
问:有哪些学习算法的网站值得推荐?
有很多游戏开发相关的算法介绍:
http://www.gamedev.net
http://theory.stanford.edu/~amitp/GameProgramming
http://www.gamasutra.com
http://www.sudoku.com
俄罗斯方块游戏的算法网站:
http://gforge.inria.fr/projects/mdptetris http://colinfahey.com/tetris/tetris.html
leetcode,最近很火的算法网站:
http://www.leetcode.com
Topcoder,也很经典,每周都有竞赛,有奖金的:
http://community.topcoder.com/tc
晋中教育网的"信息学竞赛辅导":
http://www.jzsyz.jzedu.cn/xxjs/suanfa/index.html
很多大学也有自己的竞赛题库,比如:
北大:http://poj.org/
杭电:http://acm.hdu.edu.cn/
华中科技大学:http://acm.hust.edu.cn/vjudge/toIndex.action
Read full article from 图灵社区 : 阅读 : 《算法的乐趣》作者王晓华:"玩"过就是收获(图灵访谈)
No comments:
Post a Comment