这次作业成绩还算不错,但是也收获了很多的经验与教训,在这里总结一下。

需要继续改进的地方

  • 作业提交方面仍旧有些问题。如助教所说,在GitHub中并没有保存已经编译好的exe文件,导致助教在检查作业的时候还有重新生成一遍解决方案。这虽然看上去并不是什么大问题,但是回想起我之前在GitHub上下载下来的代码,确实很多时候看着一堆堆的文件,(在不是很了解这个工程的构架的时候)不知道这个代码最后应该怎么跑起来。建立一个Release文件夹确实是一个好思路,能够更加方便他人阅读。
  • 作业的质量方面也有些许瑕疵。比如程序的编译警告没有全部消除。这个我后来又看了一下,发现基本都是一些变量定义了并没有使用。这个问题之前复审别人代码的时候我就发现了。确实自己写代码的时候因为再不停的修改,留下了很多注释掉的语句啊,无用的变量啊之类的东西。这个真是逼死强迫症,下次再提交之前应该再将代码完善一下,将测试代码和冗余的部分剔除,可以更加精简清爽。
  • 代码的架构设计跟不上之后的开发。在后面的对Bug的修改和结对编程的过程中,都体验到了这个问题。由于最开始的没有经验,对于各个计算模块的模块化做的并不够,虽然分成了不同的函数,但是之间仍旧共享很多的公共计算函数,全局变量也有大量的使用,耦合度过大,导致后来修改时“牵一发动全身”。这对之后要进行的团队编程想必是非常的不利的,当时相信有了这次的经验,之后对于模块化编程会有更深的理解吧。

一些做的不错的地方

  • 代码效率很高。这个确实下了功夫,但是后来在听课的时候老师也讲到应该再编程结束之后再着手代码优化的事情。我在编程的时候也想到了这个问题,完成一个问题有很多种解决方案,有的核心计算速度很快,但是为了适配又需要有很多外围函数进行处理,而一些基本的方法虽然计算效率不高,但是更加通用。就像这次,直接对每个站进行广度优先搜索是最基本的方法,而我最后采用的换乘站之间进行迪杰斯特拉算法搜索是一种计算效率更高的算法。在取舍的过程中,前者更加方便进行处理,但是后者需要将地图进行抽象,并且做很多的特殊比较,这些处理都需要时间。在没有同时写这两个算法的前提下,我并不能知道到底哪个更快。虽然最后我选择了后者,事实证明这个算法的效率比直接广搜快了10倍不止。但是外围函数非常的复杂,逻辑上有很多特殊处理的地方很考验脑子,并且最后外围函数处理时间要比路径计算还要长。并且本身写这些函数所花费的精力就是简单算法的几倍。在直接广搜所用时间也不是非常的长的前提下,这样的优化是否是一个合适的举动,确实值得考虑。
  • 支持了附加题的路径计算。这个问题看上去不难但实际上花费了我大量的时间。因为这本质上来说是一个NP问题,并不能在多项式时间内求得答案。所以在考虑之前我权衡了一下是否是求精确解还是求一个近似解。其实如果把地图抽象成以换乘站为顶点的无向图的话,其实一共也就只有50个左右的顶点。这样的计算规模还是能够把精确求解时间限定在可接受范围内的。于是我就计划写一个求精确解的算法。而后我又想到,其实这个问题跟从哪个站出发并没有关系,因为每个站都会遍历到,也就是如果求出了某个站开始的最短路径,那么这条路径其实就是全局的最短路径。实际上只要在程序中存储一条计算好的最短路径,然后根据不同的起点站进行修改就好(因为本身就是一个环)。我甚至都在想手工计算出一条路径,然后保存在程序中(理论上也是可行的)。但是最后为了程序的通用性,还是每次都进行计算。不过这个算法的效率并不高,计算一次需要1分钟左右的时间。虽然后来在结对项目中我把这个功能设置为后台运算,前台还能进行其他的查询以节省用户时间,不过这都是后话了。。。。。

最后po一张小黄衫照哈哈

