软工_个人项目反(shai)思(zhao)
这次作业成绩还算不错,但是也收获了很多的经验与教训,在这里总结一下。
需要继续改进的地方
- 作业提交方面仍旧有些问题。如助教所说,在GitHub中并没有保存已经编译好的exe文件,导致助教在检查作业的时候还有重新生成一遍解决方案。这虽然看上去并不是什么大问题,但是回想起我之前在GitHub上下载下来的代码,确实很多时候看着一堆堆的文件,(在不是很了解这个工程的构架的时候)不知道这个代码最后应该怎么跑起来。建立一个Release文件夹确实是一个好思路,能够更加方便他人阅读。
- 作业的质量方面也有些许瑕疵。比如程序的编译警告没有全部消除。这个我后来又看了一下,发现基本都是一些变量定义了并没有使用。这个问题之前复审别人代码的时候我就发现了。确实自己写代码的时候因为再不停的修改,留下了很多注释掉的语句啊,无用的变量啊之类的东西。这个真是逼死强迫症,下次再提交之前应该再将代码完善一下,将测试代码和冗余的部分剔除,可以更加精简清爽。
- 代码的架构设计跟不上之后的开发。在后面的对Bug的修改和结对编程的过程中,都体验到了这个问题。由于最开始的没有经验,对于各个计算模块的模块化做的并不够,虽然分成了不同的函数,但是之间仍旧共享很多的公共计算函数,全局变量也有大量的使用,耦合度过大,导致后来修改时“牵一发动全身”。这对之后要进行的团队编程想必是非常的不利的,当时相信有了这次的经验,之后对于模块化编程会有更深的理解吧。
一些做的不错的地方
- 代码效率很高。这个确实下了功夫,但是后来在听课的时候老师也讲到应该再编程结束之后再着手代码优化的事情。我在编程的时候也想到了这个问题,完成一个问题有很多种解决方案,有的核心计算速度很快,但是为了适配又需要有很多外围函数进行处理,而一些基本的方法虽然计算效率不高,但是更加通用。就像这次,直接对每个站进行广度优先搜索是最基本的方法,而我最后采用的换乘站之间进行迪杰斯特拉算法搜索是一种计算效率更高的算法。在取舍的过程中,前者更加方便进行处理,但是后者需要将地图进行抽象,并且做很多的特殊比较,这些处理都需要时间。在没有同时写这两个算法的前提下,我并不能知道到底哪个更快。虽然最后我选择了后者,事实证明这个算法的效率比直接广搜快了10倍不止。但是外围函数非常的复杂,逻辑上有很多特殊处理的地方很考验脑子,并且最后外围函数处理时间要比路径计算还要长。并且本身写这些函数所花费的精力就是简单算法的几倍。在直接广搜所用时间也不是非常的长的前提下,这样的优化是否是一个合适的举动,确实值得考虑。
- 支持了附加题的路径计算。这个问题看上去不难但实际上花费了我大量的时间。因为这本质上来说是一个NP问题,并不能在多项式时间内求得答案。所以在考虑之前我权衡了一下是否是求精确解还是求一个近似解。其实如果把地图抽象成以换乘站为顶点的无向图的话,其实一共也就只有50个左右的顶点。这样的计算规模还是能够把精确求解时间限定在可接受范围内的。于是我就计划写一个求精确解的算法。而后我又想到,其实这个问题跟从哪个站出发并没有关系,因为每个站都会遍历到,也就是如果求出了某个站开始的最短路径,那么这条路径其实就是全局的最短路径。实际上只要在程序中存储一条计算好的最短路径,然后根据不同的起点站进行修改就好(因为本身就是一个环)。我甚至都在想手工计算出一条路径,然后保存在程序中(理论上也是可行的)。但是最后为了程序的通用性,还是每次都进行计算。不过这个算法的效率并不高,计算一次需要1分钟左右的时间。虽然后来在结对项目中我把这个功能设置为后台运算,前台还能进行其他的查询以节省用户时间,不过这都是后话了。。。。。
最后po一张小黄衫照哈哈
软工_个人项目反(shai)思(zhao)的更多相关文章
- [2017BUAA软工助教]个人项目小结
2017BUAA个人项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7545780.html 二.评分细则 0.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...
- 【软工】个人项目作业——个人软件流程(PSP)
[软工]个人项目作业--个人软件流程(PSP) 项目 内容 班级:北航2020春软件工程 006班(罗杰.任健 周五) 博客园班级博客 作业:设计程序求几何对象的交点集合 个人项目作业 个人课程目标 ...
- [2017BUAA软工助教]个人项目准备工作
BUAA软工个人项目准备工作 零.注册Github个人账号(你不会没有吧..) 这是Git的使用教程: http://www.cnblogs.com/schaepher/p/5561193.html ...
- [BUAA2021软工助教]结对项目-第二阶段小结
一.作业链接 结对项目-第二阶段 二.优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 磨练,结对编程!(中) zzx 和 zzy 同学实 ...
- 福大软工 1816:项目UML设计(团队作业三)
项目UML设计(团队) 团队信息 团队名:第三视角 各成员学号及姓名 姓名 学号 博客链接 张扬(组长) 031602345 http://www.cnblogs.com/sxZhangYang/p/ ...
- [2021BUAA软工_助教博客]作业成绩汇总
作业及成绩 作业链接 成绩链接 个人阅读作业#1 个人阅读作业#1_成绩 个人阅读作业#2 个人阅读作业#2_成绩 结对项目-第一阶段 结对项目-第一阶段_成绩 结对项目-第二阶段 结对项目-第二阶段 ...
- [2017BUAA软工助教]个人项目测试结果
个人项目测试结果 标签(空格分隔): 未分类 9.29第一次测试结果 注:点击表头内相应项目可针对该项目进行排序 -c测试结果 INDEX NumberID -c 1 -c 5 -c 100 -c 5 ...
- [沈航软工教学] 学生项目Coding地址汇总
同学们把自己的coding主页链接贴在评论里,要求格式"班号+学号+coding主页链接",如: "1301+13061193 + https://coding.net/ ...
- [2017BUAA软工助教]结对项目小结
2017BUAA结对项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7604111.html 二.评分细则 1.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...
随机推荐
- 应用Css美化表单
原来的效果 美化之后的效果 实现代码 <style> .container { margin:0auto; width:620px; } fieldset { padding:18px ...
- C#写快速排序
//先上快排代码------------------------------------------------------------------------public static void Q ...
- 头文件里面的ifndef /define/endif的作用
c,c++里面,头文件里面的ifndef /define/endif的作用 今天和宿舍同学讨论一个小程序,发现有点地方不大懂······ 是关于头文件里面的一些地方: 例如:要编写头文件test.h ...
- C#编程总结(五)多线程带给我们的一些思考
C#编程总结(五)多线程带给我们的一些思考 如有不妥之处,欢迎批评指正. 1.什么时候使用多线程? 这个问题,对于系统架构师.设计者.程序员,都是首先要面对的一个问题. 在什么时候使用多线程技术? 在 ...
- ScrollView与ListView冲突解决
正 常来说,在ScrollView添加一个ListView后在真机上只会显示ListView的一行多一点,我也不理解为什么会这样,后来我把 ListView的layout_height改成400dip ...
- MVC之前的那点事儿系列(1):进入CLR
MVC之前的那点事儿系列,是笔者在2012年初阅读MVC3源码的时候整理的,主要讲述的是从HTTP请求道进入MVCHandler之前的内容,包括了原创,翻译,转载,整理等各类型文章,当然也参考了博客园 ...
- 背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例
[源码下载] 背水一战 Windows 10 (9) - 资源: 资源限定符概述, 资源限定符示例 作者:webabcd 介绍背水一战 Windows 10 之 资源 资源限定符概述 资源限定符示例 ...
- NYOJ 746---整数划分(四)(区间DP)
题目链接 描述 暑假来了,hrdv 又要留学校在参加ACM集训了,集训的生活非常Happy(ps:你懂得),可是他最近遇到了一个难题,让他百思不得其解,他非常郁闷..亲爱的你能帮帮他吗? 问题是我们经 ...
- SQL Server 行转列重温
转载自http://www.cnblogs.com/kerrycode/ 行转列,列转行是我们在开发过程中经常碰到的问题.行转列一般通过CASE WHEN 语句来实现,也可以通过 SQL SERVER ...
- 定时器相关 setTimeout setInterval 函数节流
这个问题也是在参加百度的前端技术学院中遇到的 任务中需要用js实现动画 导师给的评价中setInterval会导致bug 当时不理解 下面把自己学习的过程分享出来 再次理解单线程 老是说js ...