博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
改进的电梯调度程序
阅读量:5958 次
发布时间:2019-06-19

本文共 1515 字,大约阅读时间需要 5 分钟。

改进的电梯调度程序

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 外围调度部分

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

1329642-20180217154728156-1540832712.png

1329642-20180217154755499-1016342035.png

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 02 1 03 1 04 1 05 1 0
0 5 10 5 40 5 70 5 90 5 10
0 10 10 9 10 7 10 4 10 2 1
1 2 33 2 15 3 57 2 36 9 0
66666 3 966667 7 266660 5 266663 8 966673 1 9

5. 统计

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

6. 提交日志

1329642-20180222140524458-1742685181.png

转载于:https://www.cnblogs.com/rtxux/p/8451936.html

你可能感兴趣的文章
JS——特效秀
查看>>
Beta冲刺——day6
查看>>
前端:CheckBox事件函数js
查看>>
Comet OJ - Contest #3 题解
查看>>
[网络流24题-9]试题库问题
查看>>
jquery选择器详解
查看>>
C# 保留2位小数
查看>>
使用xshell远程连接Linux
查看>>
杭电ACM1007
查看>>
faster-RCNN台标检测
查看>>
Unix环境高级编程 centos中配置apue编译环境
查看>>
运算符
查看>>
数据结构之各排序算法
查看>>
网页分帧操作<frameset>,<iframe>标签
查看>>
Vue生产环境部署
查看>>
酒店之王
查看>>
html5判断用户摇晃了手机(转)
查看>>
VS下Qt4.8.4安装
查看>>
Linux df命令
查看>>
redhat6.5 配置使用centos的yum源
查看>>