软工_个人项目反(shai)思(zhao)的更多相关文章

  1. [2017BUAA软工助教]个人项目小结

    2017BUAA个人项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7545780.html 二.评分细则 0.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...

  2. 【软工】个人项目作业——个人软件流程(PSP)

    [软工]个人项目作业--个人软件流程(PSP) 项目 内容 班级:北航2020春软件工程 006班(罗杰.任健 周五) 博客园班级博客 作业:设计程序求几何对象的交点集合 个人项目作业 个人课程目标 ...

  3. [2017BUAA软工助教]个人项目准备工作

    BUAA软工个人项目准备工作 零.注册Github个人账号(你不会没有吧..) 这是Git的使用教程: http://www.cnblogs.com/schaepher/p/5561193.html ...

  4. [BUAA2021软工助教]结对项目-第二阶段小结

    一.作业链接 结对项目-第二阶段 二.优秀作业推荐 本次博客作业虽然是简单总结,但是以下作业中都不乏有思考.有亮点的精彩内容,推荐给同学们阅读学习. 磨练,结对编程!(中) zzx 和 zzy 同学实 ...

  5. 福大软工 1816:项目UML设计(团队作业三)

    项目UML设计(团队) 团队信息 团队名:第三视角 各成员学号及姓名 姓名 学号 博客链接 张扬(组长) 031602345 http://www.cnblogs.com/sxZhangYang/p/ ...

  6. [2021BUAA软工_助教博客]作业成绩汇总

    作业及成绩 作业链接 成绩链接 个人阅读作业#1 个人阅读作业#1_成绩 个人阅读作业#2 个人阅读作业#2_成绩 结对项目-第一阶段 结对项目-第一阶段_成绩 结对项目-第二阶段 结对项目-第二阶段 ...

  7. [2017BUAA软工助教]个人项目测试结果

    个人项目测试结果 标签(空格分隔): 未分类 9.29第一次测试结果 注:点击表头内相应项目可针对该项目进行排序 -c测试结果 INDEX NumberID -c 1 -c 5 -c 100 -c 5 ...

  8. [沈航软工教学] 学生项目Coding地址汇总

    同学们把自己的coding主页链接贴在评论里,要求格式"班号+学号+coding主页链接",如: "1301+13061193 + https://coding.net/ ...

  9. [2017BUAA软工助教]结对项目小结

    2017BUAA结对项目小结 一.作业链接 http://www.cnblogs.com/jiel/p/7604111.html 二.评分细则 1.注意事项 按时间完成并提交--正常评分 晚交一周以内 ...

随机推荐

  1. C#:基于WMI查询USB设备信息 及 Android设备厂商VID列表

    /* ---------------------------------------------------------- 文件名称:WMIUsbQuery.cs 作者:秦建辉 MSN:splashc ...

  2. 127.0.0.1\SQLEXPRESS连接异常

    当你的数据库为SQLEXPRESS时,在程序的数据库连接字符串的服务Server使用127.0.0.1\SQLEXPRESS时,如下: 它会显示一异常: Server Error in '/' App ...

  3. Android文件的分割和组装

    使用UDP数据包发送文件时,由于UDP数据包大小的限制,一个文件要放在几个UDP数据包里面发送,这就需要把一个文件分割成若干部分,分别放进若干个UDP数据包里面,在接收端,收到这些UDP数据包以后,再 ...

  4. Rest风格中关于JPA使用懒加载的坑

    公司最近使用的ORM框架是JPA实现产品使用的是hibernate,曾经看过一篇博客上面说的是如果团队里面没有一个精通hibernate的人,那么最好不要使用它,我现在是深刻的体会到了.但是使用什么框 ...

  5. oracle sql初次接触

    oracle 语法有些地方都是和mysql一样,但还是有很多不同之处: 注意:dual该表为oracle中本身就存在的数据表.比如想取数据库时间(系统时间)就可以用这张表来完成. 创建表语法: cre ...

  6. MUI(5)

    今天实现9宫格菜单.先上效果图: 就是这个效果咯,界面不太美观,底部导航栏是为了苹果用户没有返回按键设计的,只是为了方便演示而已,没有做过多的处理.首先先说一下这个底部导航栏如何实现,这个底部导航栏小 ...

  7. Gym 100917J---Judgement(01背包+bitset)

    题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatements The jury ...

  8. 窗口之间的主从关系与Z-Order

    说明:这是本人2008年写的一篇旧文,从未公开发表过.其中除了一小段描述Window Mobile平台的内容已过时,大部分内容对于从事Win32开发的程序员还是很有参考价值的,也是对自己从事Windo ...

  9. PHP 批量生成静态文件目录代码

    <?php /** * @author:jiangzaixing 20160314 * 获取静态文件方法 */ class StaticFile { const MAP_FILE_NAME = ...

  10. .net字符串数组查找方式效率比较

    下面是代码: static void Main(string[] args) { string[] arr = new string[] { "AAA", "BBBB&q ...