我眼中的算法

算法一个既熟悉又陌生的词。我曾经很躁动的时候,想去各家应聘或者面试,然后人家问算法你会么?当时听到了,我就蒙蔽了,只能摇头。

天啊,作为接受过本科计算机专业学习的大学生来讲,竟然不知道什么是算法。我好脸红。

那什么是算法呢?

在接触过了一些人,一些事,一些教育之后,加上经常想想到底什么是之后。终于决定发这么一篇随笔,分享一下我关于算法这个事儿的看法。

现在并不方便查算法的定义。网断了。。。按照我的印象,算法就是处理一个问题的流程。它可以不像程序那样,有必要的输入输出,什么有限次,正确性。他就是单单对一个问题的观点和看法。比如拿文件流的操作来说,打开文件,写入内容,关上文件。这就是算法。

交换两个数据的在数组中的位置。这个东西,就有可能涉及到数据结构,比如至少要知道什么是数组。要知道内存中怎么定义数据。这样才可能会想到要再引入一个单元。作为中转站。所以算法又常常跟数据结构相联系。

说到联系,那么算法除了跟数据结构有关系,还跟哪些因素有关呢?既然说了(我所谓的)它的定义,是解决问题的逻辑、思路。那么它一定会跟这个问题本身有关系,前面举那个例子,说的是数据位置的交换,那么如果是数字的话,就可以少引入一个单元,来减小对内存的开支(这种方式大家都见过的,就不写了)。对于跟处理这个问题的人有关系。那人又跟什么有关系呢?跟人对问题的看法,以及人的经历,经验。人对问题怎么看,前两天跟同学一起讨论删元素节点的问题:甲指向乙,乙指向丙,丙指向丁,现在要求在O(1)时间删除单向链表的乙节点。怎么做?当然甲的前面还有很多元素,丁的后面也有很多元素。只是为了待会儿好描述这个问题。为了不让链表断掉,怎么着都得遍历一遍,拿到甲,然后再把丙链到甲后面,最后再把乙删了。当时想了好久,也不得解,最后被分享了答案:因为乙要被删除,所以其实其实不用太在意乙的存在,不妨把丙的值赋给乙,乙指向丁,然后把丙删了。看问题的方式不同,解决的方式就会不一样。经历得多了,自然有解决的办法,处理的次数多了经验也就有了。就像刚刚这个链表,我不说,你没听过,很难想到要怎么做;我说了,你记下了,你就基本忘不了了。

所以我其实挺反感面试的时候出算法题的。甚至更可怕的是算法调优题。因为有的时候这种东西就像是脑筋急转弯。合理的好的处理问题的逻辑,或者说是算法,如果用一个等式描述的话,应该是对于问题的充分理解,加上恰到好处的灵感,加上适当的休息与放松。不能对问题理解的游刃有余,怎么也不会想到这样一种诡诈的偷梁换柱(删除丙,而不是乙的等效情况)的手法。恰到好处的灵感,有时候,可以自己完成,有时候,可能需要你出去走走,玩玩,悲伤一阵,失落一段,就像疯狂动物园里的兔子,总是跟肉食动物干草食动物那个问题磕,可能未必会有进展,但是如果回家休息一阵儿。没准就能得到跟问题有关的线索。看到那些让动物发狂的花朵。当然灵感的来源光靠自己也不行,你需要多与他人沟通交流,依然需要乐观向上的态度。所以碰到算法题,我的心情就是日了狗了。这种时候,就先别想优化,先把问题解决出来,然后拿语言写出来,先让他正确运行,后面的事儿,后面再说。不要因为怕,或者是恶心算法题就不做了。虽然我的确依然认为算法题在一定程度上等价于脑筋急转弯儿。有些什么“咵嚓”一下砸地板上了问你电视怎么没坏,“灯”掉了一个问你轮胎还有几个,你得见过知道这个急转弯儿,你才能不上套,你没见过,就是做不出来,所以算法题实际上考察的是你见识问题的多寡,以及你面对问题的态度。这么想,可能会好一些。

