软工_个人项目反(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.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...
随机推荐
- jQuery实用的语法总结
1.关于页面元素的引用 通过jquery的$()引用元素包括通过id.class.元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用do ...
- 关于c++操作符的优先级
优先级从上到下依次递减,最上面具有最高的优先级,逗号操作符具有最低的优先级. 所有的优先级中,只有三个优先级是从右至左结合的,它们是单目运算符.条件运算符.赋值运算符.其它的都是从左至右结合. 具有最 ...
- redis sentinel 集群配置-主从切换
1.配置redis master,redis slave(配置具体操作见上文http://www.cnblogs.com/wangchaozhi/p/5140469.html). redis mast ...
- Ubuntu密码错误的问题
安装了一个Ubuntu,启动以后进入终端,想su root,提示输入密码,输入了很多次密码(我的用户密码和root密码是一样的),总是Login incorrect. 后来输入了用户名,提示输入密码, ...
- request的各种方法大全
request.setAttribute("result", district);//放进作用域,可以用el表达式在页面展示.(名字,调用方法的结果) pageContext.re ...
- 高频sql语句汇总。不断更新。。
操作 语句 创建数据库 CREATE DATABASE dbname/* DEFAULT CHARSET utf8 COLLATE utf8_general_ci;*/ 删除数据库 DROP DATA ...
- java 克隆
1. About Java中, 对于基本数据类型可以使用"=" 来克隆,此时两个对象除了相等是没有任何关系的; 而对于引用类型, 却不能简单地使用"="来克隆, ...
- socket.io,远程控制你的幻灯片
原文:http://www.cnblogs.com/xiezhengcai/p/3964455.html 中秋休息了几天,今天又开始捣鼓socket.io了.今天的任务是通过socket.io控制你的 ...
- Java Selenium封装--RemoteWebElement
package com.liuke.selenium.driver; import java.sql.SQLException; import java.util.List; import org.j ...
- 20款美化网站的 jQuery Lightbox 灯箱插件
jQuery Lightbox 灯箱插件可以让你为您的网站和应用程序展示优雅的图像,视频 和其它内容(使用模式窗口).如果你是一个开发人员,你必须拥有 jQuery 灯箱插件集合,因为有一部分的客户会 ...