免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: crazyhadoop

[学习] 学习算法的那点事儿(获奖名单已公布-2014-4-21) [复制链接]

论坛徽章:
2
申猴
日期:2014-04-17 14:37:17CU十四周年纪念徽章
日期:2018-06-23 16:03:03
发表于 2014-03-20 11:42 |显示全部楼层
1. 平常是如何学习(夯实)算法和数据结构基础知识的?
平时空闲的时候会做下acm题目

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
工作过程中对于数据结构的选择和算法的选择的比较有帮助。

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
面试的时候主要看一个人应变能力和学习能力,不一定要求你能完美回答出解决方案。
面试过程遇到过题目:给你一个n*m矩阵,每个格子里面有一个值,这个值可能是负数,0,正数。走到一个格子就获取格子的值。能上下左右走,但是走过的格子不能在走。问从左上到右下线路,,能最大获取值的总和。

论坛徽章:
0
发表于 2014-03-20 13:30 |显示全部楼层
书书书,   
1. 平常是如何学习(夯实)算法和数据结构基础知识的?
算法与数据结构大部分都在学校时学的,平常很少用到的
常用的可能就是排序,什么插入,希尔,快速。。。
工作中以实际应用场景为主,如红黑树、HASH算法
剩下的时间就是看书,看网站了解
    2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
工作中使用最多的是HASH算法,也是各种不同方式,选择应用场景,主要按照场景应用最大化减少冲突及冲突处理,提高查找效率
红黑树可能应用比较多,大部分都是参考linux实现了,比较通用
还有字符串匹配算法BM,AC,PCRE
BM单模匹配算法,其核心就是找无效串与有效串
AC多模匹配需要将匹配多串编译为AC树进行匹配
最麻烦就是PCRE,代码多,看不太懂
    3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
不知道是不是关心基础还是什么,个人感觉面试算法没多大意义,实际应用相当少,就算用到了也是需要再强化学习,有可能是有些公司需要考查面试人员的解题思维吧,这方向其实还可以,但是大部分题目都是一大抄目的性不强。
面试最多接触还是排序,二叉树,及时间复杂度计算比较,另外就是海量数据查找匹配,要考虑效率与内存空间的因素。

论坛徽章:
0
发表于 2014-03-20 16:53 |显示全部楼层
最近在准备面试题  看编程之美,感觉需要一定算法基础才能理解啊,找了一本算法的书,看得蛋疼啊   

论坛徽章:
1
天蝎座
日期:2013-12-06 18:23:58
发表于 2014-03-24 11:14 |显示全部楼层
另外很多人应该是没有 弄清楚,基本的数据结构和算法之间的关系,考察基本的数据结构这是基本功。算法不仅要考察基本的数据结构,还要对其操作的空间复杂度和时间复杂度做详细的分析。

论坛徽章:
0
发表于 2014-03-24 16:10 |显示全部楼层
说到算法,还真没细心研究,先看看再说

论坛徽章:
0
发表于 2014-03-24 21:00 |显示全部楼层
本帖最后由 Hadron74 于 2014-03-24 21:06 编辑

1. 平常是如何学习(夯实)算法和数据结构基础知识的?
  本人的工作是生物信息,原来不是计算机专业出身,考博士的时候恶补了一下算法知识,用的是严蔚敏的算法书,受益颇深。幸好学到还好,考试成绩还不错。:wink:
感觉还是有考试压力下,有动力学习,做题加实践出真知。
  楼上有人把算法学习分为三个部分,我觉得分类分得很好,很多也说到我心里。也就这三个方面,谈一下自己的感受。
    1).基本数据结构及算法概念
     这部分确实需要自己下深功夫,如果没有硬功夫,很难理解透算法的基本概念,这里没有捷径可言。数据结构从简单的线性表开始,到树结构,图结构。算法的学习要与数据结构的学习结合,但要稍后。递归算法和动态规划是两个里程碑的算法概念,哈希和链表是用得最多的结构,只有深入掌握了这些,才算入门。其他的算法技巧在此基础上,才能慢慢展开。
    2).算法分析
    这个领域又叫算法复杂性研究,是一个计算机科学领域的金字塔的领域,要有较深的数学,包括离散数学和高等数学的基础。理解这个领域的概念非常有助于算法的重要性,理解别人的软件为什么会采用相应的算法和数据结构,如何评价它们等等。但毕竟这个领域是一个学术领域,如果不是为了在这个科学领域做出研究贡献,对于大多数的计算机应用人才,个人认为点到而止比较好。
    3).算法设计与应用
      这才是大多数计算机应用人才需要的部分,在算法设计时,我们一般考虑的因素
       a) 代码编写时间、可读性和程序运行效率的平衡;
       b)算法的时间效率和空间效率的平衡;
       c)算法的精确性和效率的平衡
       。。。。。
       这里仅就a)多说几句,有的学过一点算法的人可能对算法有痴迷,开发时总想把程序写得尽可能的快或少占内存,浪费很多时间在算法改良,同时使程序丧失了可读性,本人觉得这是不好的。当然这不是否定在算法学习阶段的精益求精。

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
    算法对我的生物信息学工作非常有帮助,体现在这样几个方面:
   a)对程序设计的直接帮助。如图论算法应用于网络研究,动态规划用于序列分析,树的递归用于进化树研究等等。
   b)理解别人的软件的算法和数据结果,以便更好的应用。如Blast等常用的软件,生物信息的大部分工作在于软件整合,了解这些软件的内部,才能更好的应用,当然这里除了算法还有统计学等知识,也是很有必要的。
   c)真正欣赏到计算机科学的美感。当你理解了一种新的数据结构的妙处,当你把程序的速度或内存效率成十上百倍的提高,当你搭建了一个新的数据和计算平台,还有什么能比此时计算机带给你的美妙更能吸引人的呢?

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
    我面试过一些生物信息的学生,但大多在算法方面没有太深的基础。其实算法并不是那么难的,难的他们感兴趣的心。题目这里就不说了。

