|||
最近chinaunix论坛进行了关于算法学习的讨论(http://bbs.chinaunix.net/thread-4130313-1-1.html) ,下文是我的一点感受,放在这里:
1. 平常是如何学习(夯实)算法和数据结构基础知识的?
本人的工作是生物信息,原来不是计算机专业出身,考博士的时候恶补了一下算法知识,用的是严蔚敏的算法书,受益颇深。幸好学到还好,考试成绩还不错。
感觉还是有考试压力下,有动力学习,做题加实践出真知。
楼上有人把算法学习分为三个部分,我觉得分类分得很好,很多也说到我心里。也就这三个方面,谈一下自己的感受。
1).基本数据结构及算法概念
这部分确实需要自己下深功夫,如果没有硬功夫,很难理解透算法的基本概念,这里没有捷径可言。数据结构从简单的线性表开始,到树结构,图结构。算法的学习要与数据结构的学习结合,但要稍后。递归算法和动态规划是两个里程碑的算法概念,哈希和链表是用得最多的结构,只有深入掌握了这些,才算入门。其他的算法技巧在此基础上,才能慢慢展开。
2).算法分析
这个领域又叫算法复杂性研究,是一个计算机科学领域的金字塔的领域,要有较深的数学,包括离散数学和高等数学的基础。理解这个领域的概念非常有助于算法的重要性,理解别人的软件为什么会采用相应的算法和数据结构,如何评价它们等等。但毕竟这个领域是一个学术领域,如果不是为了在这个科学领域做出研究贡献,对于大多数的计算机应用人才,个人认为点到而止比较好。
3).算法设计与应用
这才是大多数计算机应用人才需要的部分,在算法设计时,我们一般考虑的因素
a) 代码编写时间、可读性和程序运行效率的平衡;
b)算法的时间效率和空间效率的平衡;
c)算法的精确性和效率的平衡
。。。。。
这里仅就a)多说几句,有的学过一点算法的人可能对算法有痴迷,开发时总想把程序写得尽可能的快或少占内存,浪费很多时间在算法改良,同时使程序丧失了可读性,本人觉得这是不好的。当然这不是否定在算法学习阶段的精益求精。
2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
算法对我的生物信息学工作非常有帮助,体现在这样几个方面:
a)对程序设计的直接帮助。如图论算法应用于网络研究,动态规划用于序列分析,树的递归用于进化树研究等等。
b)理解别人的软件的算法和数据结果,以便更好的应用。如Blast等常用的软件,生物信息的大部分工作在于软件整合,了解这些软件的内部,才能更好的应用,当然这里除了算法还有统计学等知识,也是很有必要的。
c)真正欣赏到计算机科学的美感。当你理解了一种新的数据结构的妙处,当你把程序的速度或内存效率成十上百倍的提高,当你搭建了一个新的数据和计算平台,还有什么能比此时计算机带给你的美妙更能吸引人的呢?
3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
我面试过一些生物信息的学生,但大多在算法方面没有太深的基础。其实算法并不是那么难的,难的他们感兴趣的心。题目这里就不说了。
Archiver|手机版|科学网 ( 京ICP备07017567号-12 )
GMT+8, 2024-11-17 23:13
Powered by ScienceNet.cn
Copyright © 2007- 中国科学报社