算法第二章作业与学习总结

计科2101高志奕 2022-09-26 21:07:07

1.伪代码描述最大子段和分治算法

如图,我们可以创建一个数组, 并用该数字用于输入数据和储存最大子段和. 首先将最大子段和设为零, 在输入的同时将最大子段和和当前子段和进行比较和更新, 当下标 = 0时, 最大子段和要么为arr[0], 要么= 0;  当下标大于0时, 就可以通过判断前一位数(即上一位为止的子段和)是否大于0, 若大于零则更新当前的子段和, 再通过与最大子段和比较, 判断是否更新最大子段和. 

 

 

2.分析时间复杂度

 如图可知, 当有n个数时, 循环次数为n;

T(n) = O(n);

 

 

3.学习回顾

       在本章的课程中, 我学习了递归与分治策略, 所谓递归就是直接或间接调用自身的算法, 在算法设计中是一种十分普遍且易懂的算法, 适用于实现一些具有递归特性的问题, 对于某些问题, 即使没有递归特性, 但是如果具有某些规律的话, 也可以酌情考虑使用递归函数。而分治策略恰好又能与递归进行配合, 往往这两者经常同时出现. 所谓分治策略, 就是将规模为n的一个问题分解为k个规模较小的子问题, 这些子问题相互独立, 解题思想又与原题相同.  在这种情况下, 使用递归算法往往能巧妙地解决问题. 可以说, 递归算法和分支策略是相辅相成的. 

      事实上, 即使递归算法较为易懂, 设计起来也更加方便, 但是其本身的时间复杂度与空间复杂度并不理想, 在解决规模较小的问题时使用效果较好, 问题规模较大时, 迭代会是更好的选择. 使用递归时,  最重要的一点是判断边界条件, 即在什么时候结束递归, 完成了这一点, 递归算法也就完成了一半了. 在本章中, 二分法常常搭配递归和分治进行使用,使用二分法时, 问题的时间复杂度往往可以降低到logn或者nlogn.  在二分法的使用过程中, 如何划分左边界和右边界在不同的问题中有不同的设计, 需要结合具体问题进行时用. 除此之外, 递归与分治算法还在其他问题中有所提现, 诸如归并排序, 快速排序等等. 结合递归思想去理解这些算法的实现过程是比较高效的. 

...全文
88 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-数据结构与算法 发布问题, 以便更快地解决您的疑问

434

社区成员

发帖
与我相关
我的任务
社区描述
广东外语外贸大学信息科学与技术学院
算法 高校
社区管理员
  • brisksea
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