软件工程第三次作业

1. 题目要求

题目:最大连续子数组和(最大子段和)

2.最大子段和概述

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

当所给的整数均为负数时定义子段和为0,依此定义,所求的最优值为: Max{0,a[i]+a[i+1]+…+a[j]},1<=i<=j<=n

例如,当(a[1],a[2],a[3],a[4],a[5],a[6])=(-2,11,-4,13,-5,-2)时,最大子段和为20。

3.使用动态规划求解最大子段和的问题

实际上求解最大字段和有多种方法,有兴趣的可以参考最下面的链接1查看,这里选择比较简洁的解法。

关于什么是动态规划,以及它的意义是什么?这里有一个知乎的链接,上面大佬回答很清楚,在此不多赘述。

什么是动态规划?动态规划的意义是什么?

4.流程图

5.测试分析

Coding地址:https://dev.tencent.com/u/molers233/p/maxsum

5.1 条件判定覆盖

 条件判定的覆盖标准:使得判定中的每个条件获得各种可能的结果。

 

即满足以下条件:1.Temp>0;  2.sum<Temp;


满足以下覆盖情况:

判定一:Temp>0;Temp<=0
判定二:sum <Temp;sum>=Temp

 

测试用例1: (1 2 3 4 5 6) ( 21) ABDEG (Temp>0;sum<b) 结果正确。

 

测试用例2:(-2 -5 -6 -7 -8 -9) (0) ABCEG (Temp<0;sum<b) 结果正确。

 

测试用例3:(-2 -5 -6 7 -8 -9) (7) ABCDF (Temp<0;sum>b) 结果正确。

 

测试用例4:(6 5 4 3 2 1) (21) ABDEFG (Temp>0;sum>b) 结果正确。

结果见下图:

 

 

5.2 条件组合覆盖

覆盖标准:使条件的每种组合至少出现一次。


满足以下覆盖情况:


判定一:1.Temp>0;2.Temp<=0
判定二:3.sum <Temp ;4.sum>=Temp

 

a[i] 判定条件组合 路径 分析
2 1,3 ABDEF Temp<0;Temp=a[i]=2;sum<Temp;sum=Temp=2
0 1,4 ACDF Temp>=0;Temp=Temp+a[i]=2;sum>=Temp,sum=2
3 1,3 ACDEF Temp>0;Temp=Temp+a[i]=5;sum<Temp,sum=b=5
-6 1,4 ABDF Temp>0;Temp=Temp+a[i]=-1;sum>Temp;sum=5
1 2,4 ACDF Temp<0;Temp=Temp+a[i]=1;sum>Temp;sum=5
0 1,4 ACDF Temp>0;Temp=Temp+a[i]=1;sum>Temp;sum=5

 

 

 

 

 

 

 

 

测试结果如上图所示

 

参考链接:1)最大子段和详解 

               2)动态规划之最大子段和问题

               3)白盒测试 语句覆盖、判定覆盖、条件覆盖、判定条件覆盖、条件组合覆盖、路径覆盖(转)

               4)条件组合覆盖

               5)逻辑覆盖实例讲解

               6)最大子数组求和并进行条件组合覆盖测试

               7)最大子段和到最大子矩阵的一些思考

               8)最大子段和问题:蛮力、递归及动态规划

               9)动态规划---最大字段和

                10)最大连续子数组和(最大子段和)

posted @ 2019-04-19 08:59  molers  阅读(110)  评论(0)    收藏  举报
Live2D