数组,链接列表,堆栈,队列,搜索,排序,树,图…
您是否有疑问,如果在现实生活中绝对没有用,我为什么应该研究所有上述复杂的东西?如果公司在日常工作中没有用,为什么公司会问与数据结构和算法有关的问题?
许多初学者和经验丰富的程序员都避免学习数据结构和算法,因为它很复杂,他们认为现实生活中没有使用上述所有内容。因此,在讨论主题之前,我们将向您提出一个简单的问题,您需要找到该问题的解决方案。
如果需要在20000页的PDF文档中搜索卷号(卷号按升序排列),您将如何做?
- 如果您尝试随机搜索或以顺序方式搜索它,则将花费太多时间。一段时间后,您可能会感到沮丧。
- 您可以尝试下面给出的另一种解决方案…
- 转到第10000
- 如果你没有。不在那里,但其他所有都没有。该页面中的内容小于您的
- 转到第15000
- 仍然,如果你没有。不在这里。但是这次其他所有的都没有比你大。
- 转到页面编号。 12500
继续相同的过程,并在30-40秒内找到您的卷号。恭喜,您只是无意中使用了Binary Search算法。
这只是一个简单的示例,您可能已经了解了一点,为什么学习数据结构和算法在现实生活中很重要。您在日常生活中可以找到很多例子。因此,如果您认为此技能仅对破解基于产品的公司的采访很重要,那么您就完全错了。
从上面的示例中,我们可以直接给出学习数据结构和算法的两个原因……
- 如果您想打断面试并进入基于产品的公司
- 如果您喜欢解决现实世界中的复杂问题。
破解对顶级产品公司的采访
您是否知道所有的SQL和Linux命令都是算法和数据结构?您可能没有意识到这一点,但这就是软件的工作方式。
数据结构和算法在实现软件和雇用过程中也起着重要作用。许多学生和专业人士都存在这样一个问题:为什么这些公司的面试重点放在DSA上,而不是针对语言/框架/工具的特定问题?让我们解释一下为什么会发生……
当您要求某人对某事做出决定时,好的人会告诉您“我选择做X,因为在这些方面,它比A,B更好。我本可以选择C的,但是由于这个原因,我认为这是一个更好的选择。在我们的日常生活中,我们总是和那个可以在短时间内高效完成任务并使用更少资源的人一起工作。这些公司也发生同样的事情。这些公司面临的问题更加艰巨,规模更大。解决这些公司的问题时,软件开发人员还必须做出正确的决定。
对数据结构(例如哈希表,树,树,图表,图形和各种算法)的了解对于有效解决这些问题大有帮助,面试官对了解候选人如何使用这些工具来解决问题更感兴趣。就像汽车修理工需要正确的工具来修理汽车并使其正常运行一样,程序员也需要正确的工具(算法和数据结构)来使软件正确运行。因此,面试官希望找到一个候选人,他们可以运用正确的工具来解决给定的问题。 。如果您知道一种数据结构与另一种数据结构相比的特性,则可以选择正确的数据结构来解决问题,从而做出正确的决定。
在像Google,Microsoft,Facebook,Amazon这样的公司工作的工程师与其他公司不同,并且薪资高于其他公司……但是为什么呢?在这些公司中,编码只是实现,大约需要20-30%的时间分配给项目。大多数时间都在使用最佳和最佳算法来设计事物,以节省公司的资源(服务器,计算能力等)。这就是为什么这些公司中的采访集中在算法上的主要原因,因为他们希望开箱即用的人设计可以为公司节省数千美元的算法。 Youtube,Facebook,Twitter,Instagram,GoogleMaps这些网站的用户数量是世界上最多的。为了在这些站点上处理更多的用户,需要进行更多的优化,这就是基于产品的公司仅聘用可以根据用户需求优化其软件的候选人的原因。
示例:假设您在Facebook公司工作。您提出了一个时间复杂度为O(nLogn)而不是O(n ^ 2)的问题的最佳解决方案(例如,对来自印度的用户列表进行排序),并假定公司的问题的n实际为n生活场景是1亿(考虑到在Facebook上注册的用户数超过10亿,这是非常公平的假设)。 nLogn将为8亿,而n ^ 2将为10 ^ 70亿。在成本方面,您可以看到效率提高了10 ^ 7倍以上,这在服务器成本和时间方面可以节省很多。
现在,您可能已经知道公司想要雇用一个聪明的开发人员,他们可以做出正确的决定并节省公司资源,时间和金钱。因此,在给出使用哈希表而不是列表来解决特定问题的解决方案之前,请仔细考虑大规模应用程序和所有案例。它可以为公司创造收入,也可以使公司蒙受巨额损失。
解决一些现实世界中的复杂问题
当您在混乱的房间里找不到书或衣服时,有没有被父母骂过?绝对可以。您的父母对他们的建议是正确的,以确保一切都在正确的位置,以便下次您可以轻松获得所需的东西。在这里,您需要以一种结构来安排和保留所有内容(数据),以便每当您需要搜索某些内容时,都可以轻松而又迅速地获得它。这个例子清楚地表明,在现实生活中安排或构造数据有多么重要。
现在以图书馆为例。如果您需要从图书馆中找到一本关于集合论的书,那么您将首先进入数学部分,然后进入集合论部分。如果这些书不是以这种方式组织的,而是随机分配的,那么寻找特定的书将很令人沮丧。因此,数据结构是指我们在计算机上组织信息的方式。计算机科学家进行处理并寻找可以组织我们拥有的数据的最佳方式,因此可以根据提供的输入更好地对其进行处理。
许多新手程序员都提出了这样一个问题:我们在日常生活中将数据结构和算法的所有内容都用在哪里,以及它在解决现实世界中的复杂问题上如何有用。我们需要提及的是,无论您是否有兴趣进入顶尖的科技巨头公司,DSA仍然对您的日常生活有很大帮助。您不相信我们吗?让我们考虑一些例子……
- Facebook(是的……我们正在谈论您最喜欢的应用程序)。您是否可以想象Graph可以轻松代表您在Facebook上的朋友,朋友的朋友,共同的朋友?放松……坐一会儿再想一想……您可以在Facebook上应用图形来表示朋友的联系。
- 如果您需要保留一副纸牌并妥善安排,您将如何做?您可以将其随机扔掉,也可以将它们从适当的甲板上一张又一张地排列。您可以在此处使用堆栈来正确安排卡片彼此之间的排列。
- 如果您需要在词典中搜索单词,您将采取什么方法?您是逐页浏览还是打开某些页面,如果未找到该单词,则根据当前页面中单词的顺序打开一个页面(在此页面之前/之后)(二进制搜索)。
前两个是为实际问题选择正确的数据结构的好例子,而第三个是为在较短时间内解决特定问题的选择正确的算法的好例子。
以上所有示例使您清楚地了解数据的组织在我们的日常生活中如何真正重要。以特定的结构排列数据确实有助于节省大量时间,并且变得更易于操作或使用它们。算法也是如此……我们都希望节省时间,能源和资源。我们每个人都希望选择最好的方法来解决我们日常生活中的问题。世界上存在许多问题,可能需要数小时或数天才能使用本机解决方案解决,也可能需要数年!你可以想象!注意:数据结构和算法的重要性
我们被许多现实世界中复杂的问题所包围,没有人能解决这些问题。深入观察问题,您可以帮助世界提供前所未有的解决方案。
Data structure and algorithms help in understanding the nature of the problem at a deeper level and thereby a better understanding of the world.
如果您想了解更多有关为什么使用数据结构和算法的知识,则必须观看Sandeep Jain先生(GeeksforGeeks首席执行官兼创始人)的视频。