项目 内容
课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST
这个作业要求链接 https://www.cnblogs.com/nwnu-daizh/p/14552393.html
我的课程学习目标 1.掌握软件项目个人开发流程
2.掌握Github发布软件项目的操作方法
这个作业在哪些方面帮助我实现学习目标 1.通过阅读《构建之法》中PSP的相关内容,结合本次个人项目设计,掌握了软件项目个人开发流程
2.通过将本次个人项目提交到Github仓库,掌握了Github发布软件项目的操作方法
项目Github的仓库链接地址 https://github.com/Yangrui-coco/hello-world

任务1:阅读教师博客“常用源代码管理工具与开发工具”内容要求,点评班级博客中已提交相关至少3份作业。

下面是三位同学的博客链接:

https://www.cnblogs.com/123456789wq/p/14545426.html

https://www.cnblogs.com/YQY128/p/14522586.html

https://www.cnblogs.com/lomzn/p/14522775.html

任务2:详细阅读《构建之法》第1章、第2章,掌握PSP流程。

已阅读,在下面的任务3中,有关于本次个人项目的PSP。

任务3:查阅相关资料,设计一个采用动态规划算法、回溯算法求解D{0-1}背包问题的程序。

项目开发背景:

背包问题(Knapsack Problem,KP)是NP Complete问题,也是一个经典的组合优化问题,有着广泛而重要的应用背景。{0-1}背包问题({0-1 }Knapsack Problem,{0-1}KP)是最基本的KP问题形式,它的一般描述为:从若干具有价值系数与重量系数的物品(或项)中,选择若干个装入一个具有载重限制的背包,如何选择才能使装入物品的重量系数之和在不超过背包载重前提下价值系数之和达到最大?

D{0-1} KP 是经典{ 0-1}背包问题的一个拓展形式,用以对实际商业活动中折扣销售、捆绑销售等现象进行最优化求解,达到获利最大化。D{0-1}KP数据集由一组项集组成,每个项集有3项物品可供背包装入选择,其中第三项价值是前两项之和,第三项的重量小于其他两项之和,算法求解过程中,如果选择了某个项集,则需要确定选择项集的哪个物品,每个项集的三个项中至多有一个可以被选择装入背包,D{0-1} KP问题要求计算在不超过背包载重量 的条件下,从给定的一组项集中选择满足要求装入背包的项,使得装入背包所有项的价值系数之和达到最大;D{0-1}KP instances数据集是研究D{0-1}背包问题时,用于评测和观察设计算法性能的标准数据集;动态规划算法、回溯算法是求解D{0-1}背包问题的经典算法。

查阅相关资料,设计一个采用动态规划算法、回溯算法求解D{0-1}背包问题的程序。

需求分析
  1. D{0-1} KP数据存储在txt文件中,需要将txt文件中的有效数据提取出来并且存储;
  2. 对数据进行可视化操作,绘制以重量为横轴、价值为纵轴的散点图;
  3. 对一组数据按照每个项集中的第三项的价值/重量比进行非递增排序;
  4. 设计动态规划算法和回溯法求解指定D{0-1} KP数据的最优解,并且输出求解时间,设置选项,用户可以自主选择用哪一种算法求解。在求解最优解时需要注意,每个项集的三项物品中至多只有一个可以被装入背包;
  5. D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
