新年…新的开始…!
您今年的计划是什么??? (成为一名程序员)
当然,如果您是一名程序员,那么今年您还将编写代码,构建项目,并且将解决很多编码问题。
让我们谈谈数据结构和算法…
计算机科学的心脏和程序员的呼吸生活在编码世界中……
许多初学者通过学习计算机科学的这两个重要工具来开始学习编程。您可能已经练习了很多,但是是否曾经尝试过了解这些算法在实际应用中的帮助。当然有一些学习它们的理由。大多数新手程序员都是为了工作而学习它的,但是如果我们了解现实世界中这些算法的实际实现,这并不有趣。
新的一年即将到来,今年新的一年,我们鼓励您检查著名算法的实际情况,而不仅仅是为了工作而学习它们。在此博客中,我们将讨论这些算法在现实世界中的一些实际实现。
无论您是新鲜人还是有经验的人,都会发现阅读有趣。本文将刷新经验丰富的程序员的记忆。
1.斐波那契数列
当然,您可能一生都经历过实施斐波那契数列的程序。作为一名学生,您可能会要求实施Fibonacci系列课程,或者在XYZ公司的面试过程中可能会问这个问题。
是的!!!我们正在谈论应用数学公式的同一系列 a n = a n -2 + a n -1在我们的程序中得到序列。我们实现代码以将0、1、1、2、3、5、8、13和21的级数变为无穷大。在本系列中,我们通过添加连续的系列获得第二高的数字。
您编写程序,清除考试或清除面试,但是您是否曾经尝试搜索该系列在实际应用中的使用位置?可能是什么可能的情况利用该算法在现实世界?
这个序列的美可以用来计算英里到公里,反之亦然。您将获得几乎准确的结果(不够准确,但足够准确)。在斐波那契数列中,您可以将任何数字视为英里,而下一个数字将以千米为单位。
Consider the sequence 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, …
In the above example, you can take two consecutive numbers 8 and 13. The smaller number is in miles i.e 8 and the bigger one is in kilometers i.e. 13.
8 in miles = 13 in kilometers.
2.回文算法
这是程序员中另一种流行的算法。回文数或字符串的读取顺序相反。例如……级别,女士,12021。在许多公司中,实施此算法也是面试过程中的一个普遍问题。
您可以在执行回文数程序时测试自己的逻辑能力,但是您能考虑一下这种著名算法的实际情况吗?可以在哪里使用?
回文用于DNA序列处理。但是如何在处理中使用它呢?
许多DNA序列变得可用。为了存储有关这些DNA序列的信息,我们使用分子生物学数据库。这些数据库的容量将来会更大,因此在数据库中进行有效的通信和存储数据非常重要。
重要的是压缩这些DNA序列以获得更好的性能。为了压缩这些序列,可以使用CTW(上下文树加权方法)。此方法将每个符号的DNA序列压缩少于两位。
DNA序列的两个特征结构主要是已知的。一种是回文或逆向称赞,另一种是近似重复。使用散列和动态编程,该算法在对下一个符号进行编码之前,先搜索近似的重复和回文。如果找到具有足够长度的回文或近似重复,则该算法用长度和距离表示它。
3.数组
在编程中要学习的第一个数据结构…
在许多应用程序中最常用和使用最广泛的数据结构…
每个初学者的编程旅程都始于解决Array的问题。作为程序员,您肯定会在您的应用程序中大量使用此数据结构。在需要将对象收集到一个地方的所有可能情况下,都会使用此数据结构。从简单到复杂的软件或Web应用程序,大多数用于在Web页面上动态存储和显示数据的阵列。让我们举一个在实际应用程序中使用数组的好例子之一……
我们所有人都必须至少使用一次在线票务预订系统。它可能用于预订火车票,也可能用于预订公共汽车,飞机或电影或任何其他节目的票。如果我们要预订任何座位,那么只需单击一个正方形即可预订。
您是否曾经想过,您在任何系统上在线预订的座位都是二维阵列?
当您预订座位时,它位于特定行和列中的某个位置。这可以用二维数组来表示,例如seat [4] [5]。因此,数组适用于所有类型的在线预订系统。希望您理解了这一点,并了解了Array的实际应用。
4.堆栈
作为一个初学者,您肯定已经阅读了有关堆栈数据结构的常见示例……在橱柜中的一堆盘子或书本,但是您能想到除此基本示例之外的另一个堆栈示例吗?
是否有任何实际应用程序在构建并在堆栈数据结构的概念上运行?
是的!!! 有…
文本编辑器(如记事本或Microsoft Word)使用堆栈数据结构在其编辑器中完成撤消任务。堆栈的另一个很好的例子是浏览器可以在笔记本电脑或系统中运行。
每当您在文本编辑器中执行活动时,都会创建一个堆栈。使用push操作可以存储操作,操作的元数据(如操作类型,操作的性质,数据等)。使用pop操作可以执行撤消操作和最后一个操作(存储在堆栈顶部)已从堆栈中删除或撤消。
堆栈数据结构的另一个很好的例子是浏览器在笔记本电脑或系统上的工作情况。假设您要访问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是阿姆斯特朗数。阿姆斯壮(Amstrong)编号主要用于数据安全应用程序中以进行数据加密和解密。
访问IJITEE的链接。提到了无线传感器网络的阿姆斯特朗编号。他们使用了基于Armstrong的安全算法,其中使用Armstrong编号生成了128位密钥。它在AES算法中用于数据加密和解密。
9.霍夫曼编码
霍夫曼编码与加密和数据压缩结合使用。它用于无损数据压缩。根据概率,它的实现方式是您无需保留同一事物的多个副本。
霍夫曼编码是压缩格式,如GZIP,PKZIP(winzip的,等等),和BZIP2使用。与互联网之间的所有通信都使用霍夫曼编码。大多数图像文件(例如JPEG和PNG)均经过霍夫曼编码。同样,音乐文件(例如MP3)也经过霍夫曼编码。
霍夫曼代码将定长代码转换为变长代码。使用生成所需压缩率的JPEG和MPEG技术对其进行进一步压缩。
10.动态编程
对于计算机科学专业的学生和程序员来说,另一个最喜欢的主题是动态编程。 0-1背包问题,分词问题,最长公共子序列这些问题都是动态编程中最流行和常见的问题。您解决了问题,使用了逻辑能力,但是在现实世界中实际使用该概念的地方……
动态编程在生物信息学,数学和经济学中被广泛使用。生物信息学中的任务,如序列比对,蛋白质折叠,RNA结构预测,和蛋白质-DNA结合使用动态编程。
在数学中,DP用于矩阵乘法,而Rocket技术广泛使用DP。火箭的路径是通过求解许多参数来确定的。使用动态规划可以最佳地解决所有决策问题。
11.图
无论您是在某个地方旅行,出门在外还是试图找到通往特定目的地的路线。您在手机的Google Map中使用了最好的朋友。您知道Google Map使用Graph数据结构吗?
图形数据结构是非常强大的数据结构。该图不仅可以表示地球,还可以表示整个宇宙。从微小的亚原子粒子到巨大的宇宙,您都可以借助Graph来表示每件事。
使用Google地图时,所有城市和州都像带有距离信息的图形一样连接在一起。从一个城市到达另一城市有很多方法,但是要找到两个城市之间的最短路径,您需要使用一些算法。 Dijkstra的算法是一种非常强大的算法,可以用来找到两个城市之间的最短路径。
为了确定到达目的地的最短路径,Dijkstra的算法可在手机中启用导航系统/ GPS 。 Uber使用匈牙利算法将每辆车分配给寻找乘车的人。
Facebook还使用图形数据结构来实现新闻提要或关注者。它使用Graph API在其应用程序中实现大多数功能。一切都可以由顶点或节点来表示,例如页面,位置,组,评论,照片,相册,故事,视频,便笺等。每个连接或关系都是Facebook上的优势。 Graph API以顶点和边的形式存储数据。
12.特里数据结构
这是程序员的高级数据结构主题。您了解到它可能是为了工作,您也喜欢根据它解决问题,但是此高级主题在实际应用程序中的用途是什么。在我们的日常生活中,它在哪里实施?让我们得出一个有趣的答案……
您每天都在使用手机,还使用其中的滑动功能。您的移动键盘上的这种滑动功能以及在编写文档时自动更正使用的是Trie数据结构。 Trie数据结构将字符值保存在手机中。
网络浏览器的历史记录也使用Trie数据结构。您访问过的站点的URL由Trie数据结构组织。当用户键入以前使用的URL的前缀时,浏览器将使用此功能强大的数据结构来完成URL。
最终思想
现在您知道了著名的数据结构和算法的实际用例。知道这些著名算法是如何在我们的日常生活中实现的,这是否很有趣?
我们中的许多人都不了解这些数据结构和算法的有趣用例。我们在某个地方使用它,但是我们没有意识到。 在学习任何东西之前,先了解事物的好处总是很高兴的。这些只是我们介绍的一堆数据结构和算法,但是我们在日常生活中使用了几种算法。
现在,新的一年考虑了其他算法的实际用例……
另外,新的一年不仅要学习这些算法,还需要学习这些算法以自己实现一些有趣的现实应用。