如何学习算法

bourneli-123 2010-03-27 11:01:05
此类问题网上很多,看了一些,总是觉得不太适合自己。现在我想将自己的情况简单介绍一下,希望各位大侠提供一些建议,供我参考。
本人软件学院研一学生,本科时也是软件学院的。这里特别强调是软件学院,不是计算机学院,因为软件学院和计算机学院的培养方案不一样,计算机学院强调计算机科学方面的培养,而软件学院着重工程实践的训练。这两种培养模式最大的区别,(个人觉得)就是对算法的重视程度。计算机学院十分重视算法,并且算法学习氛围也很浓厚,每年ACM比赛都会吸引很多人。而软件学院不太重视算法的学习,本科阶段只开设数据结构课程,没有开设任何算法相关必修或选修课程。我觉得这是一种遗憾,我知道算法的重要性,并且也在平时有空的时候自学一点点(比如看《算法导论》),但是发现效果不太冥明显。
我学习算法的目的有两点:1)兴趣,算法比较有意思,比起做那些无聊的项目有意思多了;2)工作需要,我将来第一份工作很定是从事软件开发,了解常见算法和数据结构是必须的。我一直没有参加我们学校的ACM队,因为个人认为功利性太重,并且训练方式还是像高中一样的题海战术,我不太喜欢这种学习模式,这种类似于高中的学习方式,我不是太喜欢。可能我对我们学校ACM队理解得比较片面。不过参加ACM也有好处,可以认识很多大牛。
据我在网上了解到,学习算法需要一些数学知识做为铺垫,如数论,组合数学,图论等等。这里提到的每一个都可以写一本很厚很厚的书。我没有必要将这些东西研究的十分透彻,那是数学家的事情。我只需要了解里面的一些十分常见的概念、定理就可以了,以方便算法学习时知道是什么。
所以,希望大家介绍几本好书(如《算法导论》),交流一下大家学习算法的经验。我不求在短时间内突飞猛进,只求有一种好的方法长期积累。
...全文
22825 297 打赏 收藏 转发到动态 举报
写回复
用AI写文章
297 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjwzcnjsy 2012-10-07
  • 打赏
  • 举报
回复
杭电ACM课件是个不错的入门资料!
CCWinner 2012-09-30
  • 打赏
  • 举报
回复
个人感觉算法导论是一本综合的书,想仔细研究某个算法的话得看相关的书。和你相反,我学校参加ACM比较多的人都来自软件专业。。。计算机学院的人不多。。。。。。。
cnmhx 2012-09-29
  • 打赏
  • 举报
回复
原创最好!
yungmode 2012-09-29
  • 打赏
  • 举报
回复
mark
lys07962000 2012-09-25
  • 打赏
  • 举报
回复
软件学院,怎么也不如计算机学院
去看
http://bbs.kaoyan.com/t705353p1
cnmhx 2012-09-24
  • 打赏
  • 举报
回复
实践出真知!
chjj23 2012-09-21
  • 打赏
  • 举报
回复
见识了。。。
cooliufang 2012-09-18
  • 打赏
  • 举报
回复
花了15分钟看完所有的帖子,受益颇多呀!
从零基础开始,为了生计,正准备向算法迈进。
先从啃《算法导论》开始吧!
heiyemohe 2012-08-26
  • 打赏
  • 举报
回复
刚开始学算法,感觉象天书一样,数学没学好呀!
tukangzheng 2012-08-25
  • 打赏
  • 举报
回复
看算法导论 多做一些ACM的题目
乌鸦吴 2012-08-23
  • 打赏
  • 举报
回复
算法和思维,确实很重要。。进来学习学习
审什 2012-08-23
  • 打赏
  • 举报
回复
算法零基础表示压力很大,就会常见的搜索与排序。
chenzhichao2008 2012-08-21
  • 打赏
  • 举报
回复
先将课本的每一章,第一节,一一吃掉
jediael_lu 2012-08-21
  • 打赏
  • 举报
回复
一位高手对我的建议:
一般要做到50行以内的程序不用调试、100行以内的二分钟内调试成功.acm主要是考算法的
,主要时间是花在思考算法上,不是花在写程序与debug上。
下面给个计划你练练:

第一阶段:
练经典常用算法,下面的每个算法给我打上十到二十遍,同时自己精简代码,
因为太常用,所以要练到写时不用想,10-15分钟内打完,甚至关掉显示器都可以把程序打
出来.
1.最短路(Floyd、Dijstra,BellmanFord)
2.最小生成树(先写个prim,kruscal要用并查集,不好写)
3.大数(高精度)加减乘除
4.二分查找. (代码可在五行以内)
5.叉乘、判线段相交、然后写个凸包.
6.BFS、DFS,同时熟练hash表(要熟,要灵活,代码要简)
7.数学上的有:辗转相除(两行内),线段交点、多角形面积公式.
8. 调用系统的qsort, 技巧很多,慢慢掌握.
9. 任意进制间的转换

第二阶段:
练习复杂一点,但也较常用的算法。
如:
1. 二分图匹配(匈牙利),最小路径覆盖
2. 网络流,最小费用流。
3. 线段树.
4. 并查集。
5. 熟悉动态规划的各个典型:LCS、最长递增子串、三角剖分、记忆化dp
6.博弈类算法。博弈树,二进制法等。
7.最大团,最大独立集。
8.判断点在多边形内。
9. 差分约束系统.
10. 双向广度搜索、A*算法,最小耗散优先.

第三阶段:
前两个阶段是打基础,第三阶段是锻炼在比赛中可以快速建立模型、想新算法
。这就要平时多做做综合的题型了。
1. 把oibh上的论文看看(大概几百篇的,我只看了一点点,呵呵)。
2. 平时扫扫zoj上的难题啦,别老做那些不用想的题.(中大acm的版主经常说我挑简单的来
做:-P )
3. 多参加网上的比赛,感受一下比赛的气氛,评估自己的实力.
4. 一道题不要过了就算,问一下人,有更好的算法也打一下。
5. 做过的题要记好 :-)
jediael_lu 2012-08-21
  • 打赏
  • 举报
回复
各人说法都不一样,我觉得学算法就要学会 静心。
cnmhx 2012-08-21
  • 打赏
  • 举报
回复
我觉得,有几类情形应该区别对待。
一类是工程师类型的做算法的,这类当然需要掌握具体的技巧细节等等。
一类是仅仅以应用为目的的,只需要知道大致即可,无需细节。
另外一类是创造性地发展算法的,但这样的机会基本上并不存在于算法本身的领域。
nunumi 2012-08-15
  • 打赏
  • 举报
回复
嗯,学习啦
hsz3344 2012-08-14
  • 打赏
  • 举报
回复
还在数据结构中,加油啊~
寻找自我 2011-12-21
  • 打赏
  • 举报
回复
我们正好相反,。。
安子就是安子 2011-12-17
  • 打赏
  • 举报
回复
学习算法,从本科毕业开始,泪奔...
加载更多回复(247)

33,006

社区成员

发帖
与我相关
我的任务
社区描述
数据结构与算法相关内容讨论专区
社区管理员
  • 数据结构与算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