实现算法跟语言有关系,跟对语言的熟悉程度有关系。在刚刚说了先想好,然后拿合适的语言实现。有些问题,就是鞭长莫及,有些就是效率极高。不同的语言就是会产生不同的效果。对于10岁的一个健康孩子和一个睿智青年以及一位阅历丰富的长者,如果他们都说汉语,那么对于同样问题的描述必然是不相同的。写程序好比说话,孩子说话可能将将能把问题说清楚,青年,可能能更加一语中的,长者除了见多识广,对于语言的把握亦是精深,言简意赅,寥寥数字便将问题讲清。这的确跟语言本身,以及对于语言的把握有着十分重要的关系。

算法调优,跟这个人的经历经验,以及对问题的理解程度有关系。

看到一些招聘要求,要求能对算法调优,真是随便拉个郎,便想结婚生子,子孙满堂。未免想太多。我认为怎么才能对一个算法进行调优。这需要对问题了若指掌。那怎么才算是理解透彻,能够在董事和总经理面前把这个逻辑讲清楚(别说什么程序员不会与人交流,说不明白问题,只会敲代码。我觉得只要是事情就一定能说明白,尤其是关于程序上、逻辑上的这一块儿,如果说不明白只能是他自己就不明白。),能够在当初缔造这个算法的人面前,边说边敲。如果非得为这些东西加一个标量我觉得,要至少在底下默写个5遍。

依然在象牙塔里面,胡乱说了很多,我觉得会不会算法调优,就跟你问你会不会做饭,会不会打乒乓球,会不会开车一样,会不会游泳一样。他并不真的实际对应你会还是不会两个端点。他是连续的一个不可以用函数描述的东西。但我知道它里面有几个参数比如,如果是做饭的话,跟你的心情有关,状态有关,心情不好敲出来的代码的注释都不太会是人话。如果是开车的话,你虽然拿了驾照,只有你知道你倒库跟侧方停到底停得怎么样,你虽然取得了认证,可是只有你知道自己的深浅。如果是游泳的话,只有你知道自己的极限能有多远,能在多大范围内进行调优。换做是打乒乓球,行内人看站姿看动作,便知你是否会打,如果你能至少拿到一个小的比赛的冠军,至少说明你可以栽培。最起码不用被从零开始带。(下面的东西毫不相干——如果计算机能够自己把所有这些东西都做抽取并且用一个函数描述,或者给计算机一个混沌时代,为他打上断点,如果实时监测到他能演化到奴隶社会,或者封建社会,就可以了基本让这套系统停下来了,但是我觉得那个时候基本就已经晚了,因为计算机系统已经学会学习了,学会创造规则了,我觉得计算机能够学会规则,并且自己缔造规则的时刻,就是计算机进行统治的时刻。欢迎看看我的另一个看法对于alphago的胜利以及人工智能有多智能才会统治世界的看法。)

都在路上,与大家共勉。

时间: 2024-10-21 14:46:53

我眼中的算法的相关文章

大数据推荐系统算法代码全接触(企业内训,现场实录,机器学习算法+Spark实现)

[学途无忧网]大数据推荐系统算法代码全接触(企业内训,现场实录,机器学习算法+Spark实现)课程下载:https://pan.baidu.com/s/1piCNIxC2Sv0zMY0yWxY9Ug 提取码:b10v 一.课程简介: 推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程.个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品.随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间

大数据推荐系统算法视频教程

大数据推荐系统算法视频教程课程学习地址:链接:https://pan.baidu.com/s/1U89CR_ZH_1JzsPOOKLbMyQ请添加链接描述 提取码:5ipq 课程简介: 推荐系统是利用电子商务网站向客户提供商品信息和建议,帮助用户决定应该购买什么产品,模拟销售人员帮助客户完成购买过程.个性化推荐是根据用户的兴趣特点和购买行为,向用户推荐用户感兴趣的信息和商品.随着电子商务规模的不断扩大,商品个数和种类快速增长,顾客需要花费大量的时间才能找到自己想买的商品.这种浏览大量无关的信息和

张小龙和张一鸣的对立统一

