咱们上节课讲了 返回整数数组中最大子数组的和 这个问题。 咱们第二次做业在这个基础上扩展。html
程序要使用的数组放在一个叫 input.txt 的文件中, 文件格式是:算法
数组的行数,设计模式
数组的列数,数组
每一行的元素, (用逗号分开)架构
每个数字都是有符号32位整数, 见 MSDN 的定义. 固然, 行数和列数都是正整数。工具
例以下面的文件说明数组是有1行, 6列, 元素依次是: 5, 6, –3, 8, –9, 2单元测试
用你选择的语言 (C, C#, C++, Java) 在Windows 系统下实现下面的功能, 并做单元测试和统计测试覆盖率。 建议用VS2017 / 2019, 若是你有其它的工具能够达到一样的效果, 欢迎使用。学习
1) 绝大部分同窗都已经作出来了单维数组的 求数组中最大子数组的和, 可是你不妨试一试:测试
把你的程序编译为可执行文件, 而后执行 例如 maxsum.exe <file name>ui
输出就是最大子数组的和, 上面的例子就应该输出 16.
若是输入的数组很大, 而且有不少大的数字, 就会产生比较大的结果 (考虑一下数的溢出), 请保证你的程序能正常输出。
另外, 若是输入文件的参数有错误, 这个程序应该能正常退出, 并显示相应的错误信息。 任何输入错误都不能致使你的程序崩溃 (对的, TA 会模拟一些有错误的文件来检查)。
2) 若是上面的问题解决了, 那咱们就顺利地进入第二个阶段 - 处理二维数组. 在这个阶段, 咱们要求二维数组的子数组必须是矩形的
maxsum.exe <file name>
会返回 28
这是一个比较大的数组的例子:
3) 若是 “子数组” 并不要求是一个矩形, 而是联通的元素便可 (上下或左右相邻即视为联通), 那解法会是怎么样呢?
上面文件的正解就是:
请实现这一算法, 命令行要加一个参数, 表示这一特殊要求:
maxsum.exe /a <file name>
输出是: 50
注: 考虑到同窗们的反馈, 在这一问中, 能够假设数组的长度和宽度不大于 32. 同时,在和同窗们的讨论中,咱们列举了几种较有意思的形状,见下。
(图3-2,两个大正数 (50)经过它们之间的最小权值路径相连)
(图 3-4,和是135,是三个大正数经过公共的最小权值联通路径相连)
(图3-5,和图3-4 同样,可是此图的解法是经过两两大正数之间的最小连通图获得。它们的和是 134,不是最佳)
4) 在步骤 2) 的基础上, 咱们还能够作另外一个扩展, 假设数组的一头一尾在水平方向上是首尾相连的。 咱们用 /h 表示它在水平方向上相连。 若是在垂直方向上相连能够么? 固然能够, 咱们用 /v 表示它在垂直方向相连。 这样, 咱们有:
maxsum.exe /h <file name>
maxsum.exe /v <file name>
5) 那么, 能够同时 /h /v 么? 我想是能够的。 这个矩阵会成一个什么样呢? 是球形, 仍是…?
啊, 是个轮胎, 可能仍是备胎!
maxsum.exe /v /h <file name>
会输出什么呢?
固然, 咱们还有: maxsum.exe /v /h /a <file name>
6) 哇, 还有第六步? 仿佛听到同窗们叫苦不迭… 那就算了, 之后再说
要求仍是老一套:
a) 代码都签入你的 GitHub, TA 用你的代码编译并运行他们的测试用例, 来验证你的程序的正确性。
b) 博客
描述在这么多类似的需求面前, 你怎么维护你的设计 (父类/子类/基类, UML, 设计模式, 或者其它方法) 让整个程序的架构不至于崩溃的?
给出你作单元测试/代码覆盖率的最终覆盖率的报告, 用截屏显示你的代码覆盖率
阅读 工程师的能力评估和发展 和相关文章, 在完成做业的时候记录本身花费的时间, 并填下表。若是你对有些术语不太清楚,请查看教材和其它资料。若是你认为你不须要作某个步骤, 那就跳过去。
你在这个做业中学到了什么? 有什么好的设计值得分享? 感想如何 (太容易 / 太难 / 太无趣)?
Personal Software Process Stages |
估计的时间(分钟) |
实际花费的时间 (分钟) |
|
Planning |
计划-把工做细化并大体安排次序 |
||
Development |
开发 |
||
· Analysis |
· 需求分析 (包括学习新技术) |
||
· Design Spec |
· 生成设计文档 |
||
· Design Review |
· 设计复审 (和同事审核设计文档) |
||
· Coding Standard |
· 代码规范 (制定合适的规范) |
||
· Design |
· 具体设计 |
||
· Coding |
· 具体编码 |
||
· Code Review |
· 代码复审 |
||
· Test |
· 测试(自我测试,修改代码,提交修改) |
||
Reporting |
总结报告 |
||
· Test Report |
· 测试报告 |
|
|
· Size Measurement |
· 计算工做量 |
||
· Postmortem & Improvement Plan |
· 过后总结, 并提出改进 |
||
Total | 总计 |