最大尺寸和问题描述为,在n个整数(包含负数)的数组A中,求之和最大的非空连续子数组,如数组A=(-2,11,-4,13,-5,-2),其中子数组B=(11,-4,13)具有最大子段和20(11-4+13=20)。求解该问题,可以将数组分为两个n/2个整数的子数组最大子段或或者在前半段,或者在后半段,或者跨越中间元素,通过该方法继续划分问题,直至最后求出最大子段和,该算法的时间复杂度为()

选项A:O(nlogn)

请先 登录 后评论

1 个回答

亚里士德
擅长:互联网

知识点:分治法

章节8.2-8.3。2021、2019年考了。

对时间复杂度书上说的比较少,好像没有说清楚如何计算,在8.2章节算法分析基础里面有一个独立的小章节有相关内容。所以可能只会考察一些算法的时间复杂度的记忆,比如本题。

时间复杂度简单来说就是和主要程序片段要执行的次数有关,比如n次for循环,每一次都打印一个语句,那么只计算执行打印的次数,不计算给i赋值、控制循环i++等执行次数。另外如果一个n次的for循环里面有嵌套的n次的for循环,在外层for循环执行完毕后,又执行第三个独立的for循环,就只需计算第一个for循环的打印次数,也就是nxn也就是n的平方,后面的第三个+n就不看它了,因为它是n的1次方,最后结果只管n的最高次方。另外如果n平方前面还有一个常数系数的话,系数也要取消。

然后加个O(次数);这样就表示时间复杂度。比如查看n个数字的冒泡算法的代码,它有两层for循环(大概是每一个元素都和所有元素都发起一次比较,所以大概比较次数就是n平方),所以粗略的计算它的时间复杂度就是O(n²)。

---

其实题目中描述的算法就是章节8.3的分治法,分治法的实例之归并排序的三个步骤:分解(一半)、求解、合并,时间复杂度:O(nlogn)。

分治法两个实例:归并排序,也就是分成两半,排序。另一个是最大字段和,也就是本题所说的问题。时间复杂度同上,所以本题选A。

后面大概还有6个算法需要掌握(分治法考了一次,下一次应该要考另一个算法了):动态规划法(2019、2018)、贪心法(2021、2019、2018)、回溯法(2019、2018、2017)、分支界限法、概率算法、近似算法、等等。

请先 登录 后评论