zoukankan      html  css  js  c++  java
  • 算法第三章上机实践报告

    1.实践题目

    给定n个整数(可能为负数)组成的序列a[1],a[2],a[3],…,a[n],求该序列如a[i]+a[i+1]+…+a[j]的子段和的最大值。当所给的整数均为负数时,定义子段和为0。

    要求算法的时间复杂度为O(n)。

    2.问题描述

    题目要求时间复杂度为O(n),所以只能用一个for循环解决问题,要用到动态规划的算法。

    3.算法描述

     动态规划递归式为b[j]=max{b[j-1]+a[j],a[j]}(1<=j<=n)定义变量b作为一个动态的子段和,从第一个数开始到最后一个数。每循环判断下一个数,若大于0,最大子段和有可能包括它,则相加,若小于等于0,最大子段和不包括它。另外定义一个变量sum存储最大子段和,每次for循环最后判断当前子段和是否为当前最大子段和。这样动态存储就不用额外用一个数组b,使代码更加简洁。

    4.算法时间及空间复杂度分析(要有分析过程)

    时间复杂度:只有一个for循环 故T(n)=O(n)

    空间复杂度:所需要的存储空间为与序列a[]等大 故S(n)=O(n)

    5.心得体会(对本次实践收获及疑惑进行总结)

    动态规划的代码很简短,效率很高。这需要我们在解决问题前很好的分析问题,尽可能的简化代码。一开始对b和sum起的作用不理解,后来在同伴的讲解下才明白。只有理解方法,才能用代码实现出来。结对编程帮助我更容易理解代码,学习同伴的长处,对自己的薄弱的编程能力也有所提高。

  • 相关阅读:
    iOSS--生成有logo的二维码
    inux网卡与MAC地址绑定方法总结
    Linux--多网卡的7种Bond模式
    Arp攻击实战
    5款免费Windows远程连接Linux桌面软件(VNC客户端)
    DenyHosts安装及配置
    Cacti完全使用手册 ( 让你快速个性化使用Cacti )
    解除被DenyHosts锁定的IP地址
    linux防止sshd被爆破(安装denyhosts)
    实现水电气一卡通 IC卡扇区分配
  • 原文地址:https://www.cnblogs.com/yehaolin/p/11697202.html
Copyright © 2011-2022 走看看