📜  2021 年在实际应用中实现的 12 大数据结构算法

📅  最后修改于: 2021-10-21 05:05:52             🧑  作者: Mango

新的一年……新的开始……!!!

今年有什么打算??? (当程序员)

当然,如果您是程序员,那么今年您还将编写代码、构建项目,并且您将解决很多编码问题。

让我们谈谈数据结构和算法……

计算机科学的核心和程序员生活在编码世界中的气息……

2021 年实际应用前 12 名的数据结构算法

许多初学者通过拿起这两个计算机科学的重要工具来开始学习编程。您可能已经练习了很多,但是您是否曾经尝试了解这些算法在实际应用中的作用。当然,学习它们是有原因的。大多数新手程序员为了工作而学习它,但如果我们了解这些算法在现实世界中的实际实现,那岂不是很有趣。

新的一年来了,新的一年我们鼓励你去看看著名算法的实际场景,而不是为了工作而学习它们。在这篇博客中,我们将讨论这些算法在现实世界中的一些实际实现。

无论您是新人还是有经验的人,您都会发现阅读很有趣。这篇文章将刷新有经验的程序员的记忆。  

1.斐波那契数列

当然,您一生中可能已经执行过一次斐波那契数列的程序。作为一名学生,您可能会要求实施斐波那契数列的程序,或者您可能在 XYZ 公司的面试中问过这个问题。

是的!!!我们谈论的是我们应用数学公式的同一系列 a n = a n -2+a n -1在我们的程序中得到序列。我们实现代码以将系列 0、1、1、2、3、5、8、13 和 21 设为无穷大。在这个系列中,我们通过添加连续的系列来获得下一个最高的数字。

您编写程序,通过考试或通过面试,但您是否曾尝试搜索该系列在实际应用中的用途?可能是什么可能情况利用该算法现实世界?

这个序列的妙处可以用来计算英里到公里,反之亦然。您将获得几乎准确的结果(不准确但足够准确)。在斐波那契数列中,您可以将任何数字视为英里,而下一个数字将以公里为单位。

2. 回文算法

这是程序员中另一种流行的算法。回文数或字符串以相反的顺序读取相同的内容。比如……level,女士,12021。实现这个算法也是很多公司面试过程中常见的问题。

您在实现回文数程序时测试了您的逻辑能力,但您能想一下这个著名算法的实际场景吗?可以用在哪里?

回文用于DNA 序列处理。但是在这个处理中它是如何使用的呢?

许多 DNA 序列变得可用。为了存储有关这些 DNA 序列的信息,我们使用分子生物学数据库。这些数据库的容量将来会更大,因此在数据库中有效地通信和存储数据非常重要。

压缩这些 DNA 序列以获得更好的性能非常重要。可以使用 CTW(上下文树加权方法)来压缩这些序列。这种方法将 DNA 序列压缩为每个符号少于 2 位。

主要已知DNA序列的两种特征结构。一种是回文或反转恭维,另一种是近似重复。该算法使用散列和动态编程在对下一个符号进行编码之前搜索近似重复和回文。如果它找到足够长的回文或近似重复,则算法用长度和距离表示它。

3. 数组

在编程中学习的第一个数据结构……

在许多应用程序中最常用和最广泛使用的数据结构……

每个初学者的编程之旅都是从解决数组问题开始的。作为一名程序员,您肯定在您的应用程序中经常使用这种数据结构。这种数据结构用于您需要在一个地方收集对象的所有可能情况。从简单到复杂的软件或 Web 应用程序阵列主要用于在网页上动态存储和显示数据。让我们举一个在实际应用程序中使用数组的好例子……

我们都必须至少使用过一次在线订票系统。它可能用于预订火车票、公共汽车、航班、电影或任何其他节目的票。如果我们想预订任何座位,那么只需点击一个方块,它就会被预订。

您有没有想过,您在任何系统上在线预订的座位都是二维数组?

当您预订座位时,它位于特定行和列中的某个位置。这可以用一个二维数组来表示,比如一个座位[4][5]。因此数组适用于各种在线预订系统。希望您明白并了解 Array 的实际应用。

4. 堆栈

