crazyhadoop 发表于 2014-03-09 12:24

回复 18# shang2010


    那可不见得哦,得看看用没用心去发现啊。算法也不简单是数据结构这点点,效率和流程的极致也是算法所追求的

cjdao 发表于 2014-03-09 12:43

本帖最后由 cjdao 于 2014-03-09 12:47 编辑

1. 平常是如何学习(夯实)算法和数据结构基础知识的?
   首先说说个人认识到的算法学习(纯属个人愚见,望各位大牛不吝指正)。
    算法学习应当可以分成三个层面:
1).基本数据结构及算法概念
    2).算法分析
    3).算法设计与应用
    基本数据结构及算法概念:基本概念的学习肯定是离不开自己啃书啦,这里推荐基本比较经典的书,《数据结构与算法分析 : C语言描述》和《算法:C语言实现 : (第1~4部分)基础知识、数据结构、排序及搜索》,还有《程序设计抽象思想》,这几本都是基于C语言学习数据结构与基本算法的经典之作,其中《程序设计抽象思想》除了介绍数据结构和算法,整本书还贯穿着封装等思想。当然除了啃书外,还需要自己动手去写,将你理解的概念用代码的形式表示出来,以检查自己是不是真的理解了这个概念。
    算法分析:算法分析的目的在于算法的选择,即面对同一个问题的多种解决方案的时候,我们该如何作取舍。对于一个算法性能上的科学论证往往需要设计数学上的诸多知识点,因而算法分析往往会成为初学者的一道坎,学着学着,会突然觉得自己不是在学算法而是在学数学。个人建议,我们可以从生硬的记住一些典型算法的复杂度结论开始,慢慢去理解这些东西,当然如果要学得彻底,估计补充数学知识在所难免!
    算法设计与应用:算法学习的终极目的,就是自己能设计算法解决现实中遇到的问题。而在算法设计中有一些比较重要的设计思想,如分而治之,贪婪,和动态规划,学习这些东东,估计就得多练手了!
    最后,分享几篇与算法学习相关的思考:(刘未鹏)http://mindhacks.cn/2008/07/07/the-importance-of-knowing-why/; (王垠:我和权威的故事)http://www.admin10000.com/document/3713.html

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
   一个明显的帮助,就是提高代码的阅读及理解能力,任何大型程序的构建基本都离不开算法和数据结构;虽然在平时的工作中自己设计算法的机会几乎没有,但是现有的程序中总会充斥着算法和数据结构。如linux内核中,到处都可以看到链表的影子。

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
   算法和数据结构是计算机软件的基础,也体现着一个编程人员的基本素养,因此面试中有算法题目是最能在最短时间内考察一个人的编程能力的方式。呵呵,我很久没面试过了,刚毕业那伙儿,只学过单片机,去面试,人家让写一个不限精度的计算器,结果杯具,被各种鄙视。后来也是参加工作后,逐步认识到算法的重要性,才开始自学的。

mqiezi 发表于 2014-03-09 18:37

1. 平常是如何学习(夯实)算法和数据结构基础知识的?
算法和数据结构还是在大学时候学的,数据结构和几个算法都非常基础,在工程实践中用到的时候非常多。做项目的时候基本上都是边复习边做的态度,用的多了,想的多了,理解也就相应加深了。最初学习的时候可以多找一些开源的代码来分析学习。研究理解了别人为什么这样做,为什么这样用才能记住。
   
2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
计算机的核心就是数据结构和算法。算法有非常多,能掌握的只是常用的。数据结构相对来说少一些,目前不管是什么语言基本上也就这些。面向对象提供了一种思维方式,就是相似性的归纳,我觉得也可以用在这里。在工作中需要解决的问题,归根结底都要到选择数据结构和算法的层面上来,有的时候实现的方式有很多样,所以就需要作出选择。选择的方式一般都是考虑性能、效率的、复杂度等等。如果基础算法熟练的话,很容易就能找出最优的了。

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
算法层面的东西考察的才是思想的基本功。语法层面的只是考察工具的熟练程度。碰到过游戏开发方面一些比较常见的算法,比如画家算法、A*算法等等。准备的不够充分,当时回去很充电了一把。后面也碰到过一些相对简单的算法,比如说字符串移除非连续空格的等等,其实想算法是比较好玩的。

gvim 发表于 2014-03-12 20:44

