首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

怎的才算熟练掌握数据结构、常用算法?总结

2012-10-10 
怎样才算熟练掌握数据结构、常用算法?-总结前久发了一个帖子(怎样才算熟练掌握数据结构、常用算法?)好象发出

怎样才算熟练掌握数据结构、常用算法?-总结
前久发了一个帖子(怎样才算熟练掌握数据结构、常用算法?)
好象发出了大家的心声,感兴趣的人比较多,相信很多人想从帖子里找到答案,
此帖子把比较好的几个总结出来方便大家学习.


 散分
  前20位都有分.


节约版
------------------------------------------------------
bigbug9002:
不可能都完全记住那么多的算法. 
常用算法,拿过来就可以写出来 
不常用的,拿起书来,看10分钟,就能理解算法(因为以前记过). 
对以前没有记过的算法,就不好说了,难的可能要研究好几天. 
这样就可以了. 

应该熟练掌握的常用的算法应该有: 
各种排序算法(插入排序、冒泡排序、选择排序,快速排序,堆排序,归并排序) 
线性表(一般的线性表,栈,队列)的插入和删除 
二叉树的遍历(前序,中序,后序) 
图的遍历(深度优先,广度优先) 
二分法查找,排序二叉树,Hash查找(处理冲突的方法)。 

个人观点.
------------------------------------------------------

***版
------------------------------------------------------
yeka
http://www.douban.com/review/2130819/ 

数据结构和算法是程序的根本——为什么?! 
2009-07-10 22:44:19   来自: BlueDavy (努力看书) 
编程之美--微软技术面试心得的评论  

  转自博客。 
   
  应该是差不多两个月前收到了这本书,一直到最近才抽出时间来看了下,这本书的开篇的第一题现在基本已经成了经典中的经典了,相信很多人都因为这个控制CPU使用率的题从而买了这本书的,在我自己看过这本书后我同时相信买了这本书的人应该会觉得非常的值得,要写出合理实现需求、高性能以及大数据量的程序,数据结构和算法就成为关键要素了,这本书用简短的题目给大家回顾了一些经典的算法。 
   
  首先,这本书以微软面试题吸引了众多人的梦想,毕竟微软的技术强这是毋庸置疑的,面试过不少的人,自己也觉得面试题真的是非常的难出,毕竟面试要求的是面试官在短短的几十分钟或一个小时内考察面试者是否符合公司的要求,在看《编程之美》序中看到邹欣因为面试一个进行过CPU压力测试的面试者时,想到了那道经典的控制CPU使用率的问题,从这道题我们可以看到考察面试人员对一项技术掌握是否精通的考评标准,我觉得和我之前写的那几篇关于如何考察面试者是否达到了精通的一些题是差不多同样的道理,毕竟精通这两个字不是随便就能达到的,从《编程之美》这本书中也看到了微软在考察面试者能力时的要求是非常高的,彻底颠覆了我对微软亚洲研究院这边的看法,:),另外从这本书列举的一些题目可以看出微软出的面试题的水准确实是相当高的,可以做到在短时间内充分的考察面试者在该方面的能力,我想这也是大部分面试官在出面试题时需要尽量达到的目标。 
   
  以上是从面试题的角度看这本书,接着来看看这本书的内容,估计现在书中的很多题目都已经成为了业界讨论的焦点话题了,像控制CPU使用率、双线程下载、数独游戏、24点、电梯调度、连连看等等一系列经典的题目,这些题目对于纠正目前很多业界从业人士对数据结构和算法不重视的看法应该是会有帮助的,当我在做中小型企业应用开发的时候,我也一直认为数据结构和算法即使不掌握也是没什么关系,而现在我也非常重视数据结构和算法了,现在在做面试的时候对于科班出身的同学,我会问问数据结构、算法的成绩,另外还有一个和书中同样的看法就是,数学非常重要,写程序和我们在学数学时解方程其实没有太大的差别,所以我认为数学学的好的人大部分是比较适合从事软件行业的,:),仅为个人看法,书中在数学方面也列举了不少经典的题目,像寻找发帖“水王”、寻找数组中的最大值和最小值等等。 
   
  总体而言,这本书并不是说要告诉大家面试微软的技巧,去死记硬背这些答案,那没有多少意义的,毕竟面试官更多的其实考察的是面试者的逻辑思维能力以及对相关知识的掌握程度,何况面试官通常都是会调整题目的,并不是说每次问的都是一样的,我想这本书能够给大家带来的最多的参考就是理解什么才是真正的精通,另外也给大家呈现了数据结构和算法为什么会是程序的根本,而对于要实现高性能以及海量数据处理的程序这些就更为关键了,因此个人觉得除了这本书之外,数据结构和算法相关的书即使不是科班出身的人也是应该仔细学习学习的。 
------------------------------------------------------