作为初学者,您肯定已经阅读过堆栈数据结构的常见示例……橱柜中的一堆盘子或书籍,但是除了这个基本的堆栈示例之外,您能想出另一个堆栈示例吗?

是否有任何基于Stack 数据结构概念构建和运行的实际应用程序

是的!!!  有…

记事本或 Microsoft Word 等文本编辑器使用堆栈数据结构在其编辑器中完成撤消任务。堆栈的另一个很好的例子是浏览器在您的笔记本电脑或系统中工作。

每当您在文本编辑器中执行活动时,都会创建一个堆栈。使用推送操作存储操作、其元数据,如操作类型、操作性质、数据等。使用弹出操作执行撤消操作和最后一个操作(存储在堆栈顶部)从堆栈中删除或撤消。

堆栈数据结构的另一个很好的例子是浏览器在您的笔记本电脑或系统上工作。假设您正在访问 www.google.com,然后访问 www.geeksforgeeks.org。之后,您访问 www.youtube.com。使用推送操作将此信息存储在堆栈数据结构中。当您单击浏览器中的后退按钮时,您将转到上一页,这是在堆栈中执行的弹出操作。

因此,如果您在 www.youtube.com 页面上并按下后退按钮,那么您将访问上一页 www.geeksforgeeks.org。再次按下后退按钮执行弹出操作,您将返回到 www.google.com 页面。

5. 链表

程序员中另一种流行和常见的数据结构是链表。现在想想这个数据结构在实际应用程序中的用途。

我们的手机上都有音乐播放器,上面有歌曲。假设您的列表中有 5-6 首歌曲。当您为这些歌曲创建播放列表时,它适用于链接列表的概念。这些歌曲一一播放,这是单向链表的最佳示例之一。歌曲已连接,您可以从第三首歌曲转到第四首歌曲,但无法返回(单向链表的行为)。

当您实现双向播放歌曲的功能时,它遵循双向链表的行为。在双向链表中,节点是双向连接的。因此,在播放列表中,您可以从歌曲 3 移动到歌曲 4,以及从歌曲 3 移动到歌曲 2。您将同时拥有上一个和下一个按钮。所以双向导航是可能的。

当您以重复模式播放歌曲时,它遵循循环链表的行为。在循环链表中,最后一个节点与第一个节点相连。因此,一旦最后一首歌曲完成,第一首歌曲将再次播放,它将以循环模式播放,并且永远不会停止。

6. 二分搜索算法

作为一名程序员,您可能知道二分搜索算法。该算法也称为半间隔搜索、对数搜索或二进制斩波。在这个算法中,我们在一个排序的数组中搜索目标值。

此算法使搜索过程更容易,因为您不需要比较数字列表中的每个元素。二分查找是在有序数据列表中快速查找目标值的方法。它使您能够有效地执行此过程。您可以找到很多二分搜索算法的示例,例如在字典中搜索单词的含义,但是您知道使用二分搜索方法的实际应用程序吗?

该算法的现实场景之一是验证应用程序中的用户凭据。使用二分搜索,您可以在几秒钟内验证数百万用户的凭据。

该算法还用于许多编程语言库,如Java、.NET、C++ STL 等。 Python 的 list.sort() 方法使用Timsort ,它 (AFAIK) 使用二分搜索来定位元素的位置。 99% 的 3D 游戏和应用程序也使用二分搜索。

7.归并排序算法

合并排序基于分而治之技术的概念。我们将列表分成几个子列表,直到子列表不包含单个元素。之后,我们合并这些子列表以获得元素的排序列表。这是对该算法的简单而简短的介绍,但您知道它在实际应用程序中的使用位置吗?

很多人喜欢通过任何电子商务网站进行网上购物。你知道这些电商网站都是用这个算法的吗?大多数电子商务网站都有“您可能喜欢”的部分此部分维护所有用户帐户的数组,然后使用您的选择数组反转次数最少的那个,开始推荐他们购买的或他们喜欢的东西。 (下次本节将提醒您在这些网站上购物时使用二分搜索)

8. 阿姆斯壮数

另一个受程序员欢迎的程序是检查数字是否为 Armstrong。在阿姆斯特朗数中,一个数的各位数的立方和等于该数本身。例如,153 和 371 是阿姆斯壮数。阿姆斯壮数主要用于数据加密和解密的数据安全应用。