评分

参与人数 1可用积分 +2 收起 理由
crazyhadoop + 2 很给力!

查看全部评分

论坛徽章:
0
发表于 2014-03-25 11:28 |显示全部楼层
我觉得大多数人对数据结构的理解都局限于《数据结构》这门课程里提到的各种链表啊,树之类的。然而这些基础的数据结构,需要我们花大精力去掌握吗?提供这些数据结构的库比比皆是。我们只要会用就行。
那什么是数据结构,如何表现系统里各实体的关系,什么时候初始化,什么时候清理,何时由何组件因何原因设置,谁读它?如何在不同组件之间传递信息?如何保证数据完整性一致性?
比如操作系统内核里的数据结构,比如android里的各种结构,windows内核,linux内核的各种结构。各种大型应用程序里的结构,他们之间错综复杂的关系。

至于算法,同样地,我们是使用者,不是研究者,不需要提出什么新的理论创作新的算法。现有算法,都有实现,拿来用就是。

论坛徽章:
3
CU十二周年纪念徽章
日期:2013-10-24 15:41:34双子座
日期:2014-03-02 00:11:39fulanqi
日期:2016-06-17 17:54:25
发表于 2014-03-25 15:37 |显示全部楼层
1. 平常是如何学习(夯实)算法和数据结构基础知识的?
早些年的时候,曾经花了一年多的时间和精力,集中学习算法相关的知识。
学过的内容有很多,有专门的算法书籍,当然最经典的莫过于Donald Ervin Knuth写的《计算机程序设计艺术》,此书一共7卷,我也就在前三卷中徘徊。至于数据结构,那是基础,早就学得非常扎实了。
有时在项目中需要用到算法,或许会翻一翻算法书,再草拟伪代码,再编写程序。
基本上也就这样吧。

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
回忆当年,帮助还是蛮大的。应聘程序员/软件工程师岗位,笔试题中,算法和数据结构是少不了的,通常所占的分值还比较大,把掌握算法和数据结构熟练掌握有助于你通过初步筛选,至于面试,又另当别论了。

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧。
面试官如果面试算法题目,一般是问你对此算法的解决思路,讲清楚即可。
至于在面试中碰到过什么样的算法题目,基本上都没什么印象了。
唯一记得比较深的一件事是:多年前,华为的一个PM来面试我,这个家伙学C的,出了一道题是123456789*987654321,写程序求解。而我是学Java的,我直接回答:
long a = 123456789;
long b = 987654321;
long c = a*b;
结果把这个家伙给郁闷倒了。
我清楚此PM的想法是想考验如何在C程序中处理溢出的问题,而我选用了合适的数据类型来处理这个试题,让他的一拳挥在了空处。

论坛徽章:
1
天蝎座
日期:2014-07-20 17:37:17
发表于 2014-03-30 09:55 |显示全部楼层
lonelyair 发表于 2014-03-20 13:30
工作中使用最多的是HASH算法,也是各种不同方式,选择应用场景,主要按照场景应用最大化减少冲突及冲突处理,提高查找效率
红黑树可能应用比较多,大部分都是参考linux实现了,比较通用
还有字符串匹配算法BM,AC,PCRE
BM单模匹配算法,其核心就是找无效串与有效串
AC多模匹配需要将匹配多串编译为AC树进行匹配
最麻烦就是PCRE,代码多,看不太懂 ...


看来这位是大牛……

1.平常是如何学习(夯实)算法和数据结构基础知识的
最近啃完《数据结构与算法描述java描述》,因为本人做java的。以前上学的课本是严蔚敏那本,交作业用C语言,但其实当时没认真学,所以现在才重温……

2. 熟练掌握算法和数据结构对你工作有什么帮助?谈谈经验?
因为本人做java企业开发的,所以……一直以来更注重的是设计模式方面。重温数据结构,让我在操作String、List、Map……的时候,有了更深一层的思考……
例如公司里有个使用ArrayList和HashMap来模仿ResultSet的工具类,用以另存结果集并及时关闭和回收数据库连接。但实际上无可避免还是要遍历一次ResultSet,而且添加进ArrayList和HashMap还带来额外的性能开销(尤其是hash),所以如果不是为了另存结果集作更复杂操作,是不应该使用的此类的。经过一番讲解,才使一些同事明白,稍微有点满足感……其实还是小打小闹的经验……

3. 如何看待面试官面试你算法题目?你在面试中碰到过什么样的算法题目,分享一下吧
面试官面试算法题目,就是考察基本功啦。在这个软件开发门槛越来越低,人心越来越浮躁的时代,考察计算机基本功更能看出一个人对技术是否真心热爱追求。
面试现在这家公司时,做过两道排序题,一道指明要用插入排序,另一道没指名,但一般学过基本算法的人都会采用归并排序。
不过,无奈更多的是考设计模式,真想去大公司见识下……

论坛徽章:
1
天蝎座
日期:2014-07-20 17:37:17
发表于 2014-03-30 09:58 |显示全部楼层
chszs 发表于 2014-03-25 15:37
唯一记得比较深的一件事是:多年前,华为的一个PM来面试我,这个家伙学C的,出了一道题是123456789*987654321,写程序求解。而我是学Java的,我直接回答:
long a = 123456789;
long b = 987654321;
long c = a*b;
结果把这个家伙给郁闷倒了。
我清楚此PM的想法是想考验如何在C程序中处理溢出的问题,而我选用了合适的数据类型来处理这个试题,让他的一拳挥在了空处。


估计他本来下一步还想你跟他谈谈大数相乘的问题……
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP