博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
算法第3章上机实践报告
阅读量:7175 次
发布时间:2019-06-29

本文共 701 字,大约阅读时间需要 2 分钟。

1.实践题目

最大子段和

2.题目描述

求出子段和的最大值,若最大值为负数,则最大值为0

3.算法描述

定义一个一维数组note[i],初始时存放的值为该序列,每次更新时记录以当前下标的值为子段末尾的子段和的最大值,最后用max记录所有子段和的最大值

int max=0;for (int i = 1; i < n; i++)note[i] = note[i - 1] > 0 ? note[i - 1] + note[i] : note[i];for (int i = 0; i < n; i++)if (note[i] > max)     max = note[i];

  

4.算法时间及空间复杂度分析

该算法只需遍历一次该一维数组,所需时间为O( n ),且更新max所需时间为O(n),故时间复杂度为O(n );

需要一个大小为n的一维数组存储该序列,求解子问题时使用同一数组,故空间复杂度为O(n )。

5.心得体会

 本道题输入动态规划里面比较简单的一道,没有太大的思维障碍,结队编程时主要是想要改进这个算法,后来我们发现一种空间复杂度为O(1)的算法,不需要note[i]数组,每次输入使用一个整型变量接收数值,每次计算完成再用max记录最大值即可,但考虑到该算法通用性不够强,最终不予使用,但也不失为一个好的思路。后来发现其实很多基于动态规划的算法有很多种变化的形式,甚至有许多改进的可能性存在,在做这类题目时,我们不应只局限于如何解决问题,更应该放眼于如何优化解题方案。

转载于:https://www.cnblogs.com/underdestiny/p/9908360.html

你可能感兴趣的文章
自动检测域内电脑的USB端口是否开启的脚本
查看>>
Python 学习笔记之函数
查看>>
mysql-mmm高可用架构
查看>>
使用shell脚本搭建源码LAMP环境
查看>>
我的友情链接
查看>>
关于VMware上Linux克隆后网卡名称修改的操作
查看>>
[置顶]让Windows FTP服务器更安全
查看>>
CLR via C#,2
查看>>
xcode莫名问题收集
查看>>
Google网址不跳转
查看>>
我所说的“企业存储”是什么意思
查看>>
我的友情链接
查看>>
支付宝 支付bug
查看>>
马斯洛需求理论
查看>>
C++程序设计问题总结
查看>>
WebGIS--ArcGIS系列开发四:Server链接
查看>>
让自家系统瘫痪,这事我也干过
查看>>
404 Error on Fonts in Tomcat/Java Web App
查看>>
十进制转十六进制
查看>>
【学习笔记2】第一个Struts2应用开发
查看>>