homework-02
1.程序的命令行参数及文件问题
第二次作业中要求程序支持命令行参数及文件,因此我在程序中加入了对这一部分功能的支持,并且加入一些错误处理。之后便是使用第一次作业的算法来求出最大一维子数组和即可。
若程序无参数直接运行:
若输入的文件不存在:
输入了正确的文件名:
2.二维最大子数组问题
关于二维最大子数组问题,一开始只能想到朴素的暴力搜索,但是这样的算法时间复杂度过高,因此决定找一些优化的算法。
先使用一个三维数组b[i][j][k]来记录二维数组a[i][j]第k列第i行到第j行的和,这样便可以将二维数组问题简化为求一位数组b[i][j][0],b[i][j][1],...,b[i][j][k]的最大子数组和,再使用作业1的算法进行计算即可。该方法时间复杂度为O(n3),空间复杂度为O(n3)。
3.水平、垂直联通问题
对于二维最大子数组水平联通问题,在从文件中读入二维数组时可以在矩阵右面补一个相同的矩阵,之后对这个合并后的矩阵使用上述算法即可求出最大子数组和。需要注意子数组的列宽不能超过原矩阵的列宽大小。
同理,对于二维最大子数组垂直联通的问题,可以在矩阵下面补一个相同的矩阵来进行计算,且最大子数组的行数不能超过原矩阵的行数。
另外,命令行参数的处理也要注意。
Personal Software Process Stages |
时间百分比(%) |
实际花费的时间 (分钟) |
原来估计的时间 (分钟) |
|
Planning |
计划 |
|||
· Estimate |
· 估计这个任务需要多少时间,把工作细化并大致排序 |
10% | 30 | 30 |
Development |
开发 |
|||
· Analysis |
· 需求分析 (包括学习新技术) |
10% | 30 | 40 |
· Design Spec |
· 生成设计文档 |
3.3% | 10 | 10 |
· Design Review |
· 设计复审 (和同事审核设计文档) |
3.3% | 10 | 10 |
· Coding Standard |
· 代码规范 (制定合适的规范) |
3.3% | 10 | 5 |
· Design |
· 具体设计 |
6.6% | 20 | 30 |
· Coding |
· 具体编码 |
30% | 90 | 100 |
· Code Review |
· 代码复审 |
6.6% | 20 | 20 |
· Test |
· 测试(自我测试,修改代码,提交修改) |
10% | 30 | 40 |
Reporting |
总结报告 |
|||
|
6.6% |
20 |
20 | |
|
10% | 30 | 20 | |
Total | 总计 | 100% | 总用时 300 | 总估计的用时 325 |