楼主: Maverick_3
跳转到指定楼层
上一主题 下一主题
收起左侧

[其他] 学习算法到意义是什么

🔗
lyl 2013-11-18 11:47:53 | 只看该作者
全局:
Maverick_3 发表于 2013-11-18 11:33
看着这些内容都会,因为本科虽然不是CS,但是学过运筹学,里面的概念也都知道。。。。可还是不明白学习重 ...

要是觉得大概掌握了,就做做看那些课程的作业。那些经典算法只要理解了都不难,但是遇到具体问题往往需要建模以后才能使用这些算法,具体的建模通常是难点。
回复

使用道具 举报

🔗
modifiedname 2013-11-18 14:10:32 | 只看该作者
全局:
初学可以看看udacity的算法,比较简单(可能太过简单)
怎么把具体问题抽象一下转化成已知算法能解决的问题是难点
udacity Norvig 教的那门课感觉有点这个意思,入门也不错
回复

使用道具 举报

🔗
xz28us 2013-11-18 15:28:39 | 只看该作者
全局:
Maverick_3 发表于 2013-11-18 11:33
看着这些内容都会,因为本科虽然不是CS,但是学过运筹学,里面的概念也都知道。。。。可还是不明白学习重 ...

说到底还是因为计算机的存储和运算能力是有限的,两台完全相同的电脑满负荷运作的情况下,谁的算法好,谁就能在单位时间完成更多任务。.--

不能直观感受到学习算法的重点可能是由于学习训练中的例子过于简单,以现代PC的性能处理这些问题已经几乎不会让你感觉到算法之间的差异。当你经历过跑程序几十分钟,几小时甚至几天之后你就会有深刻印象了。

当然学习的过程和其他学科大同小异吧,怎么好记,怎么记得住就怎么学,这个是中国人从小擅长的。
回复

使用道具 举报

🔗
zwwhcm 2013-11-18 16:24:01 | 只看该作者
全局:
看你的职业规划:
如果PhD,而且偏Thoery: 可能光知道proof还不够,还得知道如何从数学方面来得出这个结论(拓扑,图论等)。.1point3acres
PhD,其他CS方向:这本书得吃透,虽然不必知道从哪个数学理论,但是能自己给出proof.
找工作:书中算法无一不知。(最后的Advance Topics可以看了,MS我觉得还是吃透吧,本科生至少要知道What and how.但是不一定要知道why)
回复

使用道具 举报

🔗
 楼主| Maverick_3 2013-11-22 01:38:39 | 只看该作者
全局:
zwwhcm 发表于 2013-11-18 16:24
看你的职业规划:
如果PhD,而且偏Thoery: 可能光知道proof还不够,还得知道如何从数学方面来得出这个结论 ...

我是无线网络方向到PhD。这本书太经典了, 每个CSer都应该学精吧。。。你们的学习方法是什么?
回复

使用道具 举报

🔗
 楼主| Maverick_3 2013-11-22 01:39:36 | 只看该作者
全局:
RonHe 发表于 2013-11-18 15:28
说到底还是因为计算机的存储和运算能力是有限的,两台完全相同的电脑满负荷运作的情况下,谁的算法好,谁 ...

目前,还没写过什么很大的程序。。。要锻炼的话,自己写下能用到这些算法的程序?
回复

使用道具 举报

🔗
北美农民 2013-11-22 02:57:24 | 只看该作者
全局:
感觉算法的作用并不大, 在性能越来越杰出的硬件面前, n^2和nlogn可能体验不到什么差别。 而且绝大多数时候好的设计, 架构, 可拓展性,可靠性, 好的UE的所带来的优势比算法提高一个数量级来得更多。现在的面试也慢慢倾向于设计题, 算法也慢慢变成应该掌握的基础内容了。

-baidu 1point3acresPS: 我一直觉得计算机是业界领先于学术的, 如果专门搞theory而不结合业界反而失去了意义, 就像有的提出优秀算法根本无法implement一样.
回复

使用道具 举报

🔗
lyl 2013-11-22 03:29:14 | 只看该作者
全局:
北美农民 发表于 2013-11-22 02:57
感觉算法的作用并不大, 在性能越来越杰出的硬件面前, n^2和nlogn可能体验不到什么差别。 而且绝大多数时候 ...

。。。n^2和nlogn体验不到区别?你的时间复杂度怎么学的?多少做硬件的,做编译器的拼命优化就为了追求那百分之几十的性能提升。

业界领先学术界这样的话纯属瞎扯。工业界用的是学术界已经研究成熟的技术。现在还不够成熟的技术以后自然会有用。要是学术界都照你的说法那么干,只做目前用得上的东西,CS后面的那个S就可以去掉了,直接改叫software engineering算了。
回复

使用道具 举报

🔗
北美农民 2013-11-22 04:12:17 | 只看该作者
全局:
本帖最后由 北美农民 于 2013-11-21 15:23 编辑 ..
lyl 发表于 2013-11-21 14:29
。。。n^2和nlogn体验不到区别?你的时间复杂度怎么学的?多少做硬件的,做编译器的拼命优化就为了追求那 ...

观点不同挺正常的。 N^2和NlogN这个例子确实可能夸张了, 不过也不算很过分,我自己亲身经历来看,以前写过图像应用的一个压缩算法,在普通用户常用的像素面前 DP和暴力没差多少, retina也没感觉出很大差距。   还有个例子, 我们学校一个phd在谷歌干活设计出了比谷歌速度快10倍(你没看错, 是10倍, 你有兴趣可以搜一下piccolo)的pagerank算法, 最后自己离职创业了,提供竞价排名等服务,只是谷歌价格1/10的, 后来一样因为别的方面技术原因没成, 这里的技术原因你应该能猜到, 就是硬件架构等问题。 业界比算法重要的东西确实很多。

当然,必须承认如果要处理很大的科学计算即便是常数优势都是巨大的。但是据我所知,业界现实还真不在乎这点算法上的差距, 绝大多数公司的服务器的CPU常年占用率不到10%,大多数时间都消耗在I/O上 , 就好像disk/memory和cpu之间的gap, 木桶原理, 不知道你懂我意思没有。

关于编译器, JIT这么一路发展下来对java code性能的提升也是巨大的, 从起初之前被g++完虐到1.4之后反超以至于10年前就有学术界和业界提出用Java 进行scientific computing, 这些都是有考证的。 http://keithlea.com/javabench/data 可以看看这个03年做的实验, 这就是JIT的进步。

我并不是说算法不重要, 好的算法配合好的硬件好的设计架构, implementing good interaction between software and hardware才是最终目的。
回复

使用道具 举报

🔗
lyl 2013-11-22 05:10:01 | 只看该作者
全局:
北美农民 发表于 2013-11-22 04:12
观点不同挺正常的。 N^2和NlogN这个例子确实可能夸张了, 不过也不算很过分,我自己亲身经历来看,以前写 ...
. 1point3acres
说得很好。google, microsoft这样的巨头因为自身的需要和强大的财力在system, architecture, network这方面确实是技术领先的。但是他们手下的科学家并非是工业界培养出来的,只能说他们画大钱把强人都招到自己的研究部门了。更何况CS还有大量其他的sub-area,如果据此就做出结论认为CS领域工业界领先学术界,那我只能fully disagree.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表