📜  为什么学习数据结构和算法很重要?

📅  最后修改于: 2021-10-19 04:54:06             🧑  作者: Mango

数组、链表、堆栈、队列、搜索、排序、树、图……
你有没有疑问,如果上面这些复杂的东西在现实生活中完全没有用,我为什么还要研究它??如果数据结构和算法在日常工作中没有用,为什么公司会提出与数据结构和算法相关的问题?

许多初学者和有经验的程序员避免学习数据结构和算法,因为它很复杂,他们认为在现实生活中没有使用上述所有东西。因此,在我们讨论该主题之前,我们将向您抛出一个简单的问题,您需要为此找到解决方案。

为什么学习数据结构和算法很重要

如果您需要在 20000 页的 PDF 文档中搜索您的卷号(卷号按递增顺序排列),您会怎么做?

  • 如果您尝试随机或按顺序搜索它,将花费太多时间。一段时间后,您可能会感到沮丧。
  • 您可以尝试下面给出的另一种解决方案……
    1. 转到第 1 页。 10000
    2. 如果你的卷没有。不存在,但所有其他卷没有。在该页面中小于您的比
    3. 转到第 1 页。 15000
    4. 如果你的卷没有。不在这里。但这次所有其他卷没有。比你的大。
    5. 转到第页。 12500

继续相同的过程,您将在 30-40 秒内找到您的卷号。恭喜……你只是无意中使用了二分搜索算法。

这只是一个简单的例子,你可能已经理解了为什么学习数据结构和算法在现实生活中很重要。你可以在日常生活中找到很多例子。因此,如果您认为此技能仅对破解基于产品的公司的面试很重要,那么您就完全错了。

从上面的例子中,我们可以直接给出两个学习数据结构和算法的理由……

  • 如果你想破解面试并进入以产品为基础的公司
  • 如果您喜欢解决现实世界中的复杂问题。

破解顶级产品公司的面试

您是否知道在后台,您所有的 SQL 和 Linux 命令都是算法和数据结构?您可能没有意识到这一点,但这就是软件的工作方式。

数据结构和算法在实施软件和招聘过程中发挥着重要作用。很多学生和专业人士都有这样的疑问,为什么这些公司的面试都集中在 DSA 而不是语言/框架/工具特定的问题上?让我们解释一下为什么会发生……

当你要求某人为某件事做出决定时,好的人会告诉你“我选择做 X 是因为它在这些方面比 A、B 更好。我本可以选择 C,但我觉得这是一个更好的选择,因为这个“.在我们的日常生活中,我们总是和那个能够在短时间内高效完成任务并使用更少资源的人一起去。同样的事情也发生在这些公司身上。这些公司面临的问题要困难得多,而且规模要大得多。在解决这些公司的问题时,软件开发人员还必须做出正确的决定。

哈希表、树、尝试、图和各种算法等数据结构的知识在有效解决这些问题方面大有帮助,面试官更感兴趣的是了解候选人如何使用这些工具来解决问题。就像汽车修理工需要正确的工具来修理汽车并使其正常运行一样,程序员需要正确的工具(算法和数据结构)来使软件正常运行。因此,面试官希望找到可以应用正确的工具集来解决给定问题的候选人。 .如果您了解一种数据结构与另一种数据结构的区别,您将能够做出正确的决定,选择正确的数据结构来解决问题。

在谷歌、微软、Facebook、亚马逊之类的公司工作的工程师与其他公司不同,与其他公司相比薪酬更高……但为什么呢?在这些公司中,编码只是实施,大约占分配给项目的时间的 20-30%。大多数时间都用于使用最佳算法设计事物,以节省公司资源(服务器、计算能力等)。这就是为什么这些公司的面试都集中在算法上的主要原因,因为他们希望能够跳出框框思考的人设计出可以为公司节省数千美元的算法。 Youtube、Facebook、Twitter、Instagram、GoogleMaps 所有这些网站都拥有世界上最多的用户。为了在这些站点上处理更多用户,需要进行更多优化,这就是基于产品的公司只雇用可以根据用户需求优化其软件的候选人的原因。

