zoukankan      html  css  js  c++  java
  • 第一次个人项目-地铁出行路线规划程序

     源代码地址:https://github.com/qingchanghan/Software-engineering

    1)开始实现程序之前,使用下列PSP表格估计将在程序的各个模块的开发上耗费的时间。

    PSP 2.1

    Personal Software Process Stages

    Time

    Planning

    计划

      · Estimate

      · 估计这个任务需要多少时间

     26.5h

    Development

    开发

      · Analysis

      · 需求分析 (包括学习新技术)

     5h

      · Design Spec

      · 生成设计文档

     1h

      · Design Review

      · 设计复审 (和同事审核设计文档)

     1h

      · Coding Standard

      · 代码规范 (为目前的开发制定合适的规范)

     1h

      · Design

      · 具体设计

     5h

      · Coding

      · 具体编码

     8h

      · Code Review

      · 代码复审

     2h

      · Test

      · 测试(自我测试,修改代码,提交修改)

     2h

    Reporting

    报告

      · Test Report

      · 测试报告

     1h

      · Size Measurement

      · 计算工作量

     0.5h

      · Postmortem & Process Improvement Plan

      · 事后总结, 并提出过程改进计划

     1h

     

    合计

     26.5h

     2)实现完程序之后,使用下列PSP表格记录在各个模块上实际花费的时间。

    PSP 2.1

    Personal Software Process Stages

    Time

    Planning

    计划

      · Estimate

      · 估计这个任务需要多少时间

    Development

    开发

      · Analysis

      · 需求分析 (包括学习新技术)

     4h

      · Design Spec

      · 生成设计文档

     1h

      · Design Review

      · 设计复审 (和同事审核设计文档)

     1h

      · Coding Standard

      · 代码规范 (为目前的开发制定合适的规范)

     4h

      · Design

      · 具体设计

     6h

      · Coding

      · 具体编码

     12h

      · Code Review

      · 代码复审

     3h

      · Test

      · 测试(自我测试,修改代码,提交修改)

     3h

    Reporting

    报告

      · Test Report

      · 测试报告

     1h

      · Size Measurement

      · 计算工作量

     0.5h

      · Postmortem & Process Improvement Plan

      · 事后总结, 并提出过程改进计划

     1h

     

    合计

     36.5h

     3)先贴一张性能分析图。

    从这张图上可以看出,热路径中transfer2()函数占了85.14%,其中调用transfer3()函数占了80.09%,transfer3()调用自己又占了68.93%。为什么占了这么多呢?原因就是它是一个递归函数。

    简单介绍一下我的算法吧,换乘最少的最短路线的算法。设起始点为sta1,目标点为sta2,首先求出sta1可直接到达的站点(即不经过换乘,下面不再重复),计算出sta2可直接到达的站点,看二者有没有交集。若没有,求出sta1必须换乘一次才能到达的站点,再看看有没有交集,重复此过程,直到有交集为止。但是有了交集以后,由于我们要求的是换乘最少的最短路径,所以要从终点回溯,这也就是这个递归函数的由来。正因为有了这个递归函数,程序执行相对较慢。一般换乘2-3次还可以无延迟出结果,4次就得等个几秒钟。

    想过改进这个算法,但是一是时间比较紧张,二是也没有想出来好的办法,所以无奈就这样了。

    其他的一些地方倒是改进了一点,主要是代码复用来减少了代码量。

    4)测试用例

    地铁四号线
    地铁十号线
    地铁机场线
    -c 张郭庄 善各庄
    -b 张郭庄 善各庄
    -c 知春路 东直门
    -b 知春路 东直门
    -c 沙河 土桥
    -b 沙河 土桥
    -c 苏庄 俸伯
    -b 苏庄 俸伯
    -c 安河桥北 亦庄火车站
    -b 安河桥北 亦庄火车站
    -c 沙河 南锣鼓巷
    -b 沙河 南锣鼓巷

    这些用例涵盖了地图的大部分线路,也涵盖了几种要求,且结果都和百度地图的结果比对过,应该是正确的。

    5)这次项目是第一次,老师当堂布置的任务。当时一看作业要求,必须用C++或C#,整个人都有点懵。好在C++的语法和C几乎一样,陆续花了几个小时,补充了C++的知识。

    以前的OO和别的程序,我都是先想一点写一点,然后边写边想边修改。以前这样的方法还好,但是这次完成起来就显得尤为吃力。

    所以我觉得以后在写代码之前,一定要认真完成分析和设计的工作,然后再动手写代码,这样的效率才更高。

  • 相关阅读:
    Thymeleaf
    JdbcTemplate
    submit提交判断
    C++经典排序算法的理解:冒泡排序和选择排序
    求二进制中1的个数
    记录一次读取hdfs文件时出现的问题java.net.ConnectException: Connection refused
    linux服务器间配置ssh免密连接
    psycopg2模块安装问题
    sklearn.tree.DecisionTreeClassifier 详细说明
    sklearn.neighbors.NNeighborsClassifier 详细说明
  • 原文地址:https://www.cnblogs.com/qingchanghan/p/5873994.html
Copyright © 2011-2022 走看看