201971010246-王孜睿 实验二 个人项目—《{0-1}背包问题》项目报告
项目 | 内容 |
---|---|
班级博客链接 | 课程班级 |
这个作业的要求链接 | 作业要求 |
我的课程学习目标 | 1.使用Github进行项目托管。 2.掌握Github发布软件项目的操作方法。 3.掌握个人软件项目的开发步骤。 |
这个作业在哪些方面帮助我实现学习目标 | 深入学习0/1背包问题的算法,掌握PSP流程 |
项目Github的仓库链接地址 | 仓库地址 |
任务一
作业点评链接:
任务二
阅读《构建之法》掌握PSP流程
-
通过第一章了解了什么是软件工程,了解到了软件的特殊性,如复杂性、不可见性、易变性、服从性、非连续性。也了解到了软件工程是把系统的、有序的、可量化的方法应 用到软件的开发、运营和维护上的过程。
而在阅读了第二章之后学习到了单元测试、回归测试、效能分析、个人软件开发流程(PSP)的一些基本概念和技术。本次任务需主要学习PSP。 -
PSP是一种可用于控制、管理和改进个人工作方式的自我持续改进过程,是一个包括软件开发表格、指南和规程的结构化框架。PSP与具体的技术相对独立,其原则能够应用到几乎任何的软件工程任务之中。PSP能够说明个体软件过程的原则; 帮助软件工程师作出准确的计划;确定软件工程师为改善产品质量要采取的步骤;建立度量个体软件过程改善的基准;确定过程的改变对软件工程师能力的影响。
PSP展示
PSP2.1 | 任务内容 | 计划共完成需要的时间(min) | 实际完成需要的时间(min) |
---|---|---|---|
Planning | 计划 | 10 | 8 |
Estimate | 估计这个任务需要多少时间,并规划大致工作步骤 | 10 | 8 |
Development | 开发 | 650 | 826 |
Analysis | 需求分析 (包括学习新技术) | 30 | 55 |
Design Spec | 生成设计文档 | 10 | 10 |
Design Review | 设计复审 (和同事审核设计文档) | 5 | 5 |
Coding Standard | 代码规范 (为目前的开发制定合适的规范) | 5 | 6 |
Design | 具体设计 | 50 | 50 |
Coding | 具体编码 | 300 | 350 |
Code Review | 代码复审 | 100 | 100 |
Test | 测试(自我测试,修改代码,提交修改) | 100 | 150 |
Reporting | 报告 | 50 | 50 |
Test Report | 测试报告 | 10 | 10 |
Size Measurement | 计算工作量 | 10 | 10 |
Postmortem & Process Improvement Plan | 事后总结 ,并提出过程改进计划 | 30 | 30 |
任务三
需求分析
- 本次任务内容为解决{0-1}背包问题。按照题目要求,由于第三项价值为前两项总和且重量小于其他两项之和,且要保证装入背包的价值最大,就需要计算出每三个项集中性价比最高的,在不超过背包容量的情况下装入。
功能设计
- 基本功能需要可正确读入实验数据文件
- 需要能以画出任意一组{0-1}KP数据以重量为横轴、价值为纵轴的数据散点图
- 能够对一组{0-1}KP数据按项集第三项的价值:重量比进行非递增排序
- 用户能够自主选择动态规划算法、回溯算法求解指定D{0-1} KP数据的最优解和求解时间(以秒为单位)
- 任意一组{0-1} KP数据的最优解、求解时间和解向量可保存为txt文件或导出EXCEL文件
设计实现
-
使用python的matplotlib库实现绘图
-
使用getline进行数据的读取
-
使用数组进行数据的相关处理
-
使用sorted函数进行数据排序
-
使用文件处理相关函数、方法进行数据输出
部分代码
- 读取文件
data=open("D:\data.txt",'w+')
print("文件如下")
print("KPdata.txt")
tex="KPdata.txt"
n=int(input("输入组号:"))
m=n*8
s=n*8+2
t=n*8-2
profit=linecache.getline(tex,m)
list1 = profit.split(',')
weight=linecache.getline(tex,s)
list2 = weight.split(',')
list1.pop()
list2.pop()
- 散点图与降序排列
weight=list4
profit=list3
plt.figure(figsize=(10, 10), dpi=100)
plt.scatter(weight,profit)
plt.show()
for (a,b) in zip(list3,list4):
num=a/b
lit.append(num)
lit= [round(i,3) for i in lit]
#print(lit)
lit1=sorted(lit,reverse=True)
print("降序",lit1)
print("\n",numb)
实验总结
任务一中,在互评中互相学习,通过学习他人良好的编写习惯,完善自己的博客及代码书写规范以及为用户提供良好的视觉效果;任务二中,学习了PSP流程,创建PSP,了解自己的欠缺之处,提高效率。任务三中,在系统的软件开发要求下让我感到自己的不足,体会到了与以往写程序的不同模式,深刻意识到还需多加学习。
任务四
- 完成任务三的程序开发,将项目源码的完整工程文件提交到你注册Github账号的项目仓库中。
- 仓库链接请见博客开头