功能分析
  1. 正确读入实验数据文件的有效D{0-1}KP数据;
  2. 能够绘制任意一组D{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图;
  3. 能够对一组D{0-1}KP数据按项集第三项的价值:重量比进行非递增排序;
  4. 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位);
  5. 任意一组D{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件。
代码片段
// 按项集第三项的价值/重量比进行非递增排序
void Bubble_sort(int len)
{
int tmp1 = 0,tmp2 = 0,tmp3 = 0,tmp4 = 0,tmp5 = 0,tmp6 = 0;
bool swap = false;//加判断条件,减少比较次数
for(int i=0;i<len-1;i++)
{
for(int j=0;j<len-1-i;j++)
{
if((j+1)%3 == 0 && ((idkp0[0][j]/idkp0[1][j]) < (idkp0[0][j+3]/idkp0[1][j+3])))
{
tmp1 = idkp0[0][j];
idkp0[0][j] = idkp0[0][j+3];
idkp0[0][j+3] = tmp1;//交换 tmp2 = idkp0[0][j-1];
idkp0[0][j-1] = idkp0[0][j+2];
idkp0[0][j+2] = tmp2;//交换 tmp3 = idkp0[0][j-2];
idkp0[0][j-2] = idkp0[0][j+1];
idkp0[0][j+1] = tmp3;//交换 tmp4 = idkp0[1][j];
idkp0[1][j] = idkp0[1][j+3];
idkp0[1][j+3] = tmp4;//交换 tmp5 = idkp0[1][j-1];
idkp0[1][j-1] = idkp0[1][j+2];
idkp0[1][j+2] = tmp5;//交换 tmp6 = idkp0[1][j-2];
idkp0[1][j-2] = idkp0[1][j+1];
idkp0[1][j+1] = tmp6;//交换 swap = true;
}
}
if (!swap)
{
return;
}
}
}
测试运行
  • 读取一组数据并对数据按项集第三项的价值:重量比进行非递增排序:

  • 对这组数据以重量为横轴、价值为纵轴的绘制数据散点图:

总结
  • 模块化编程就是把一整个项目分成很多模块(比如一个学生成绩查询可以分为,登陆,查询,修改保存,退出等模块),而一个程序工程包含多个源文件( .c 文件和 .h 文件),每个 .c 文件可以被称为一个模块,每一个模块都有其各自的功能,而每一个.h 文件则是声明该模块,相当于功能说明书。
  • 模块化的核心是各个模块独立封装,多个 .c 和 .h 使得整个工程变得易于阅读,逻辑清晰。
  • 当一个项目比较大时,采用模块化编程可以使得整个项目分工明确,条理清晰,易于阅读,便于移植。
PSP

PSP参考:http://www.cnblogs.com/xinz/archive/2011/10/22/2220872.html

PSP2.1 任务内容 计划共完成需要的时间(min) 实际完成需要的时间(min)
Planning 计划 30 30
Estimate 估计这个任务需要多少时间,并规划大致工作步骤 30 30
Development 开发 940 1205
Analysis 需求分析 (包括学习新技术) 120 140
Design Spec 生成设计文档 30 30
Design Review 设计复审 (和同事审核设计文档) 20 20
Coding Standard 代码规范 (为目前的开发制定合适的规范) 30 35
Design 具体设计 60 50
Coding 具体编码 600 750
Code Review 代码复审 20 30
Test 测试(自我测试,修改代码,提交修改) 60 150
Reporting 报告 130 100
Test Report 测试报告 60 40
Size Measurement 计算工作量 40 30
Postmortem & Process Improvement Plan 事后总结 ,并提出过程改进计划 30 30

在整个的项目开发流程中,具体编码环节耗时最多,具体编码以及测试的这部分估计时间与实际消耗时间出入是比较大的,具体编码消耗时间很多的原因是没有做好前期的准备工作,导致在程序编写过程中耗费了一定的时间去学习要用到许多新知识;测试消耗许多时间的原因是测试时出现Bug需要许多时间去调试、修改。

任务4:完成任务3的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。

已提交至Github的项目仓库中。


本次作业的感想体会:

本次作业还是有难度的,涉及到有效数据提取、可视化操作、回溯算法、动态规划算法等一系列的知识,在具体做的时候需要不断地对不会的知识查缺补漏,最开始看到大量的数据还有一大段的题目感觉无从下手,最后慢慢地才稍微理清了思路,对于要求的功能并没有全部实现。

个人知识的掌握与积累上尚且路途遥远。

201871030138-杨蕊媛 实验二 个人项目—《D{0-1}背包问题》项目报告的更多相关文章

  1. 201871030138-杨蕊媛 实验三 结对项目—《D{0-1}KP 实例数据集算法实验平台》项目报告

    项目 内容 班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh ...

  2. 20155219&20155224 《信息安全系统设计基础》实验二 固件程序设计

    实验二 固件程序设计-1-MDK 0. 注意不经老师允许不准烧写自己修改的代码 1. 两人(个别三人)一组 2. 参考云班课资源中"信息安全系统实验箱指导书.pdf "第一章,1. ...

  3. 201671010449 杨天超 实验十四 团队项目评审&课程学习总结

    项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 作业链接地址 作业学习目标 1.掌握软件评审流程及内容 2.个人总结 实验一问题解答 实验一问题链接:https://ww ...

  4. 201871030108-冯永萍 实验二 个人项目— D{0-1}背包问题项目报告

    项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 https://www.cnblogs.com/nwnu-dai ...

  5. 201871030125-王芬 实验二 个人项目-《D{0-1}问题》软件项目报告

    实验二 个人项目-<D{0-1}问题>软件项目报告 项目 内容 课程班级博客链接 https://edu.cnblogs.com/campus/xbsf/2018CST 这个作业要求链接 ...

  6. 201871030127-王明强 实验二 个人项目—《D{0-1}背包问题 》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 (1)详细阅读<构建之法>学习并掌握PSP的具体流程(2)掌握背包问题,通过查阅相关资料,设计一个采用 ...

  7. 201871030131-谢林江 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.学习编写PSP2.完成个人项目实验要求3.在Github建仓 这个作业在哪些方面帮助我实现学习目标 1.首次编 ...

  8. 201871030126-王会娟 实验二 个人项目—《D{0-1} KP》项目报告

    项目 内容 课程班级博客链接 https://home.cnblogs.com/u/wanghuijuan815 这个作业要求链接 https://www.cnblogs.com/nwnu-daizh ...

  9. 201871030106-陈鑫莲 实验二 个人项目-《D{0-1} KP 问题》项目报告

    项目 内容 课程班级博客链接 班级博客 这个作业要求链接 作业要求 我的课程学习目标 1.掌握软件项目个人开发流程2.掌握Github发布软件项目的操作方法 这个作业在哪些方面帮助我实现学习目标 1. ...

随机推荐

  1. 记weblogic上传shell路径

    0x01 前言 自从上次在渗透过程中发现了波weblogic CVE-2020-2551漏洞后面又对其进行了复现,后边看到exp里有个上传webshell的功能,但是由于不清楚weblogic这个路径 ...

  2. 多指灵巧手MoveIt!与Gazebo联合仿真框架搭建

    至于为什么叫框架,一是因为灵巧手的3维模型没有按照基本的设计要求画,正常来说,设计机器人机构之前应该设计好机构需要多少个自由度/DOF,每个自由度是旋转/revolute类型还是滑移/prismati ...

  3. 【JDK8】Java8 新增BASE64加解密API

    什么是Base64编码? Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,Base64就是一种基于64个可打印字符来表示二进制数据的方法 基于64个字符A-Z,a-z,0-9,+,/ ...

  4. hdu2100 26进制加法

    题意:       给你两个26进制数,让你算出他们两个的和. 思路:      水题不解释了,注意这样的数据 AAA AAA 输出A #include<stdio.h> #include ...

  5. 010 Editor体验

    源代码的我们现在拥有各式各样的IDE和编辑器可以去查看,但二进制文件对于大多数软件只能做到显示16进制,而不能按照文件类型的格式去显示.今天我们就用dex文件让010 show. 安装软件: http ...

  6. 神经网络与机器学习 笔记—卷积神经网络(CNN)

    卷积神经网络 之前的一些都是考虑多层感知器算法设计相关的问题,这次是说一个多层感知器结构布局相关的问题.来总结卷积神经网络.对于模式分类非常合适.网络的提出所隐含的思想收到了神经生物学的启发. 第一个 ...

  7. Jenkins 基础篇 - 环境准备

    前期准备 为了开发这套课程,我专门购买了一台二手戴尔服务器 Dell R720,同时把废弃多年的笔记本电脑也利用了起来.当然如果自己没有多余的电脑,也可以在自己电脑上安装 Vmware Worksta ...

  8. MySQL DDL详情揭露

    前言: MySQL中DDL语句,即数据定义语言,用于创建.删除.修改.库或表结构,对数据库或表的结构操作.常见的有create,alter,drop等.这类语句通常会耗费很大代价,特别是对于大表做表结 ...

  9. @Aspect 注解使用详解

    AOP为Aspect Oriented Programming的缩写,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点, ...

  10. [Java] HOW2J(Java中级)

    异常 定义:导致程序正常流程被中断的事件 异常处理常见手段 try catch:将可能抛出异常的代码放在try的块中,一旦出现异常就跳转到catch的块中处理 throws/throw:不在本模块处理 ...