码迷,mamicode.com
首页 > 编程语言 > 详细

算法第二章上机实践报告

时间:2020-11-11 16:10:57      阅读:54      评论:0      收藏:0      [点我收藏+]

标签:组成   log   scripts   name   str   include   nlog   最大连续   fonts   

  1. 实践题目名称: 最大子列和问题
  2. 问题描述:

    给定K个整数组成的序列{ N?1??, N?2??, ..., N?K?? },“连续子列”被定义为{ N?i??, N?i+1??, ..., N?j?? },其中 1。“最大子列和”则被定义为所有连续子列元素的和中最大者。例如给定序列{ -2, 11, -4, 13, -5, -2 },其连续子列{ 11, -4, 13 }有最大的和20。现要求你编写程序,计算给定整数序列的最大子列和。

    本题旨在测试各种不同的算法在各种数据情况下的表现。各组测试数据特点如下:

    • 数据1:与样例等价,测试基本正确性;
    • 数据2:102个随机整数;
    • 数据3:103个随机整数;
    • 数据4:104个随机整数;
    • 数据5:105个随机整数;
  3. 算法描述:通过递归把1个问题分为3个小问题。把序列分为2段(左边和右边),分别求左边和右边的最大连续子列和,和中间子列和,通过比较大小得出最大子列和。代码如下:
     1 #include<iostream>
     2  using namespace std;
     3  int maxsum(int a[],int l,int r){
     4      
     5      if(l==r){
     6          if(a[l]>0) return a[l];
     7          return 0;
     8      } 
     9      int m=(l+r)/2;
    10      
    11      //左边 
    12      int lmax=0;
    13      int lsum=0;
    14      for(int i= m;i>=l;i--){
    15          lsum +=a[i];
    16          if(lsum>lmax){
    17              lmax=lsum;
    18          }
    19      }
    20     //右边 
    21      int rmax=0;
    22      int rsum=0;     
    23      for(int i=m+1;i<=r;i++){
    24          rsum+=a[i];
    25          if(rsum>rmax){
    26              rmax=rsum;
    27          }
    28          
    29      }
    30      
    31      
    32      int sum1=maxsum(a,l,m);
    33      int sum2=maxsum(a,m+1,r);
    34      
    35     int sum3=lmax+rmax;
    36     if(sum3<lmax)
    37       sum3=lmax;
    38     if(sum3<rmax)
    39        sum3=rmax;
    40     int max=lmax>rmax?lmax:rmax;
    41     int ans=sum3>max?sum3:max;
    42     return ans;
    43      
    44  }
    45  int main(){
    46      int n,a[100000];
    47      cin>>n;
    48      for(int i=0;i<n;i++){
    49          cin>>a[i];
    50      }
    51      int ans=maxsum(a,0,n-1);
    52      cout<<ans;

     

  4. 算法时间及空间复杂度分析(要有分析过程):【时间复杂度】:2个子问题、循环n次 =》n/2次  = 2T(n/2)所以T(n)=2T(n/2)+O(n) =》nlogn 【空间复杂度】:n个数,需要n个位置
  5. 心得体会(对本次实践收获及疑惑进行总结):起初代码运行一直跳不出循环,后来发现是找中间点那里数据有错误,做完这次实践,我真的觉得如何让代码避免死循环是个很重要的问题。

算法第二章上机实践报告

标签:组成   log   scripts   name   str   include   nlog   最大连续   fonts   

原文地址:https://www.cnblogs.com/ouyuanyu/p/13765425.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!