备案号:辽ICP备19007957号-1
聆听您的声音:feedback@highmark.com.cn企业热线:400-778-8318
Copyright ©2015- 海马课堂网络科技(大连)有限公司办公地址:辽宁省大连市高新技术产业园区火炬路32A号创业大厦A座18层1801室
表示二进制搜索的时间复杂性。我们可以使用合并排序对数组进行有效排序。这种排序算法的一个例子是添加到/删除一个链表。对于一个排序算法来说,合并排序的时间复杂度是最好的:O(log N) 。本课将介绍三种最流行的算法,即搜索、排序和在链表中添加/删除。众多其他的算法共享这些算法例子背后的概念。通过对这三个算法实例的讲解,我们可以打下坚实的基础,并在未来自信地接受新的算法挑战。
算法实例#1:二进制搜索
基本的搜索算法被称为二进制搜索,它接受一个排序的数组作为输入。它返回我们想找的值的索引。下面的步骤是我们如何完成这个任务的:
找到排序后的数组的中心点。
将中点与兴趣值进行比较
在数组的右边进行二进制搜索,如果中点大于该值。
如果中点小于兴趣值,在数组的左边进行二进制搜索。
继续下去,直到感兴趣的值等于平均值,或者直到清楚地发现该事项不在数组中。
从上面的阶段可以看出,我们的解决方案可能是递归的。在每次迭代中,直到我们的数组只包括我们感兴趣的值,我们将向我们的函数提供一个较小的品种。为了从原始数组中检索出我们项目的索引,我们必须为我们的集合建立正确的索引,并在每次迭代中保持对索引偏移的跟踪。
O是二进制搜索(login)的时间复杂性。这一点从以下事实中可以看出:即使我们的输入数组的大小增加了一倍,我们的方法仍然只需要增加一次迭代就可以达到预期的结果。我们把二进制搜索的重要性归结为计算机科学中的一种属性算法。
算法的例子#2:合并排序
与 "分而治之 "类似,合并排序可以有效地对数组进行排序。我们可以在下面的阶段使用合并排序的实现。
如果数组只有一个元素,则返回,因为我们已经对它进行了排序。
把一个数组分成两半,直到不能再分为止。
一旦我们有了初始排序的数组,我们就把较小的数组按相同的顺序合并。
我们将设计两种方法来实现合并排序。一种是处理数组的除法,另一种是将两个未排序的数组重新合并成一个排序的数组。我们反复调用分割函数(merge sort),直到我们的集合只有一个成员。然后我们再把它们合并一次,再给你我们的排序数组。
一个排序算法的最佳时间复杂度是O(N log N),而合并排序就拥有这样的复杂度。通过使用分割和征服的策略,我们大大增加了排序的有效性,而排序本来就是一个昂贵的计算过程。
算法的例子#3:从链接列表中添加和删除项目
作为计算机科学的一个重要组成部分,链表以其恒定时间的插入和删除而闻名。通过采用节点和指针,我们可以比利用数组更快速有效地完成一些任务。
Ruby中的链接列表
一个链接列表由包含一些数据的节点和一个指向它之后的节点的指针组成。我们可以在Ruby中通过定义一个名为Node的结构来表达这一点,其参数为:数据和下一个Node。唯一要做的就是指定两个方法,插入Node和删除Node,这两个方法分别接受一个头部节点和一个要插入或删除的地方。我们希望插入的节点结构是插入节点函数的一个额外参数,名为Node。然后我们进行循环,直到我们到达我们想要添加或删除的地方。一旦我们到达目的地,我们就修改指针以反映我们的插入或删除。
当利用链表而不是数组时,我们可以从一个集合的中心删除项目,而不需要重新组织内存中的数据结构的其余部分。通过选择最适合我们要求的数据结构,我们可以实现最大的效率。
海马课堂留学生作业辅导,根据学生的辅导需求匹配背景相符的专业老师。1V1个性化备课,双语教学,实时辅导,讲解相关知识点和解题思路,提供大型作业任务的解决方案,辅导计算机编程语言操作,教授学生高效完成PPT和演讲稿,针对性解决留学生各类作业中遇到的困扰,提高作业成绩!
阅读原文:https://www.highmarktutor.com/news/12570_62.html
版权作品,未经海马课堂 highmarktutor.com 书面授权,严禁转载,违者将被追究法律责任。
24h在线客服



备案号:辽ICP备19007957号-1
聆听您的声音:feedback@highmark.com.cn企业热线:400-778-8318
Copyright ©2015- 海马课堂网络科技(大连)有限公司办公地址:辽宁省大连市高新技术产业园区火炬路32A号创业大厦A座18层1801室
hmkt088