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

算法在工作中几乎用不到,为什么要学算法呢?

时间:2023-03-18 16:17:25 科技观察

常用数据结构和算法最基本的数据结构和算法包括:排序算法递归链表数组队列栈优先级队列哈希(hash)二叉树、B树、B+树、红黑树位图跳表二分法动态PlanGreedy算法......没有数据结构与算法的工作?您知道您所有的SQL和Linux命令都是算法和数据结构吗?您可能没有意识到,但这就是软件的工作原理。数据结构和算法在软件的实现和使用中也起着重要的作用。很多同学和专业人士会问这样一个问题:为什么这些公司面试只关注DSA而不是针对语言/框架/工具的问题?当你要求某人做某个决定时,好人会告诉你“我选择做X,因为它在这些方面比A、B更好。我本可以选择C,但由于这个原因,我认为它是更好的选择。在我们的日常生活中,我们总是与能够在短时间内以更少的资源高效完成工作的人合作。同样的事情也发生在这些公司身上。这些公司面临的问题更难解决这些公司的问题软件开发人员必须做的才能做出正确的决定。哈希表,树,图,图和各种算法等数据结构的知识对于有效解决这些问题大有帮助,面试官更感兴趣的是看求职者如何使用这些工具来解决问题Big整数审阅者希望找到可以应用正确工具解决给定问题的候选人。在谷歌、微软、Facebook、亚马逊等公司工作的工程师不同于其他公司,在这些公司编码只是实施,大约20-30%的时间分配给项目。大部分时间都花在使用最佳算法设计事物上,以节省公司资源(服务器、计算能力等)。这就是为什么这些公司的面试重点放在算法上的主要原因,因为他们想跳出框框思考,用人来设计可以为公司节省数千美元的算法。例子:假设你在FacebookInc.工作,你想出了一个时间复杂度为O(nLogn)而不是O(n^2)的问题的最优解,并假设公司问题的n实际上是一个生活场景1亿(考虑到在Facebook上注册的用户数量超过10亿)。nLogn是8亿,n^2是10^70亿。在成本方面,可以看到10^7倍以上的效率提升,在服务器成本和时间方面可以节省很多。从用人单位的角度来看,毫无疑问,面试是用来筛选候选人的。这时候僧多粮少,就需要提高筛选标准。在好人中选对的概率比较高,这就是现实。在面试题中,相对于其他记忆类的题,算法能够很好的体现一个人的逻辑和思维,所以也是一个很好的筛选条件。当然,操作系统、网络、Linux等都是很多公司喜欢考察的点。所以面试的话,还是要做好学习算法的准备。第一个从个人角度进入的公司,基本没有使用任何算法(血的教训,上学的时候一定要好好准备),甚至不需要网络编程。基本上就是简单的纯C开发,因为那些东西早就打包好了。嗯(另外一组负责开发和维护),调用就行了。包括后面的面试,我主要面试了两类公司,一类是传统通信技术,一类是互联网公司。前者侧重于项目本身和更基础的技术能力,而后者通常考察更多方面,包括操作系统、数据库、算法、网络等知识。那么面完之后真的就完全没用了吗?事实上,大多数时候它根本没有被使用。你写的大部分是业务代码和业务流程设计,代码实现可能只是一小部分。而且现有的算法有很多可以搜索,你实现快速排序、跳表、快速排序、红黑树等算法基本不可能,但是学习算法是有好处的。例如,您可以根据您的业务排序需求,选择使用稳定排序还是不稳定排序;您可以根据插入和删除数据的频率选择使用数组列表或链接列表;你可能会用一个堆来处理topK问题的相关算法;在某些情况下,散列可用于快速查找;大家在设计业务数据结构的时候可以参考一下基础数据结构的思想。算法解决了一些复杂的现实世界问题当你在凌乱的房间里找不到你的书或衣服时,你是否曾被父母责骂过?当然,你的父母建议你确保一切都井井有条正确的位置是正确的,这样你下次就可以很容易地得到你需要的东西。在这里,您需要将所有内容(数据)排列并持久化为一个结构,以便无论何时您需要搜索某些内容,都可以轻松快速地获取。这个例子清楚地表明了在现实生活中安排或构建数据的重要性。现在以图书馆为例。如果你需要从图书馆找一本关于集合论的书,你会先去数学部分,然后是集合论部分。如果这些书不是这样组织的,而是随机分配的,那么找到一本特定的书就会很沮丧。因此,数据结构是指我们在计算机上组织信息的方式。计算机科学家处理并寻找组织数据的最佳方式,以便根据给定的输入更好地处理数据。许多新手程序员会问这样一个问题:我们在日常生活中在哪里使用所有数据结构和算法,以及它在解决现实世界中的复杂问题方面有多大用处。需要说明的是,无论你是否有兴趣进入顶级科技巨头公司,DSA仍然对你的日常生活有很大帮助。总结通常我们不需要自己去实现这些算法,但是我觉得从中理解以下几点是非常重要的。时间复杂度和空间复杂度的概念。各种数据结构或算法的效率。各种数据结构或算法的复杂性。各种数据结构或算法适用场景vector、map、set等常见容器背后的数据结构是什么,如何高效地查找或插入?从已有的数据结构和算法中获取思路根据存在的问题选择合适的数据结构和算法Java、C++、Python等可能没有在C库中实现上述数据结构或算法,所以C语言也是最好的选择加深他们的理解。一切为了更好的解决实际问题。