当前位置: 首页 > 科技观察

面试官:谈谈你对算法的理解?应用场景?

时间:2023-03-19 02:10:41 科技观察

1.什么是算法(Algorithm)是指对一个问题求解方案的准确、完整的描述,是解决一个问题的一系列明确的指令,算法代表了一种系统的方法,描述了解决一个问题的策略机制输入,在有限的时间内获得需要的输出如果一个算法有缺陷,或者不适合某个问题,执行该算法并不能解决问题程序=算法+数据结构,数据结构是算法实现的基础,算法总是依赖于某种数据结构,两者密不可分。因此,算法的设计和选择应与数据结构相结合。简单的说,数据结构的设计就是选择存储方式,比如判断题中的信息是用数组存储还是普通变量存储还是其他更复杂的数据结构针对以上,可以得出一个结论:不同算法可能使用不同的时间、空间或效率来完成相同的任务。2.特性关于算法的五个特性,如下:有限性:算法必须保证执行完有限步后结束moreinputs,描述操作数的初始条件。所谓零输入是指算法本身已经给定初始条件输出(Output):一个算法有一个或多个输出。没有输出的算法是没有意义的。有效性:算法中执行的任何计算步骤都可以分解为基本的可执行操作步骤,即每个计算步骤都可以在限定时间内完成(也称为有效性)3.应用场景在前端领域,数据结构和算法不能缺席。比如现在的vue或者react项目实现了一个虚拟DOM或者Fiber结构,本质上是一个数据结构,比如一个简单的虚拟DOM:{type:'div',props:{name:'lucifer'},children:[{type:'span',props:{},children:[]}]}vue和react都可以基于对应的数据结构实现diff算法提高了整个框架的性能和扩展性,包括当前端-endjavascript被编译,会生成对应的抽象语法树AST,不涉及任何语法,所以只需要写相应的转义规则就可以将任意语法转义为任意语法,也是babel、PostCSS、prettier、和打字稿。除了这些框架或工具底层使用的算法和数据结构,日常业务也无处不在,比如实现一个带有关联功能的输入框,比如底部:如果我们要实现这个功能,我们可以使用一个前缀树,如下:包括前端可能会对字符串做一些相似度检测,比如“每天一题”和“每天一题”这两个字符串injs”进行相似度比较,此时可以使用“最小编辑距离”算法。如果a和b的编辑距离越小,我们认为越相似,我们在日常写任何代码的时候都需要有很好的算法思维,选择好的算法或者数据结构可以让整个程序更加高效。参考https://baike.baidu.com/item/%E7%AE%97%E6%B3%95/209025https://lucifer.ren/blog/2019/09/18/algorthimn-fe-1/