异幻纪元

首页 >> 科幻小说 >> 异幻纪元(章节目录)
亲爱的书友,您现在访问的是转码页面,会导致更新不及时及无法正常下载,请访问真实地址:http://m.iuu123.com/81486/

为什么我反对纯算法面试(1/2)

上一章 目录 下一页:(1/2)

关灯 护眼 舒适     字体:

算法面试可能是微软搞出来的面试方法,现在很多公司都在效仿,而且我们的程序员也乐于解算法题,我个人以为,这是应试教育的毒瘤!我在《再谈“我是怎么招程序员”》中比较保守地说过,“问难的算法题并没有错,错的很多面试官只是在肤浅甚至错误地理解着面试算法题的目的。”,今天,我想加强一下这个观点——我反对纯算法题面试!(注意,我说的是纯算法题)

我再次引用我以前的一个观点——

能解算法题并不意味着这个人就有能力就能在工作中解决问题,你可以想想,小学奥数题可能比这些题更难,但并不意味着那些奥数能手就能解决实际问题。

好了,让我们来看一个示例(这个示例是昨天在**上的一个讨论),这个题是——“找出无序数组中第2大的数”,几乎所有的人都用了o(n)的算法,我相信对于我们这些应试教育出来的人来说,不用排序用o(n)算法是很正常的事,连我都不由自主地认为o(n)算法是这个题的标准答案。我们太习惯于标准答案了,这是我国教育最悲哀的地方。(广义的洗脑就是让你的意识依赖于某个标准答案,然后通过给你标准答案让你不会思考而控制你)

功能性需求分析试想,如果我们在实际工作中得到这样一个题我们会怎么做?我一定会分析这个需求,因为我害怕需求未来会改变,今天你叫我找一个第2大的数,明天你找我找一个第4大的数,后天叫我找一个第100大的数,我不搞死了。需求变化是很正常的事。分析完这个需求后,我会很自然地去写找第k大数的算法——难度一下子就增大了。

很多人会以为找第k大的需求是一种“过早扩展”的思路,不是这样的,我相信我们在实际编码中写过太多这样的程序了,你一定不会设计出这样的函数接口——find2ndlen),就好像你不会设计出dehdad;这样的接口,而是设计一个dey);的接口,而把baghdad当成参数传进去!所以,你应该是声明一个叫findktlen,intkth),把2当成参数传进去。这是最基本的编程方法,用数学的话来说,叫代数!最简单的需求分析方法就是把需求翻译成函数名,然后看看是这个接口不是很二?!

(注:不要纠结于find,因为这两个函数名的业务意义很清楚了,不像find2nd那么二)

非功能性需求分析性能之类的东西从来都是非功能性需求,对于算法题,我们太喜欢研究算法题的空间和时间复杂度了。我们希望做到空间和时间双丰收,这是算法学术界的风格。所以,习惯于标准答案的我们已经失去思考的能力,只会机械地思考算法之内的性能,而忽略了算法之外的性能。

如果题目是——“从无序数组中找到第k个最大的数”,那么,我们一定会去思考用o(n)的线性算法找出第k个数。事实上,也有线性算法——求得类似的第n大的数,其利用快速排序的思想,从数组s中随机找出一个元素x,把数组分为两部分sa和sb。sa中的元素大于等于x,sb中元素小于x。这时有两种情况:1)sa中元素的个数小于k,则sb中的第k-|sa|个元素即为第k大数;2)sa中元素的个数大于等于k,则返回sa中的第k大数。时间复杂度近似为o(n)。

搞学术的nuts们到了这一步一定会欢呼胜利!但是他们哪里能想得到性能的需求分析也是来源自业务的!

我们一说性能,基本上是个人都会问,请求量有多大?如果我们的findkt次,那么你的这个每次都要o(n)复杂度的算法得到的效果就是o(n*m),这一点,是书呆子式的学院派人永远想不到的。因为应试教育让我们不会从实际思考了。

工程式的解法根据上面的需求分析,有软件工程经验的人的解法通常会这样:

1)把数组排序,从大到小。

2)于是你要第k大的数,就直接访问array[k]。

排序只需要一次,o(n*log(n)),然后,接下来的的调用全是o(1)的,整体复杂度反而成了线性的。

其实,上述的还不是工程式的最好的解法,因为,在业务中,那数组中的数据可能会是会变化的,所以,如果是用数组排序的话,有数据的改动会让我重新排序,这个太耗性能了,如果实际情况中会有很多的插入或删除操作,那么可以考虑使用b+树。

工程式的解法有以下特点:

1)很方便扩展,因为数据排好序了,你还可以方便地支持各种需求,如从第k1大到k2大的数据(那些学院派写出来的代码在拿到这个需求时又开始挠头苦想了)

2)规整的数据会简化整体的算法复杂度,从而整体性能会更好。(顺序的处理很容易进行各种处理)

3)代码变得清晰,易懂,易维护!(学院派的和l一样的近似o(n)复杂度的算法没人敢动)

可能的争论你一定会和我争论,

如果程序员做这个算法题用排序的方式,他一定不会像你想那么多。是的,你说得对。但是我想说,很多时候,我们直觉地思考,恰恰是正确的路。因为“排序”这个思路符合人类大脑处理问题的方式,而使用学院派的方式是反大脑直觉的。反大脑直觉的,通常意味着晦涩难懂,维护成本上升。就是一道面试题,我就是想测试一下你的算法技能,这也扯太多了。没问题,不过,我们要清楚我们是在招什么人?是一个只会写算法的人,还是一个会

喜欢异幻纪元请大家收藏:(m.iuu123.com),爱优小说网更新速度最快。

状态提示:为什么我反对纯算法面试
第1页完,继续看下一页
上一章 目录 下一页:(1/2)
返回顶部
站内强推 天启风云 重生之我真是富三代 鉴宝大师 传承基地 欢想世界 巨星从创造营开始 永恒圣王 乡村小傻子 重生初中校园:超级女学生 仙路争锋
经典收藏 雪鹰领主 大主宰 天火大道 巫神纪 全能游戏设计师 天域苍穹 星星之火,可以撩你 斗罗之我是素云涛 斗罗之无敌宗主 明末传奇之钢铁脊梁
最近更新 梦界创生 快穿之永世相随 君少心头宝,夫人哪里跑 蓝色风雨恋 北里志 剑绝九天 桃花源 都市狂少 长纤劫 女配一路碾压
异幻纪元 超级熊 - 异幻纪元 全文阅读 - 异幻纪元 txt下载 - 异幻纪元 最新章节" - 好看的科幻小说小说