让我们一起揭开算法的神秘面纱
前言
其实我一直想写一篇揭秘算法的文章,因为,据我所见,大多数写算法的软件工程师,其实,就是普通程序员,并非高人一等。
但我一直不知道从何下手,今天姑且尝试着乱写一点。
最唬人的高大上
算法最唬人的东西莫过于公式了。
而公式中最唬人的摸过于∑了;这个符号叫sigma,如下图:
举个例子:
某公司开会讨论项目功能实现,与会人员有:一个项目经理,三个A组成员,三个B组成员和一个算法工程师。
然后,讨论着,讨论着,就遇到了一个争议功能。
A组成员认为该功能应该循环来处理,B组成员认为应该使用递归来处理,双方争议不下。
此时,项目经理为了搁置争议,共同开发。。。然后,请算法工程师发表意见。
算法工程师走到黑板,刷刷刷写下了上图的公式。。。然后开始了表演。。。呃,是讲解。
“我们这个功能,我觉使用这个公式来实现最好,这个Ki乘以Mi,然后我们求一下和,巴拉巴拉。。。”
然后,A组B组成员就都蒙了,因为他们看不懂,也没听懂。因为程序员的特质是严谨,所以一旦遇到不懂的事情,他们通常是不发表意见的。
然后,在这小小的会议室中,算法工程师的形象就瞬间高大了起来。
“沉默就表示同意了,那这个功能就这么处理吧”项目经理说道。
最后,会议结束,因为没人能看懂这个公式,所以,A组组长和B组组长私下讨论了一个解决方案把问题处理掉了。。。
—————————————————————————————————-
其实这个公式很简单,就是M=K1*M1+K2*M2+K3*M3+…+Kn*Mn。
什么?看不懂?
那这样总该能看懂了吧。
int totalM = 0; int n = 10; List<int> K = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; List<int> M = new List<int>() { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 }; for (int i = 0; i < n - 1; i++) { totalM += K[i] * M[i]; }
聪明的你有没有发现什么?
【∑sigma】就是for循环有没有。
这个∑下面i=0,上面n-1就是for循环的条件有没有;K和M就是两个Count等于n的数组有没有。
上面例子中,算法工程师提出的解决方案就是循环处理有没有。。。
如果算法工程师讲公式时这样说:“K和M集合长度相等,我们循环一下,计算下K[i] 和 M[i]的乘积,然后累加求和一下。”
是不是就都听懂了。
当然了,如果他真这样讲,就高大上不起来了。。。
其实我们每天都在写算法
想想我们写过的那些复杂甚至恶心的业务逻辑,结合一下上文的例子。
然后,你会发现,其实你每天都在写算法。。。
只是你不知道如何把你写的东西,用公式表达出来而已。。。
—————————————————————————————————-
诚然,经常写算法的朋友,的确,很多时候可以给出一个非常好的处理问题的逻辑。
但是,这并不是算法工程师在能力上高人一等,只是他们长期应用算法,对计算问题,相对更敏感,所以,处理起来更简洁,高效。
其实,软件工程师也一样,有经验的软件工程师,写的代码逻辑更清晰,代码更简洁,会使用的开源框架更多,这并不能代表什么,因为,这只是工作能力的高低而已。
尝试写一个公式
编写算法公式其实非常简单,使用Word就可以实现啦。
编写公式步骤,打开Word—插入—公式,然后在里面选择公式模板,单击,就可以插入公式模板了。
如上图所示,Word里提供非常多的公式模板。PS:有没有发现,勾股定理其实也是一种算法。
插入公式模板后,Word上方的面板会自动跳转到设计界面。
如上图所示,这里有非常多的功能。
—————————————————————————————————-
作为程序员,你一定写过文档吧,如果你在文档中加入几个公式。。。
试想一下,当项目经理看你的文档时,看到一堆他不懂的公式。。。你在他心中的形象是不是瞬间就高大上起来了呢,O(∩_∩)O哈哈~
当然了,还是有真正大牛算法工程师,这里不能一概而论。
但我们没必要自卑的认为比算法工程师第一档就是了。
—————————————————————————————————-
注:此文章为原创,任何形式的转载都请联系作者获得授权并注明出处!
若您觉得这篇文章还不错,请点击下方的【推荐】,非常感谢!
https://www.cnblogs.com/kiba/p/11719727.html