[解决办法]
学习路很长,同志仍需努力。。。。。。。。。。
[解决办法]
支持!!
[解决办法]
pojXXXX 这些是什么东西的代号啊?
[解决办法]
PKU Online Judge 北大ACM题库?
[解决办法]
我认为主要还是多练和多思考!!! 加油楼主!!!
[解决办法]
挺!
[解决办法]
相对论的体现
[解决办法]
暂时的项目是用不到什么算法了,什么时候用到什么时候再学吧·~
[解决办法]
up
[解决办法]
要多做多想
[解决办法]
大学学的都快忘了
[解决办法]
李开复的演讲:算法的力量

算法是计算机科学领域最重要的基石之一,但却受到了国内一些程序员的冷落。许多学生看到一些公司在招聘时
要求的编程语言五花八门就产生了一种误解,认为学计算机就是学各种编程语言,或者认为,学习最新的语言、
技术、标准就是最好的铺路方法。其实大家都被这些公司误导了。编程语言虽然该学,但是学习计算机算法和理
论更重要,因为计算机算法和理论更重要,因为计算机语言和开发平台日新月异,但万变不离其宗的是那些算
法和理论,例如数据结构、算法、编译原理、计算机体系结构、关系型数据库原理等等。在“开复学生网”上,有位


同学生动地把这些基础课程比拟为“内功”,把新的语言、技术、标准比拟为“外功”。整天赶时髦的人最后只懂
得招式,没有功力,是不可能成为高手的。

算法与我
当我在1980年转入计算机科学系时,还没有多少人的专业方向是计算机科学。有许多其他系的人嘲笑我们
说:“知道为什么只有你们系要加一个‘科学’,而没有‘物理科学系’或‘化学科学系’吗?因为人家是真的科学,不
需要画蛇添足,而你们自己心虚,生怕不‘科学’,才这样欲盖弥彰。”其实,这点他们彻底弄错了。真正学懂计算
机的人(不只是“编程匠”)都对输血有相当的造诣,既能用科学家的严谨思维来求证,也能用工程师的务实手段来
解决问题——而这种思维和手段的最佳演绎就是“算法”。记得我读博时写的Othello对弈软件获得了世界冠军。
当时,得第二名的人认为我是靠侥幸才打赢他,不服气地问我的程序平均每秒能搜索多少步棋,当他发现我的软
件在搜索效率上比他快60多倍时,才彻底服输。为什么在同样的机器上,我可以多做60倍的工作呢?这是因为
我用了一个最新的算法,能够把一个指数函数转换成四个近似的表,只要用常数时间就可得到近似的答案。在这
个例子中,是否用对算法才是能否赢得世界冠军的关键。还记得1988年贝尔实验室副总裁亲自来访问我的学
校,目的就是为了想了解为什么他们的语音识别系统比我开发的慢几十倍,而且,在扩大至大词汇系统后,速度
差异更有几百倍之多。他们虽然买了几台超级计算机,勉强让系统跑了起来,但这么贵的计算资源让他们
的产品部门很反感,因为“昂贵”的技术是没有应用前景的。在与他们探讨的过程中,我惊讶地发现一个O
(n*m)的动态规划(dynamic programming)居然被他们做成了O(n*n*m)。更惊讶的是,他们还为此发表了
不少文章,甚至为自己的算法起了一个很特别的名字,并将算法提名到一个科学会议里,希望能得到大奖。当时,
贝尔实验室的研究员当然绝顶聪明,但他们全都是学数学、物理或电机出身,从未学过计算机科学或算法,才犯
了这么基本的错误。我想那些人以后再也不会嘲笑学计算机科学的人了吧!

