homework-02
对于第2次作业,由于能力有限,现在只部分完成了第(1)和第(2)部分,其他还在努力中......
我写的这个程序,
是对一个叫input.txt的文件中的数组,求最大子矩阵的实现。文件中的内容如下:
数组的行数,
数组的列数,
每一行的元素, (用逗号分开)。
一,结构设计
我在实现的时候分情况讨论:1,当行数是1时,调用一位数组的解法(求数组最大子数组和);
该算法的时间复杂度为:O(N);
当行数大于2时,我采用的是穷举遍历的方法,求出每一个字矩阵的和再进行比较。求最大和;
该算法利用四层for循环来穷举子数组的边界值,时间复杂度为(M^2 * N^2),这是我迄今能想到的算法,但是显然该算法不是最优算法,有待改进
二,测试实例
测试用例如下:(注意修改程序中要打开的实例文件名)
1)当行数是一时: 1
9
-3,-4,6,4,-23,43,1,21,3
输出为:一维数组最长子数组和为:sum=68; 一维数组最长子数组为:43 1 21 3 子数组在原数组中的位置为:6-9
2)当行数大于一时: 3
6
5,6,-3,8,-9,2
1,-12,20,0,-3,-5
-9,-7,-3,6,7,-1
输出为: 二维数组和最大子矩阵的和为:28 子矩阵对应的两个顶点为:x1=0 y1=2 x2=2 y2=3
三,对于二维矩阵算法的改进:
如下只是一个想法,还有待实现:
假设已经确定了矩阵区域的上下边界,不如知道矩阵区域的上下边界分布是第i行和第j行,接下来要确定左右边界。
我们把第i行和第j行之间的每一列看成一个整体,相当于一维数组中的一个元素(通过子矩阵部分和可以在O(1)时间内计算出整体之和)。
四,矩阵联通子集最大和问题的求解猜想:
为矩阵建立一个加权连通图,权值为矩阵中各项的值,选取其中最大的一边的一个顶点开始求最大联通路径(maxsum),一直到与最小编相连的一个点。
最后返回maxsum。
五,总结
实际花费时间 原来估计时间
计划 3h 1h
具体设计 5h 3h
具体编码 24h 10h
测试 5h 1h
提交和blog 3h 1h
事后总结 2h 1h
总计 42h 17h
六,总结
本次作业对我来说比较困难,知道deadline我都没写完,实在汗颜,但是我会继续完善和优化自己的程序的
同时我也会多向其他人学习,促进自己的进步,看来自己还是有很大的不足,作业质量实在不是很好,请老师见谅!