具宗万毕业于韩国延世大学(韩国著名高等学府)计算机系,之后曾在Innotive和NHN (NHN是韩国目前最大的互联网服务公司,旗下有韩国排名第一的搜索引擎NAVER和韩国排名第一的游戏公司Hangame)任软件工程师,目前在芝加哥高频交易(HFT)公司任交易算法开发工程师。另外,他还自2007年开始,参与了 Algospot 的运营和管理,此网站是专门为韩国编程竞赛参赛者们提供交流场所的网站。具宗万著有《算法问题实战策略》一书,本书通过解答编程竞赛中的问题使读者能够学习到各种算法的设计技巧和算法结构,进而提高自己的问题解决能力。
本书最大的特点在于,它详细介绍了其他图书未曾深入探讨的算法构思过程。《算法问题实战策略》尽可能细致地讲解了构建算法过程中必需的感悟和渐进式发展过程,展示了算法应用于解题的实践过程,这有助于读者直观理解算法,培养亲自设计算法或对算法进行变形的能力。
其实每个领域都一样,单靠机械地训练掌握技术是远远不够的。如果想最大限度地提高编程竞赛中的解题能力,需要不断检讨自己的弱势所在,进行更高层次的修炼。我建议各位经常回顾自己之前遇到过的问题,思考那些未能解决的问题需要哪些技巧、付出哪些努力;对于已经解决的问题,需要再想想有没有更简洁的解题方法。
确实,有些算法题目会给参赛者带来困扰,也容易让人忽略,但是能把问题中的各种情况全面考虑,是开发人员或电算学家的重要职业素养。
我认为,从学习算法或者参加编程竞赛的过程中,不仅仅可以获得算法和数据结构的知识、技术,最重要的是在给定的条件下寻找最优解决方法的思考方式。因此,即使无法直接应用竞赛中使用的技术,学习算法本身也不是一件浪费时间的事情。
我建议大家可以不断关注相关的主题,多多参加线上/线下活动,与志同道合的人多交流、多学习。大家一起分享关注点和知识点,形成良性竞争,这既能提高学习效率,又能激发学习兴趣。
学习算法和数学的先后顺序并不重要。我曾经也只对算法的实现感兴趣,而对数学不感冒,但意识到“要想深入理解算法就必须学习数学”这个事实后,才逐渐开始喜欢数学。从这一点上看,我认为有机会可以提前掌握数学知识,应该能提高算法学习的效率。希望大家不要犯我这样的失误。
对于不同领域的学习,经常会有不同的推荐书目,大家可以根据自己的研究领域寻找相关的书单。每当有需要的时候,我会去找来不同的书进行学习,所以很难说清楚究竟哪本书对我的帮助最大。
程序在何种环境下运行是十分重要的前提条件。在类似条件下,寻找最优算法是编程竞赛给我们带来的最大好处。具体说来,我们要端正心态,不拘泥于自己已知的算法,不断尝试运用符合条件的多种方法。
新出现的编程语言、技术、硬件最多只是让程序以成倍速度运行而已。高效算法和低效算法之间的差异很大,所以即使使用最新的硬件技术也无法挽救低效算法。
我建议将《算法导论》等理论型图书从头至尾通读,了解算法相关的重要知识,然后有选择地阅读自己需要的书籍即可。另外,可以到网上查找相关资料进行学习,在线资料通常比一般图书更有用。