zoukankan      html  css  js  c++  java
  • 改进的电梯调度程序

    改进的电梯调度程序

    上文
    GitHub

    1. 学习心得

    1.1 关于文件读写

    其实我觉得这个没什么好说的,就是翻翻API,不会了man 3 freopen就这样

    1.2 关于Git Commit规范

    我有句MMP一定要说
    我觉得这个规范太死板,有一些情况并不包含在那些type里面(有可能是我学习不够深入),在这种情况下写commit message都不知道怎么写。

    2. 改进过程

    2.1 外围代码的修改

    2.1.1 文件输入输出

    因为程序不需要往多个地方输入输出,直接重定向标准输入输出流就完事了

    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
    

    在main()开头加两行就行,因为程序运行完就退出,所以不需要考虑文件描述符(句柄)泄漏

    2.1.2 外围调度部分

    其实这个本来不用改,是我自己傻逼了

    2.2 核心调度的修改

    2.2.1 魔改预估时间法

    上次在移植大佬的算法的过程中发现,他的算法整体思想并没有用到乘客只去1层和10层的假设,只是在有些地方数据写死了而已,只需要把这些写死的数据换成合适的变量就可以了。
    至于最后那些计算公式的推导过程有没有用到假设就不知道了,反正程序能跑而且跑得挺正常的。

    2.2.2 带顺向截梯控制的扫描算法

    其实就是让电梯在1层和10层之间往复运动,如果有乘客到达目的地则停,如果有与电梯运行方向相同的请求则停
    施工中

    3. 踩坑记录

    3.1 Windows可执行文件

    无比巨坑

    3.1.1 MinGW工具链和依赖库

    Bootstrapping MinGW工具链的辛酸过程就不写了,编译出来的东西复制到Windows上会缺两个库(我的电脑上是两个,别的电脑就不知道了),保险起见开编译选项-static静态链接。

    3.1.2 MSVC和GCC所带的STL行为不一致

    GCC上正向迭代器的base()返回其所指代的元素指针,而在MSVC中只有反向迭代器有base()返回其所对应的正向迭代器,正向迭代器没有这个成员
    CMake生成VS项目文件后打开一大片红,这也是为什么我最后选择MinGW

    3.1.3 字符编码问题

    程序输出中文乱码,控制台chcp 65001后正常
    所以我猜想这是字符编码问题,MinGW按照UTF-8将文本字符写进程序,但输入输出库默认调用的是A系列API,在中文版Windows上接受GBK字符串,需要将MinGW配置为执行字符集使用GBK
    解决:编译选项添加-fexec-charset=gbk

    3.1.4 Git

    全静态链接出来的可执行文件体积达10+M,多个版本后git仓库体积爆增
    本来想用git rebase或者git gc这种黑魔法从历史中删除仓库对象,但是想想容易玩脱
    所以我想可以让EXE单独stage然后commit,使这个commit处于History最顶端,需要修改时直接丢弃这个commit,修改后commit,再编译,再commit,最后git push --force强制推到远端

    4. 测试样例

    1 1 0
    2 1 0
    3 1 0
    4 1 0
    5 1 0
    
    0 5 1
    0 5 4
    0 5 7
    0 5 9
    0 5 10
    
    0 10 1
    0 9 1
    0 7 1
    0 4 1
    0 2 1
    
    1 2 3
    3 2 1
    5 3 5
    7 2 3
    6 9 0
    
    66666 3 9
    66667 7 2
    66660 5 2
    66663 8 9
    66673 1 9
    

    5. 统计

    时间 Bug数 行数
    ~3h ~5 ~480

    6. 提交日志

  • 相关阅读:
    ZOJ 1002 Fire Net
    Uva 12889 One-Two-Three
    URAL 1881 Long problem statement
    URAL 1880 Psych Up's Eigenvalues
    URAL 1877 Bicycle Codes
    URAL 1876 Centipede's Morning
    URAL 1873. GOV Chronicles
    Uva 839 Not so Mobile
    Uva 679 Dropping Balls
    An ac a day,keep wa away
  • 原文地址:https://www.cnblogs.com/rtxux/p/8451936.html
Copyright © 2011-2022 走看看