个人项目-地铁出行路线
地铁出行路线
https://github.com/ChengFR/PersonalProgram_SubwayRoute
时间预期
PSP 2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
|
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
3h |
· Design Spec |
· 生成设计文档 |
1h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
0.5h |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
1h |
· Design |
· 具体设计 |
1h |
· Coding |
· 具体编码 |
2h |
· Code Review |
· 代码复审 |
0.5h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
|
· Size Measurement |
· 计算工作量 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
1h |
合计 |
11h |
实际用时
PSP 2.1 |
Personal Software Process Stages |
Time |
Planning |
计划 |
|
· Estimate |
· 估计这个任务需要多少时间 |
|
Development |
开发 |
|
· Analysis |
· 需求分析 (包括学习新技术) |
4h |
· Design Spec |
· 生成设计文档 |
0.5h |
· Design Review |
· 设计复审 (和同事审核设计文档) |
\ |
· Coding Standard |
· 代码规范 (为目前的开发制定合适的规范) |
2h |
· Design |
· 具体设计 |
2h |
· Coding |
· 具体编码 |
3h |
· Code Review |
· 代码复审 |
1h |
· Test |
· 测试(自我测试,修改代码,提交修改) |
1h |
Reporting |
报告 |
|
· Test Report |
· 测试报告 |
|
· Size Measurement |
· 计算工作量 |
|
· Postmortem & Process Improvement Plan |
· 事后总结, 并提出过程改进计划 |
1h |
合计 |
14.5h |
程序性能
在程序设计阶段,对于程序的性能进行过考量。
在实现功能最少换乘寻路时,最初准备将地铁图按照一般图进行处理,运用Dijkstra算法,记录到达每一站的前一站(当前最短路径中);定义换乘的代价为较大数,定义换乘行为为该站的前一站的前一站与其不在同一条地铁线上,在计算该节点的距离时,需要加上换乘代价。最后根据站点记录推出线路。
然而该算法要对大量节点进行搜索,由于Dijkstra运用贪心的策略,首先搜索的是终点站(从终点站倒推)所在线路上的所有站点,而大量情况往往是存在换乘的,因此效率低下。
考虑到地铁图存在一定的特殊性,只有在换乘站才能进行"换乘",也就是说两个不在同一条地铁线上的站点之间的路线必然经过这两个站点所在线路上的换乘站。因此提取换乘站进行寻路,处理的节点比原图节点少得多,只是计算节点之间的距离会增加时间开销。(事实上计算距离的函数确实占用了最多的时间)
程序最终的性能分析图:
程序测试时进行初始化,调用了一次findTrailB函数以及一次findTrailC函数,分别为最短寻路和最少换乘寻路。
可以看到初始化过程中文件处理占用的时间最多。在findTrailC最少换乘寻路函数中,距离计算函数calcDis占用的时间最多。
函数实现为:
int subNet::calcDis(station* sta1, station* sta2, subLine* line) {
if ((!inLine(sta1, line)) || (!inLine(sta2, line))) {
cerr << "stations are not in a line." << endl;
if (!inLine(sta1, line))
cerr << sta1->_name << "not in line." << endl;
if (!inLine(sta2, line))
cerr << sta2->_name << "not in line." << endl;
return -1;
}
int num1 = 0, num2 = 0;
auto b = line->_stations.begin();
auto e = line->_stations.end();
int i = 0;
for (; b != e; b++, i++) {
if ((*b) == sta1)
num1 = i;
if ((*b) == sta2)
num2 = i;
}
if (line->_isCir) {
int length = line->_stations.size();
int dis1 = (num1 - num2) % length;
int dis2 = (num2 - num1) % length;
return (dis1 > dis2) ? dis1 : dis2;
}
else {
return (num1 > num2) ? num1 - num2 : num2 - num1;
}
}
程序测试
路线输出测试测例:(随机选取)
1号线
大兴线
最短寻路测试:
公主坟 知春路 //存在多条路线,其中多次换乘路线相较于直达路线更近
知春路 公主坟 //反向测试
火器营 巴沟 //环线测试
最少换乘测试:
公主坟 知春路 //存在多条路线,其中直达线路并非最近
知春路 公主坟 //反向测试
火器营 巴沟 //环线测试
公主坟 国贸 //存在多条直达路线
沙河 巩华城 //由于最少换乘算法时基于换乘站寻路的,设置不经过换乘站路线看其是否能够正常寻路
没有列出错误的输入样例
这十个测试样例具有一定代表性,实际测试样例不止这些。
补充:进一步的测试发现1号线转4号线,例如“大望路”、“四惠”、“四惠东”、“高碑店”不满足定义的换乘表达,故特殊处理
个人收获
1.重新学习了C++的知识。由于一段时间没有使用C++,有些生疏。这次练习提升了C++的技能。
2.OOP的一次实践。利用面向对象思想编写的程序。然而程序规范性上还需要提升。
3.某种意义上提升了解决实际问题的能力。
转载于:https://www.cnblogs.com/chengfr/p/5878130.html
个人项目-地铁出行路线相关推荐
- 软件工程结对项目——地铁出行路线规划程序
GitHub链接:https://github.com/2016bits/subway PSP2.1表格 PSP2.1 Personal Software Process Stages 预计耗时(分钟 ...
- 结对项目--地铁出行路线规划程序(续)——附加题
在结对项目的博客中也说过,只要按要求提供某个城市的地铁线路图和地铁经纬度坐标图,然后指定几个参考点就可以支持不同城市的地铁线路查询. 转载于:https://www.cnblogs.com/14061 ...
- 地铁出行路线规划程序
工程:实现一个帮助进行地铁出行路线规划的命令行程序. 1.使用PSP表格记录预估将在程序的各个模块的开发上耗费的时间. PSP 2.1 Personal Software Process Stages ...
- 预培训-个人项目(地铁出行规划)
预培训-个人项目(地铁出行线路规划) 项目原址: https://edu.cnblogs.com/campus/buaa/2019BUAASummerSETraining/homework/3407 ...
- 个人项目-地铁出行线路规划程序
欢迎大家关注我们的软工团队:http://www.cnblogs.com/Default1406/ PSP表格 PSP 2.1 Personal Software Process Stages Pla ...
- 天津地铁出行线路规划项目需求分析与设计思路分析
天津地铁出行线路规划项目需求分析与设计思路分析 项目概要 以下是天津地铁线路总图,本项目的受众可以通过本软件,获得天津市地铁出行最便捷,最快速的线路推荐. 需求分析 实现一个帮助进行地铁出行路线规划的 ...
- 地铁出行线路规划项目需求分析与设计
项目需求 实现一个帮助进行地铁出行路线规划的命令行程序 地铁线路图数据需要与执行程序解耦 支持查询单条线路的所有站点 支持查询任意两站之间通过最少站数的路线 算法设计 项目中最主要的点在于:找出两个站 ...
- Java毕设项目春运出行铁路路线规划推荐系统(java+VUE+Mybatis+Maven+Mysql)
Java毕设项目春运出行铁路路线规划推荐系统(java+VUE+Mybatis+Maven+Mysql) 项目运行 环境配置: Jdk1.8 + Tomcat8.5 + Mysql + HBuilde ...
- 地铁出行规划项目分析
地铁出行规划项目分析 基本理解 本次个人项目是实现一个帮助进行地铁出行线路规划的命令行程序,在程序开始需要导入地铁线路图,然后有查询相关线路信息和经过最少站点到达目的地的功能,由于在本项目中可以忽略站 ...
最新文章
- android o 全机型推送,氢OS(Android O)官方更新推送 一加两款机型完成适配
- PTA 家庭房产 (图论,暴搜)
- MySQLdump常用命令
- jmeter吞吐量_深入理解Jmeter常用定时器
- 数据结构---二叉线索树
- 一次堆外内存泄露的排查过程
- 设置springboot日志级别_Spring Boot 日志框架实践
- jquery append、prepend、before等等
- UpdatePanel之间的调用
- BigDecimal使用不当,老板的损失照样从你工资里扣
- 记一次RAID阵列的迁移经历
- 这么有料的福利,你还不赶紧关注一波吗?(代码合集)
- 单词前缀dia/dis/duo/en/epi/eu等衍生单词(辅助记忆)
- word根据标题自动生成目录
- 8:PMS和软件安装的介绍-步入Linux的现代方法
- ECN Trade:最强飓风来袭,总统大选间断
- mysql查询学生表年龄语句_mysql中一张(居民)表按年龄段查询数据
- 百度图片搜索搜出大量色情图片,原因不明
- vscode下载慢解决办法
- 熟悉使用工具---第二次作业