本帖最后由 gvim 于 2014-03-12 20:45 编辑

非学霸题狂忽悠两句:
算法,算+法,很多人其实说的算法是动态规划,分治等具体的法,而忽略了最重要的算。个人更愿意把算法理解为计算和它的方法。所以其实算法的根基是算,如何算才是正确的,而高效的算才是方法。
之前学算法的时候总觉得不入门,干脆不学了,方法掌握的再多,可不知道怎么算是正确的,等于0。因此后面狂补数学相关的内容,之后恍然,算法的学习首先应该学的是如何正确的算,然后学习如何通过变换简化计算,最后才是结合诺伊曼结构的自动计算机进行高效的算。而我们的学习过程,好像刚刚好是反的。
比如基因算法、现在挺热的大数据的统计算法、图形图像算法等等,他们和我们通常认识的“算法”关注点真心不一样。甚至,大家应该听说过的卡马克常数,放在教科书上看来根本就不是算法。。。

以上,一家之谈。

ttt4011 发表于 2014-03-12 21:37

平时工作基本用不到数据结构这些,不是coder。但是这几天面试都遇到了数据结构和算法的问题,基本答不上来,毕业之后就没弄数据结构了,算法本来就一窍不通:dizzy::dizzy:
a=(a0 a1 a2 a3 a4 a5 a6 a7 a8 a9),随机取出数组a的一个子序列b,b中无重复的元素,例如b=(a3 a2 a0 a7 a1) ,要时间复杂度尽可能小。问了同学已解决。

boyhailong 发表于 2014-03-12 21:53

1. 平常是如何学习(夯实)算法和数据结构基础知识的?
===============================
作为coder就是把现实问题抽象成计算机语言的过程,其中选择合适的数据结构和算法是最重要的。之前没有**学习,现在经历了辞职又找工作的历程,才知道这些有多重要。谈到如何学习就是看《数据结构和算法C语言描述》觉得这本书比《算法导论》更容易看懂,因为算法导论里都是伪代码,那本书却是直接的C代码,可以直接上机调试,更加容易掌握;另外就是做题,比如150题,leetcode,微软100题等都是非常好的资料,这都是算法进阶的必备,承认没有能力做ACM那种题,也没做多少。

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
===============================
帮助很大,笔试题中经常有各种数据结构和算法的题,在成都题做好了=offer+high salary,不知道其他地方是什么样子。成都这边的题算法都是非常基础的,多是字符串,简单的动态规划,bst的非递归遍历等,难度level比较低,但是如果没有复习到,还是很难做到bugfree的。


3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
===============================
面试官面试算法,我觉得这样子比较好,是很好的考察面对难题解题思路,实际工作就是这样,如何独立地解决没有面对过的问题。
面试官会问你做过的题,比如之间被问过部分排列,其实就是考察对递归的理解;以及如何节省空间地存储bst;大规模的金融行情的前k个情况。

xike2002 发表于 2014-03-13 15:35

本帖最后由 xike2002 于 2014-03-13 15:36 编辑

1. 平常是如何学习(夯实)算法和数据结构基础知识的?

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。

1w2b3l 发表于 2014-03-13 16:57

同意,长时间不用,慢慢就忘了。
如果打算用到的时候再看,其实也是个问题,因为不一定想得到,忘得有点彻底。

   

pitonas 发表于 2014-03-13 17:50

{:2_172:}这个必须赞一个

正确的是算,
高效的是法。

gvim 发表于 2014-03-12 13:44 static/image/common/back.gif
非学霸题狂忽悠两句:算法的根基是算,如何算才是正确的,而高效的算才是方法。...

chinaunixj 发表于 2014-03-14 13:45

回复 1# crazyhadoop


    DataStructure and Algo如果学的好,在分析问题上是有帮助的。现在公司软件工程师设计代码的不多,相反改代码的多,但是如果基础不好的人(设计能力,编码能力,计算机基础及相关支撑学科),定位问题和思考问题的维度和深度也会偏弱,只能靠猜或者加log去分析,当然了,阅读代码的能力也不行。学好algo/ds,再加一些练习,平时在日常工作中去分析设计者的思路和用义,对于提高自己分析问题,将问题“抽象”还是有意义的。
页: 1 2 [3] 4 5
查看完整版本: 学习算法的那点事儿(获奖名单已公布-2014-4-21)