网络时代的算法
有人也许会说:“今天计算机这么快,算法还重要吗?”其实永远不会有太快的计算机,因为我们总会想出新的应
用。虽然在摩尔定律的作用下,计算机的计算能力每年都在飞快增长,价格也在不断下降。可我们不要忘记,需要
处理的信息量更是呈指数级的增长。现在每人每天都会创造出大量数据(照片,视频,语音,文本等等)。日益先进
的纪录和存储手段使我们每个人的信息量都在爆炸式的增长。互联网的信息流量和日志容量也在飞快增长。在科
学研究方面,随着研究手段的进步,数据量更是达到了前所未有的程度。无论是三维图形、海量数据处理、机器学
习、语音识别,都需要极大的计算量。在网络时代,越来越多的挑战需要靠卓越的算法来解决。再举另一个网络时
代的例子。在互联网和手机搜索,如果要找附近的咖啡店,那么搜索引擎该怎么处理这个请求呢?最简单的办法
就是把整个城市的咖啡馆都找出来,然后计算出它们的所在位置与你之间的距离,再进行排序,然后返回最近的
结果。但该如何计算距离呢?图论里有不少算法可以解决这个问题。这么做也许是最直观的,但绝对不是最迅速
的。如果一个城市只有为数不多的咖啡馆,那么这么做应该没什么问题,反正计算量不大。但如果一个城市里有
很多咖啡馆,又有很多用户都需要类似的搜索,那么服务器所承受的压力就大多了。在这种情况下,我们该怎样
优化算法呢?首先,我们可以把整个城市的咖啡馆做一次“预处理”。比如,把一个城市分成若干个“格子
(grid)”,然后根据用户所在的位置把他放到某一个格子里,只对格子里的咖啡馆进行距离排序。问题又来了,如
果格子大小一样,那么绝大多数结果都可能出现在市中心的一个格子里,而郊区的格子里只有极少的结果。在这
种情况下,我们应该把市中心多分出几个格子。更进一步,格子应该是一个“树结构”,最顶层是一个大格——整
个城市,然后逐层下降,格子越来越小,这样有利于用户进行精确搜索——如果在最底层的格子里搜索结果不
多,用户可以逐级上升,放大搜索范围。上述算法对咖啡馆的例子很实用,但是它具有通用性吗?答案是否定的。
把咖啡馆抽象一下,它是一个“点”,如果要搜索一个“面”该怎么办呢?比如,用户想去一个水库玩,而一个水库
有好几个入口,那么哪一个离用户最近呢?这个时候,上述“树结构”就要改成“r-tree”,因为树中间的每一个
节点都是一个范围,一个有边界的范围(参考http://www.cs.umd.edu/~hjs/rtrees/index.html)。通过这
个小例子,我们看到,应用程序的要求千变万化,很多时候需要把一个复杂的问题分解成若干简单的小问题,然
后再选用合适的算法和数据结构。

并行算法:Google的核心优势
上面的例子在Google里就要算是小case了!每天Google的网站要处理十亿个以上的搜索,GMail要储存几千
万用户的2G邮箱,Google Earth要让数十万用户同时在整个地球上遨游,并将合适的图片经过互联网提交给
每个用户。如果没有好的算法,这些应用都无法成为现实。在这些的应用中,哪怕是最基本的问题都会给传统的
计算带来很大的挑战。例如,每天都有十亿以上的用户访问Google的网站,使用Google的服务,也产生很多很
多的日志(Log)。因为Log每份每秒都在飞速增加,我们必须有聪明的办法来进行处理。我曾经在面试中问过关
于如何对Log进行一些分析处理的问题,有很多面试者的回答虽然在逻辑上正确,但是实际应用中是几乎不可行
的。按照它们的算法,即便用上几万台机器,我们的处理速度都根不上数据产生的速度。那么Google是如何解决
这些问题的?首先,在网络时代,就算有最好的算法,也要能在并行计算的环境下执行。在Google的数据中心,
我们使用的是超大的并行计算机。但传统的并行算法运行时,效率会在增加机器数量后迅速降低,也就是说,十
台机器如果有五倍的效果,增加到一千台时也许就只有几十倍的效果。这种事半功倍的代价是没有哪家公司可以
负担得起的。而且,在许多并行算法中,只要一个结点犯错误,所有计算都会前功尽弃。那么Google是如何开发
出既有效率又能容错的并行计算的呢?Google最资深的计算机科学家Jeff Dean认识到,Google所需的绝大
部分数据处理都可以归结为一个简单的并行算法:Map and Reduce
(http://labs.google.com/papers/mapreduce.html。这个算法能够在很多种计算中达到相当高的效率,
而且是可扩展的(也就是说,一千台机器就算不能达到一千倍的效果,至少也可以达到几百倍的效果)。
Map and Reduce的另外一大特色是它可以利用大批廉价的机器组成功能强大的server farm。最后,它的容
错性能异常出色,就算一个server farm宕掉一半,整个fram依然能够运行。正是因为这个天才的认识,才有了
Map and Reduce算法。借助该算法,Google几乎能无限地增加计算量,与日新月异的互联网应用一同成长。

算法并不局限于计算机和网络
举一个计算机领域外的例子:在高能物理研究方面,很多实验每秒钟都能几个TB的数据量。但因为处理能力和存
储能力的不足,科学家不得不把绝大部分未经处理的数据丢弃掉。可大家要知道,新元素的信息很有可能就藏在
我们来不及处理的数据里面。同样的,在其他任何领域里,算法可以改变人类的生活。例如人类基因的研究,就可
能因为算法而发明新的医疗方式。在国家安全领域,有效的算法可能避免下一个911的发生。在气象方面,
算法可以更好地预测未来天灾的发生,以拯救生命。所以,如果你把计算机的发展放到应用和数据飞速增长的大
环境下,你一定会发现;算法的重要性不是在日益减小,而是在日益加强。
[解决办法]
还好赶得上~
算法真的是太多了,集中学的时候,还能记住,长时间不用就又有点忘了~
[解决办法]
... 一看就知道我不适合搞算法
[解决办法]
算法真多!!

------解决方案--------------------


en ,还真不好说,熟练,还精通。。。
[解决办法]
有同感!

探讨
还好赶得上~
算法真的是太多了,集中学的时候,还能记住,长时间不用就又有点忘了~

[解决办法]
...
``发现自己差太远了...
``学习...
[解决办法]
嘿嘿,学习学习~~
[解决办法]

热点排行