求数组的最大子数组之和
求数组的最大子数组之和
题目:求出数组中最大的子数组之和
要求:
输入,一个数组,和它的大小 输出,这个数组中最大子数组的和
一、程序代码
本程序选用python软件进行编写
代码:
#求数组的最大子数组之和 def function(lists): max_sum=lists[0] #获取数组第一个数据 pre_sum=0 # for i in lists: #遍历数组lists if pre_sum<0: pre_sum=i else: pre_sum+=i if pre_sum>max_sum: max_sum=pre_sum return max_sum #返回最大子数组之和
二、单元测试
python中有太多的单元测试框架和工具,比如:unittest, testtools, subunit, coverage, testrepository, nose, mox, mock, fixtures, discover等,这里本文使用unittest工具进行测试,unittest是一个python版本的junit,junit是java中的单元测试框架,对java的单元测试。
代码:
import unittest #导入unittest工具 class TestStudent(unittest.TestCase): def test1(self): data=[-1,2,3,-4,5,9,-5,6,-9] result=function(data) self.assertEqual(result,16) def test2(self): data=[-1, 2, -5, 3, -4,4,5,-3] result=function(data) self.assertEqual(result,9) def test3(self): data=[-1, 20, -5, 30, -4,-2,5] result=function(data) self.assertEqual(result,45) def test4(self): data=[-2, -3, -5, -1, -9,8,-2,5] result=function(data) self.assertEqual(result,11)
unittest.main()
运行结果:

从图中的运行结果可知,运行结果正确
三、性能分析
本性能分析选用的是cProfile模块
代码:
if __name__ == '__main__': suite_test=unittest.TestSuite() suite_test.addTest(TestCase('test1')) suite_test.addTest(TestCase('test2')) runner=unittest.TextTestRunner() runner.run(suite_test) import c Profile cProfile.run("suite_test.addTest(TestCase('test1'))") cProfile.run("suite_test.addTest(TestCase('test2'))")
运行结果:

其中:
ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;
浙公网安备 33010602011771号