引言

作者: 暴风雪blizzard | 来源:发表于2017-10-26 10:10 被阅读0次

    开篇

    这个系列坑主要围绕 leetcode 和基本数据结构学习。我大概是第三次刷 leetcode 了,第一次是大学玩 ACM 的时候热身刷,用c++表达。第二次是一年多前面试 facebook 前端时刷了一下,但没有刷完。最近想用js表达再刷一次发布出来。

    数据结构与算法,顾名思义就是 数据结构+算法。数据结构为了存储设计一个面向存储的实现方式,为了程序接触方便则需要拗一个数据的造型,所以主要就分为存储方式+造型(结构)。算法说白了就是一些程序逻辑,作用在数据结构上,为了实现一个需求。首先,需求要满足,需要对它测试。其次在满足需求的前提下通过一些评价指标,比如时间空间复杂度来评价这个方案并优化它。最后,我们需要清晰的表达出我们的逻辑,要追求 clean code,让大家一目了然通读。

    思想

    我自己参加过很多面试,也面试过很多人,一些同学对算法是抵触的,觉得好像就是一个理论体系。其实不然,一到算法题你可以当做一个工程题。产品经理提的需求就是一个input和一个output,并且对你的性能有所要求,关键是这个需求不会改!那么我们该怎么做?当然首先把 文字转换为数据,通过我们选择的语言变成一个你想实现的数据结构,比如我用数组,我用链表,我用树。这都ok,目的就是为了在计算机中表达出这个数据。至于到底选什么当然会根据性能根据需求而定,你可以放大并把它理解为技术选型。当然这些基础数据结构本身也有一些模版代码,比如树怎么实现,链表怎么实现。这些数据结构上一定需要绑一些逻辑,最后输出成output。这些逻辑本身会有副作用,于是我们拿到一定也会先把需要用到的副作用变量申明好,命名好。比如树的遍历,我一定需要一个当前的缓冲值,然后考虑我的算法方法,边界条件等等。做完之后记得写测试判断需求是否满足,然后评价&优化它。

    评价

    在解决一个问题的时候,我们会有个万能的方法,就是所有情况都去尝试。虽然笨但是一定能做出来,代价就是运行次数规模,我们把它可以作为一个时间维度的评价的指标。于此对应自然就会有空间维度的评价指标,同样解决这个问题,你再干的时候有很大的副作用空间,需要给你挪很多地方放东西,那么也是一个评价指标。对时间性能所谓好的方法解决一个问题自然就是,通过每个问题的特点分析,构造我们逻辑去尽可能的命中有用的逻辑,尽可能减少重复的无用逻辑,一旦命中有用逻辑分支,那么else的所有情况就被跳过了。所有的算法我们可以看特点,都是分析需求特点,然后看看我们有没有办法让他更容易命中有用逻辑,跳过更多无用的执行次数。比如树的优先查找算法,这种结构当我们一条路检测到某个特诊后,下面的路不用走了,直接剪枝,回去走新路,当然对于走路是一路往下走还是走一路换旁边的路再往下,走多少跳出来,都是根据需求判定哪个更容易更少走无用路。我如果更容易命中特征也就更快的能知道这里可以走,这里不可以走,开启新的路。

    我希望我表达的更通俗更好理解,以实战为主。

    相关文章

      网友评论

          本文标题:引言

          本文链接:https://www.haomeiwen.com/subject/wbphpxtx.html