对于中国大部分互联网创业者而言,他们公司的最终结局——“要么姓马,要么姓马”:而对于中国大部分网民而言,他们在手机上的时间——“要么姓张,要么姓张” 张小龙和张一鸣,这两个技术男各自掌管的微信和头条系APP占据了这个国家人民手机中最长的在线时长,他们有太多共同点:同属技术出身.都不善言辞.相同的异常低调.双双迅速成长为全能型选手……. 他们又有太多的不同点:一个出生于1969年,一个出生于1983年:一个弗兰人,一个胡建人:一个产品经理,一个企业家:一个技术中带着浓浓的文艺气息,另一个则有着技术

Netflix工程总监眼中的分类算法:深度学习优先级最低

Netflix工程总监眼中的分类算法:深度学习优先级最低 摘要:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain根据奥卡姆剃刀原理依次推荐了逻辑回归.SVM.决策树集成和深度学习,并谈了他的不同认识.他并不推荐深度学习为通用的分类技术. [编者按]针对Quora上的一个老问题:不同分类算法的优势是什么?Netflix公司工程总监Xavier Amatriain近日给出新的解答,他根据奥卡姆剃刀原理依次推荐了逻辑回归.SVM.决策树集成和深度学习,并谈了他的不同

程序员眼中的RSA算法

RSA算法是数学应用于实际的一项伟大发明,起数学过程相对而言还是比较专业的,有兴趣可以看看. RSA算法的证明过程,详见:http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html 首先默认有个欧拉定理及相关的推论成立,这个要看证明过程不简单 然后看一下其加密解密的公式,可以试着推导一下: 可以看出非对称的加密解密过程,在数学上是成立的. 那么回头看它的安全性:就是要确保d不被攻破,d安全的前提是n不被成功分解. 1.能不

我眼中的PageRank算法详解

随着互联网的发展,网络上已有的网页数量庞大,并且每天都会有很多网页发布,如何权衡这些重要度的排名是一个很重要的问题.我们今天就来了解一下PageRank算法. 首先我们要来了解一下图的概念,请看图1. 图1中,A/B/C/D成为节点,e1/e2/e3/e4/e5成为边.指向某个节点的边成为该节点的入度,从该节点指出的边成为该节点的出度.比如对接点B来说,e1是唯一指向B的边,我们可计算出B节点的入度为1:e3是B节点唯一指向其它节点的边,我们可以算出B节点的出度为1.对于网络上的网页之间的关系也

我眼中的K-近邻算法

有一句话这样说:如果你想了解一个人,你可以从他身边的朋友开始. 如果与他交往的好友都是一些品行高尚的人,那么可以认为这个人的品行也差不了. 其实古人在这方面的名言警句,寓言故事有很多.例如:人以类聚,物以群分.近朱者赤近墨者黑 其实K-近邻算法和古人的智慧想通,世间万物息息相通,你中有我,我中有你. K-近邻原理: 存在一个训练集,我们知道每一个样本的标签,例如训练样本是一群人,他们都有相应特征,例如,爱喝酒或爱看书或逛窑子或打架斗殴或乐于助人等等,并且知道他们是好人还是坏人,然后来了一个新人(

【程序员眼中的统计学(7)】正态分布的运用:正态之美

正态分布的运用:正态之美 作者 白宁超 2015年10月15日18:30:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习基于<深入浅出统计学>一书(偏向代码实现,需要读者有一定基础,可以参见后面PPT学习).正如(吴军)先生在<数学之美>一书中阐述的,基于统

【程序员眼中的统计学(9)】总体和样本的估计:进行预测

总体和样本的估计:进行预测 作者 白宁超 2015年10月15日18:30:07 摘要:程序员眼中的统计学系列是作者和团队共同学习笔记的整理.首先提到统计学,很多人认为是经济学或者数学的专利,与计算机并没有交集.诚然在传统学科中,其在以上学科发挥作用很大.然而随着科学技术的发展和机器智能的普及,统计学在机器智能中的作用越来越重要.本系列统计学的学习基于<深入浅出统计学>一书(偏向代码实现,需要读者有一定基础,可以参见后面PPT学习).正如(吴军)先生在<数学之美>一书中阐述的,基于