示例:假设您在 Facebook 公司工作。您想出了一个问题的最佳解决方案(例如对来自印度的用户列表进行排序),其时间复杂度为 O(nLogn) 而不是 O(n^2),并假设 n 代表公司的实际问题生活场景是 1 亿(考虑到在 facebook 上注册的用户数量超过 10 亿,这是非常合理的假设)。 nLogn 为 8 亿,而 n^2 为 10^70 亿。在成本方面,您可以看到效率提高了 10^7 倍以上,这在服务器成本和时间方面可能是一个巨大的节省。
现在您可能已经知道公司想要聘请一位能够做出正确决策并节省公司资源、时间和金钱的聪明的开发人员。因此,在您给出使用哈希表而不是列表来解决特定问题的解决方案之前,请仔细考虑大范围和所有案例场景。它可以为公司创造收入,否则公司可能会损失巨额资金。

解决一些现实世界的复杂问题

你有没有在你乱糟糟的房间里找不到书或衣服时被父母责骂?绝对是的……你的父母是对的,他们建议把所有东西都放在正确的地方,这样下次你就可以轻松地拿到东西了。在这里,您需要将所有内容(数据)安排和保存在这样一种结构中,以便无论何时您需要搜索某些内容,都可以轻松且尽快地获得。这个例子清楚地说明了在现实生活中排列或构造数据的重要性。

现在以图书馆为例。如果你需要从图书馆找一本关于集合论的书,你会先去数学部分,然后是集合论部分。如果这些书不是以这种方式组织的,而是随机分布的,那么找到特定的书将是令人沮丧的。所以数据结构是指我们在计算机上组织信息的方式。计算机科学家处理并寻找我们可以组织我们拥有的数据的最佳方式,以便可以根据提供的输入更好地处理它。

许多新手程序员都有这样一个问题,即我们在日常生活中在哪里使用数据结构和算法的所有东西,以及它们在解决现实世界的复杂问题中有何用处。我们需要提到的是,无论您是否有兴趣进入顶级科技巨头公司,DSA 仍然对您的日常生活有很大帮助。你不相信我们……让我们考虑一些例子……

  • Facebook(是的……我们正在谈论您最喜欢的应用程序)。你能想象你在 facebook 上的朋友,朋友的朋友,共同的朋友,他们都可以很容易地用 Graph 表示吗?放松……坐一会儿,再想一想……您可以应用图表来表示 facebook 上的朋友联系。
  • 如果你需要保留一副牌并妥善安排它,你会怎么做?您将随机扔掉它,或者您将卡片从一个合适的甲板上一个一个地排列在另一个上。您可以在此处使用 Stack 来正确排列卡片。
  • 如果您需要在字典中搜索一个词,您会采用什么方法?您是逐页浏览还是打开某个页面,如果找不到该单词,则根据当前页面的单词顺序(二进制搜索)在打开页面之前/之后打开页面。

前两个是为现实世界的问题选择正确数据结构的一个很好的例子,第三个是选择正确的算法以在更短的时间内解决特定问题的一个很好的例子。

以上所有示例都让您清楚地了解数据的组织在我们的日常生活中是多么重要。以特定结构排列数据确实有助于节省大量时间,并且更容易操作或使用它们。算法也是如此……我们都想节省时间、精力和资源。我们都想选择最好的方法来解决日常生活中的问题。世界上存在许多问题,使用本机解决方案可能需要数小时或数天才能解决,也可能需要数年时间!你可以想象!看这个:数据结构和算法的重要性
我们被许多现实世界的复杂问题所包围,没有人能够解决这些问题。深入观察问题,你可以帮助这个世界给出以前没有人给出的解决方案。

如果您想更多地了解为什么使用数据结构和算法,那么您必须观看Sandeep Jain 先生(GeeksforGeeks 的首席执行官兼创始人)的这段视频。