图灵社区 : 阅读 : 《算法的乐趣》作者王晓华:“玩”过就是收获(图灵访谈)



图灵社区 : 阅读 : 《算法的乐趣》作者王晓华:"玩"过就是收获(图灵访谈)

这个要从上大学时候说起了。像我这样的懒人觉得拼音输入法太繁琐,于是就去学"表形码"(当然,因为笨的原因,现在还在用拼音输入法)。资深一点的游戏玩家都还记得,那个时候为了玩中文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

Labels

Algorithm (219) Lucene (130) LeetCode (97) Database (36) Data Structure (33) text mining (28) Solr (27) java (27) Mathematical Algorithm (26) Difficult Algorithm (25) Logic Thinking (23) Puzzles (23) Bit Algorithms (22) Math (21) List (20) Dynamic Programming (19) Linux (19) Tree (18) Machine Learning (15) EPI (11) Queue (11) Smart Algorithm (11) Operating System (9) Java Basic (8) Recursive Algorithm (8) Stack (8) Eclipse (7) Scala (7) Tika (7) J2EE (6) Monitoring (6) Trie (6) Concurrency (5) Geometry Algorithm (5) Greedy Algorithm (5) Mahout (5) MySQL (5) xpost (5) C (4) Interview (4) Vi (4) regular expression (4) to-do (4) C++ (3) Chrome (3) Divide and Conquer (3) Graph Algorithm (3) Permutation (3) Powershell (3) Random (3) Segment Tree (3) UIMA (3) Union-Find (3) Video (3) Virtualization (3) Windows (3) XML (3) Advanced Data Structure (2) Android (2) Bash (2) Classic Algorithm (2) Debugging (2) Design Pattern (2) Google (2) Hadoop (2) Java Collections (2) Markov Chains (2) Probabilities (2) Shell (2) Site (2) Web Development (2) Workplace (2) angularjs (2) .Net (1) Amazon Interview (1) Android Studio (1) Array (1) Boilerpipe (1) Book Notes (1) ChromeOS (1) Chromebook (1) Codility (1) Desgin (1) Design (1) Divide and Conqure (1) GAE (1) Google Interview (1) Great Stuff (1) Hash (1) High Tech Companies (1) Improving (1) LifeTips (1) Maven (1) Network (1) Performance (1) Programming (1) Resources (1) Sampling (1) Sed (1) Smart Thinking (1) Sort (1) Spark (1) Stanford NLP (1) System Design (1) Trove (1) VIP (1) tools (1)

Popular Posts