• 揭开算法的神秘面纱


    前言

    其实我一直想写一篇揭秘算法的文章,因为,据我所见,大多数写算法的软件工程师,其实,就是普通程序员,并非高人一等。

    但我一直不知道从何下手,今天姑且尝试着乱写一点。

    最唬人的高大上

    算法最唬人的东西莫过于公式了。

    而公式中最唬人的摸过于∑了;这个符号叫sigma,如下图:

    举个例子:

    某公司开会讨论项目功能实现,与会人员有:一个项目经理,三个A组成员,三个B组成员和一个算法工程师。

    然后,讨论着,讨论着,就遇到了一个争议功能。

    A组成员认为该功能应该循环来处理,B组成员认为应该使用递归来处理,双方争议不下。

    此时,项目经理为了搁置争议,共同开发。。。然后,请算法工程师发表意见。

    算法工程师走到黑板,刷刷刷写下了上图的公式。。。然后开始了表演。。。呃,是讲解。

    “我们这个功能,我觉使用这个公式来实现最好,这个Ki乘以Mi,然后我们求一下和,巴拉巴拉。。。”

    然后,A组B组成员就都蒙了,因为他们看不懂,也没听懂。因为程序员的特质是严谨,所以一旦遇到不懂的事情,他们通常是不发表意见的。

    然后,在这小小的会议室中,算法工程师的形象就瞬间高大了起来。

    "沉默就表示同意了,那这个功能就这么处理吧"项目经理说道。

    最后,会议结束,因为没人能看懂这个公式,所以,A组组长和B组组长私下讨论了一个解决方案把问题处理掉了。。。

    ----------------------------------------------------------------------------------------------------

    其实这个公式很简单,就是M=K1*M1+K2*M2+K3*M3+…+Kn*Mn。

    什么?看不懂?

    那这样总该能看懂了吧。

    1
    2
    3
    4
    5
    6
    7
    8
    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

  • 相关阅读:
    POJ2976 Dropping tests 01分数规划
    POJ 2728 Desert King 01分数规划,最优比率生成树
    codeforces 675E Trains and Statistic 线段树+贪心统计
    codeforces 675D Tree Construction set
    UVA 11235Frequent values(RMQ)
    FZU 2105Digits Count(线段树 + 成段更新)
    HDU 4006The kth great number(K大数 +小顶堆)
    UVA 624CD(01背包输出 + 输出路径)
    HDU 1796How many integers can you find(容斥原理)
    HDU 1817Necklace of Beads(置换+Polya计数)
  • 原文地址:https://www.cnblogs.com/mq0036/p/11726579.html
Copyright © 2020-2023  润新知