访问 IJITEE 的链接。提到了无线传感器网络的阿姆斯壮数。他们使用了基于 Armstrong 的安全算法,其中使用 Armstrong 数字生成 128 位密钥。它在 AES 算法中用于数据加密和解密。

9. 霍夫曼编码

霍夫曼编码与密码学和数据压缩结合使用。它用于无损数据压缩。根据概率,它的实现方式是您不需要保留同一事物的多个副本。

霍夫曼编码是压缩格式,如GZIP,PKZIP(winzip的等等),和BZIP2使用。所有与互联网的通信都使用霍夫曼编码。大多数图像文件如 JPEG 和 PNG 都是霍夫曼编码的。此外,诸如 MP3 之类的音乐文件是 Huffman 编码的。

霍夫曼码将定长码转换为变长码。使用生成所需压缩率的 JPEG 和 MPEG 技术对其进行进一步压缩。

10. 动态规划

计算机科学学生和程序员最喜欢的另一个主题是动态编程。 0-1 背包问题、断字问题、最长公共子序列所有这些问题都是动态规划中最流行和最常见的问题。你解决它,你使用你的逻辑能力,但实际上在现实世界中使用这个概念的地方……

动态规划广泛应用于生物信息学、数学和经济学。生物信息学中的任务,如序列比对,蛋白质折叠,RNA结构预测和蛋白质-DNA结合使用动态编程。

在数学中,DP用于矩阵乘法,在Rocket技术中广泛使用。火箭的路径是通过解决许多参数来决定的。所有的决策问题都可以使用动态规划来优化解决。

11. 图表

无论您是在某个地方旅行、外出还是试图找到通往特定目的地的路线。你在你的手机谷歌地图中使用你最好的朋友。你知道谷歌地图使用的是Graph数据结构吗?

图数据结构是一种非常强大的数据结构。不仅地球,整个宇宙都可以用图形来表示。从微小的亚原子粒子到巨大的宇宙,您可以在 Graph 的帮助下表示每一个事物。

当您使用 Google 地图时,所有城市和州都像带有距离信息的图表一样连接在一起。从一个城市到达另一个城市的方法有很多种,但是要找到两个城市之间的最短路径,您需要使用一些算法。 Dijkstra 的算法是一种非常强大的算法,可以用来找到两个城市之间的最短路径。

为了确定到达目的地的最短路径,Dijkstra 的算法会启用您手机中的导航系统/GPS 。优步使用匈牙利算法将每辆车分配给寻找乘车的人。

Facebook 还使用图数据结构来实现新闻提要或关注者。它使用 Graph API 来实现其应用程序中的大部分内容。一切都可以由顶点或节点表示,例如页面、位置、组、评论、照片、相册、故事、视频、笔记等。每个连接或关系都是 Facebook 上的边缘。图 API 以顶点和边的形式存储数据。

12. 数据结构

这是一个面向程序员的高级数据结构主题。你学习它可能是为了工作,你也喜欢基于它解决问题,但是这个高级主题在实际应用中有什么用处。它在我们的日常生活中在哪里实施?让我们来看看那个有趣的答案……

你每天都在使用手机,你也使用手机中的刷卡功能。移动键盘中的这种滑动功能和编写文档时的自动更正使用 Trie 数据结构。 Trie 数据结构保存手机中的字符值。

网络浏览器历史记录也使用 Trie 数据结构。您访问过的站点的 URL 由 Trie 数据结构组织。当用户输入之前使用过的 URL 的前缀时,浏览器会使用这个强大的数据结构来完成 URL。

最后的想法

现在您已经了解了著名数据结构和算法的实际用例。知道这些著名的算法是如何在我们的日常生活中实现的,难道不是很有趣吗?

我们中的许多人对这些数据结构和算法的有趣用例一无所知。我们在某处使用它,但我们不知道它。 在开始学习任何东西之前先了解某事的好处总是好的。这些只是我们介绍的一堆数据结构和算法,但我们在日常生活中使用了几种算法。

现在,新的一年考虑其他算法的实际用例……

还有,新的一年,学习这些算法不仅仅是为了学习它们,还要学习这些算法来自己实现一些有趣的实际应用。