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我都没写完,实在汗颜,但是我会继续完善和优化自己的程序的

同时我也会多向其他人学习,促进自己的进步,看来自己还是有很大的不足,作业质量实在不是很好,请老师见谅!

 

 

 

posted @ 2013-10-01 03:07  颜全弘  阅读(291)  评论(1编辑  收藏  举报