【现代程序设计】【homework-02】【11061027】
Q:描述在这么多相似的需求面前, 你怎么维护你的设计 (父类/子类/基类, UML, 设计模式, 或者其它方法) 让整个程序的架构不至于崩溃的?
A:由于使用的是面向过程的C语言,所以维护设计这个问题,更多的是通过调试
Q:给出你做单元测试/代码覆盖率的最终覆盖率的报告, 用截屏显示你的代码覆盖率
A:......我用的GCC工具似乎不具有代码覆盖率检查的功能。。。。
Q:阅读 工程师的能力评估和发展 和相关文章, 在完成作业的时候记录自己花费的时间, 并填下表。如果你对有些术语不太清楚,请查看教材和其它资料。如果你认为你不需要做某个步骤, 那就跳过去。
|
Personal Software Process Stages |
时间百分比(%) |
实际花费的时间 (分钟) |
原来估计的时间 (分钟) |
|
|
计划 |
||||
|
· 估计这个任务需要多少时间,把工作细化并大致排序 |
0 | 0 | 0 | |
|
开发 |
||||
|
· 需求分析 (包括学习新技术) |
5 | 30min | 0 | |
|
· 生成设计文档 |
0 | 0 | 0 | |
|
· 设计复审 (和同事审核设计文档) |
0 | 0 | 0 | |
|
· 代码规范 (制定合适的规范) |
0 | 0 | 0 | |
|
· 具体设计 |
55 | 10h | 4h | |
|
· 具体编码 |
20 | 4h | 4h | |
|
· 代码复审 |
5 | 1h | 30min | |
|
· 测试(自我测试,修改代码,提交修改) |
15 | 3h | 1h | |
|
总结报告 |
||||
| Total | 总计 | 100% | 总用时 | 总估计的用时 |
Q:你在这个作业中学到了什么? 有什么好的设计值得分享? 感想如何 (太容易 / 太难 / 太无趣)?
A:学到了关于命令行的使用,感想就是:太难!
1. 开始之前
在一维的求解中,我们已经知:
假设f[i]表示:1..i这个序列中,包含i这个元素的最大连续序列之和
显然 f[1]=a[1];
f[i]=f[i-1]+a[i]; f[i-1]>0
f[i]=a[i]; f[i-1]<=0
max(f[i])即为最后的结果
2. 二维数组的最大子矩阵
这里假设输入的矩阵为P,行和列值分别约定为m,n
对于2维数组,我们虽然无法直接使用1维中的思路
但是,如果我们可以把一整行看做一个元素
按照1维的思路,我们就可以得到一个最大的n*x的矩阵A,0<x<m
显然A不一定是最后的答案,因为矩阵A的列值y被我们限定为了n
所以我们需要枚举y,即y←1..n
之后要做的就很简单了
枚举行值等于m,列值为y,的所有矩阵D,并找出D中的最大子矩阵E
对于所有的E,max(E)就是最后的答案
时间复杂度=T[求1维最大子数组]*T[枚举矩阵]*T[计算矩阵每一行的值]
前者已知为O(n)
枚举矩阵则需要一个二重的循环,即为O(n^2)
对于计算矩阵D中没一行的值
我们可以进行预处理
假设D在P中的位置为:第x列→第y列
如果我们用一个数组g[i][j]表示:第i行的1..j列的元素之和为g[i][j];
则对于D中的每一行的和应该为g[i][y]-g[i][x],(0<i<=m)
每次计算的复杂度为O(1)
所以总的时间复杂度为:O(N^3)
空间复杂度:
主要用于存储P,D,E
为:O(n^2
3. 二维数组的最大子矩阵(连通)
联通问题,和不连通的区别只是:边界的连续性问题
因此我们只需增加三个同样的矩阵P1,P2,P3
排列为:
P(原矩阵) P2(如果水平联通)
P1(如果垂直联通) P3(如果同时联通)
按照第二步的思路,同时保证所枚举的矩阵D
行值小于m,列值小于 n
即可求出起解
时间复杂度和空间复杂度同二
时间复杂度为: O(N^3)
空间复杂度: O(n^2)
4. 二维数组的最大连通图形
对于此问题,我暂时想不到更好的解决办法
只能通过递归生成所有联通图形,求解最大值
时间效率相当之低:
O(2^(m*n))
#include <stdio.h>
#include <string.h>
#define M 100
#define max(a,b) (a)>(b)?(a):(b)
#define sinput "input.txt" FILE *file;
int a[M][M],i,j,m,n,s;
int color[M][M];
int dx[]={-,,,},dy[]={,-,,}; void F()
{
int g[M][M],f[M][M],i,j,s,x,k;
for(i=;i<m;i++)
for(j=;j<n;j++) f[i][j]=g[i][j]=; s=a[][]; for(i=;i<m;i++){
g[i][]=a[i][];
for(j=;j<n;j++) g[i][j]=g[i][j-]+a[i][j];
} for(i=;i<m;i++)
for(j=;j<n;j++)
for(k=j;k<n;k++){
x=g[i][k]-g[i][j]+a[i][j];
if(f[j][k]>) f[j][k]+=x;
else f[j][k]=x;
if(f[j][k]>s) s=f[j][k];
}
printf("%d",s);
} void Fvh(int v,int h)
{
int g[M][M],f[M][M],l[M][M],i,j,s,aa[M][M],nn,mm,nx,x,k,; nn=n;
mm=m; if(h) nn=*n;
if(v) mm=*m; for(i=;i<mm;i++)
for(j=;j<nn;j++){
aa[i][j]=a[i%m][j%n];
l[j][k]=f[i][j]=g[i][j]=;
} s=a[][]; for(i=;i<mm;i++){
g[i][]=aa[i][];
for(j=;j<nn;j++) g[i][j]=g[i][j-]+aa[i][j];
} for(i=;i<mm;i++)
for(j=;j<nn;j++)
for(k=j,nx=;k<nn;k++,nx++){ if(nx>=n) break; x=g[i][k]-g[i][j]+aa[i][j]; if(f[j][k]>&&l[j][k]<m){
f[j][k]+=x;
l[j][k]++;
}
else{
f[j][k]=x;
l[j][k]=;
} if(f[j][k]>s) s=f[j][k]; }
printf("%d",s); } int IsInvh(int x,int y)
{
if(x>=&&x<m&&y>=&&y<n) return ;
return ;
} void fany(int x,int y,int z)
{
int tx,ty,i; if(s<z) s=z;
for(i=;i<;i++){
tx=x+dx[i];
ty=y+dy[i];
if(IsInvh(tx,ty)&&!color[tx][ty]){
color[tx][ty]=;
fany(tx,ty,z+a[tx][ty]);
color[tx][ty]=;
}
}
} main(int N,char **CMD)
{
int h,v,u;
u=h=v=;
file=fopen(sinput,"r");
fscanf(file,"%d, %d, ",&m,&n);
for(i=;i<m;i++)
for(j=;j<n;j++) fscanf(file,"%d, ",a[i]+j); fclose(file);
for(i=;i<N;i++){
if(!strcmp(CMD[i],"/h")) h=;
if(!strcmp(CMD[i],"/v")) v=;
if(!strcmp(CMD[i],"/a")) u=;
} if(!(h+v)&&!u){
F();
return ;
}
if(!u){
Fvh(v,h);
return ;
} for(i=;i<m;i++)
for(j=;j<n;j++){
color[i][j]=;
fany(i,j,a[i][j]);
color[i][j]=;
}
printf("%d",s); }
【现代程序设计】【homework-02】【11061027】的更多相关文章
- 标准C程序设计七---02
Linux应用 编程深入 语言编程 标准C程序设计七---经典C11程序设计 以下内容为阅读: <标准C程序设计>(第7版) 作者 ...
- 现代程序设计homework——04
题目: 详见:http://www.cnblogs.com/xinz/p/3341551.html 题目本身确实很难,“很难想到一个比较优雅的算法”,这是一个老师请来专门讲解这道题的大牛的原话.确实, ...
- vs2015c++/MFC入门知识全集/实例规范书籍视频下载孙鑫c++对话框计算器基础控件使用教程系列
VIP教程可免费看.可免费下载前部分试看教程地址:http://dwz.cn/4PcfPk免费下载地址:http://dwz.cn/mfc888 本课程目录 67章 [MFC项目开发第01天]Wind ...
- 软工+C(9): 助教指南,持续更新...
上一篇:提问与回复 下一篇:从命令行开始逐步培养编程能力(Java) 目录: ** 0x00 Handshake ** 0x01 点评 ** 0x02 评分 ** 0x03 知识储备 ** 0x04 ...
- python奇闻杂技
第一天 01 从计算机到程序设计语言 02 python环境配置 03 实例一:温度转换 04 python语法分析 第二天 01 深入理解python语言 02 实例二,python蟒蛇配置 03 ...
- 2012年游戏软件开发独立本科段01B0815自考科目
01B0815自考科目 课程代码[学分] 课程名称 03708[02] 中国近现代史纲要 03709[04] 马克主义基本原理概论 03684[10] 综合英语(四) 01042[05] 应用数学 0 ...
- 20145219 《Java程序设计》第02周学习总结
20145219 <Java程序设计>第02周学习总结 教材学习内容总结 类型:基本类型.类类型(参考类型) 基本类型: 整数:short占2字节,int占4字节,long占8字节 字节: ...
- js程序设计02——变量、作用域问题
首先,ECMAScript中的数据类型分为基本类型.引用类型,基本类型的访问操作是按值的.引用类型的值是保存在内存中的对象,操作对象时,实际上操作的是对象的引用,而非对象自身.“javascript高 ...
- 20145218 《Java程序设计》第02次实验报告
北京电子科技学院(BESTI)实验报告 课程:Java程序设计 班级:1452 指导教师:娄嘉鹏 实验日期:2016.04.12 实验名称:Java面向对象程序设计 一.实验内容 初步掌握单元测试和T ...
- 读书笔记(02) - 可维护性 - JavaScript高级程序设计
编写可维护性代码 可维护的代码遵循原则: 可理解性 (方便他人理解) 直观性 (一眼明了) 可适应性 (数据变化无需重写方法) 可扩展性 (应对未来需求扩展,要求较高) 可调试性 (错误处理方便定位) ...
随机推荐
- cocos2d-x3.9 默认是 gnustl_static 配置,但是 这个库缺少c++的基础功能... c++_static 功能全面些
最近的升级Cocos2d-x 3.2正式版.iOS不管是什么程序编译问题,使用结果cocos compile -p android编译APK计划.结果悲剧,出现以下错误. Android NDK: I ...
- 214. Shortest Palindrome
题目: Given a string S, you are allowed to convert it to a palindrome by adding characters in front of ...
- NFC(10)NDEF uri格式规范及读写示例(解析与封装ndef uri)
只有遵守NDEF uri 格式规范的数据才能写到nfc标签上. NDEF uri 格式规范 uri 只有两部分: 第1个字节是uri协议映射值,如:0x01 表示uri以 http://www.开头. ...
- linux 入门教程
linux入门教程 搜索 Linux入门教程 前言 第一章 关于Linux的历史 第二章 图形界面还是命令窗口 第三章 Linux操作系统的安装 第四章 初步进入linux世界 第五章 Linux系统 ...
- LinkedBlockingQueue
LinkedBlockingQueue是一个基于已链接节点的.范围任意的blocking queue的实现. 此队列按 FIFO(先进先出)排序元素.队列的头部 是在队列中时间最长的元素.队列的 ...
- OWIN katana注册中间件的几种写法
首先特别说明下在startup中注册完中间件的两个注意事项,看到有人写的东西有误导人的作用.关于startup启动发现类的内容,参照这里 http://www.asp.net/aspnet/overv ...
- Linux_2.6字符设备驱动实例
第一步:my74hc595.c #include <linux/module.h> //模块所需的大量符号和函数定义#include <linux/init.h> //指定初始 ...
- 【转】Cocos2d-x 弹出对话框的设计与实现
转自:http://www.tairan.com/archives/4854 我们时常需要这么些功能,弹出一个层,给与用户一些提示,这也是一种模态窗口,在没有对当前对话框进行确认的时候,不能继续往下操 ...
- TortoiseGit日常使用指南
本文在介绍了软件安装和设置后, 写了TortoiseGit 常用的一些功能, 包括:创建新库添加文件及文件夹创建分支看分支情况及修改log比较版本差异合并分支其他操作: Stash; 忽略文件本文不包 ...
- Ext入门学习系列(三)复杂自定义窗体
通过前2节的学习,基本掌握了Ext的语法和运行原理,可以作出一些简单的应用.本节我们一起来完成复杂点的对话框操作,因为在实际项目中经常要用到确认对话框等多种操作,然后根据客户的选择作出不同的响应. 一 ...