首页 > 编程语言 > 详细

数组中最大的子数组之和的测试分析

时间:2021-03-14 23:44:40      阅读:35      评论:0      收藏:0      [点我收藏+]

题目要求:数组中最大的子数组之和(如下图),然后进行单元测试和效能分析。

技术分享图片

 

 

 

 

 

 

 一、数组中最大的子数组之和的类

代码如下:

class SumMaxNum():
    def function(serf,lists):
        max_sum = lists[0]
        pre_sum = 0
        for i in lists:
            if pre_sum < 0:
                pre_sum = i
            else:
                pre_sum += i
            if pre_sum > max_sum:
                max_sum = pre_sum
        return max_sum

二、单元测试

1 编写测试类

import unittest
class MyTestCase(unittest.TestCase):
    def test_something(self):
        return self.assertEqual(True, False)
    def test1(self):
        ts = SumMaxNum()
        return self.assertEqual(ts.function([-2 ,6, -1, 5, 4, -7, 2, 3]),14)
    def test2(self):
        ts = SumMaxNum()
        return self.assertEqual(ts.function([1, 4, -5, 9, 8, 3, -6]),20)
    def test3(self):
        ts = SumMaxNum()
        return self.assertEqual(ts.function([-1 ,20 ,-5, 30 ,-4]),45)
    def test4(self):
        ts = SumMaxNum()
        return self.assertEqual(ts.function([-2 ,-3,-5 ,1 ,-9]),1)
    def test5(self):#这组故意设置错误的值
        ts = SumMaxNum()
        return self.assertEqual(ts.function([-2 ,-3,-5 ,1 ,-9]),0)

if __name__ == __main__:
    suite = unittest.TestSuite()
    suite.addTest(MyTestCase(test1))
    suite.addTest(MyTestCase(test2))
    suite.addTest(MyTestCase(test3))
    suite.addTest(MyTestCase(test4))
    suite.addTest(MyTestCase(test5))
    runner = unittest.TextTestRunner()
    runner.run(suite)

2 得出测试结果

技术分享图片

 

 

 根据测试结果可以看出公测试了5组数据,其中第5组发生了错误。

三 效能分析

注意:后面由于我的PyCharm IDE出问题了,换用了Spyder编译环境,对结果没有影响。

1 对求数组中最大的子数组方法的效能分析

代码

class SumMaxNum():
    def function(serf,lists):
        max_sum = lists[0]
        pre_sum = 0
        for i in lists:
            if pre_sum < 0:
                pre_sum = i
            else:
                pre_sum += i
            if pre_sum > max_sum:
                max_sum = pre_sum
        return max_sum

if __name__ == __main__:
    
    import cProfile
    cProfile.run("SumMaxNum().function([-2 ,-3,-5 ,1 ,-9])")

结果:

 

技术分享图片

      • tottime:函数内部消耗的总时间。(可以帮助优化)
      • percall:是tottime除以ncalls,一个函数每次调用平均消耗时间。
      • cumtime:之前所有子函数消费时间的累计和。
      • filename:lineno(function):被分析函数所在文件名、行号、函数名。

2 对测试类的效能分析

代码:

    import cProfile
    cProfile.run("suite.addTest(MyTestCase(‘test1‘))")
    cProfile.run("suite.addTest(MyTestCase(‘test2‘))")
    cProfile.run("suite.addTest(MyTestCase(‘test3‘))")
    cProfile.run("suite.addTest(MyTestCase(‘test4‘))")
    cProfile.run("suite.addTest(MyTestCase(‘test5‘))")

结果截图

技术分享图片

      • tottime:函数内部消耗的总时间。(可以帮助优化)
      • percall:是tottime除以ncalls,一个函数每次调用平均消耗时间。
      • cumtime:之前所有子函数消费时间的累计和。
      • filename:lineno(function):被分析函数所在文件名、行号、函数名。

 

数组中最大的子数组之和的测试分析

原文:https://www.cnblogs.com/lengend/p/14532606.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!