一个程序员的基本修养—论如何成功搭上电梯
Posted xioacd99
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一个程序员的基本修养—论如何成功搭上电梯相关的知识,希望对你有一定的参考价值。
心里没有嘀咕过电梯调度算法的程序员不是好调库侠。
闹钟响了,嗯,还可以睡30分钟。到时候直接拿东西走就ok了。不幸往往睡过头了,结果只剩下5分钟。害,还以为什么大事呢?刚好可以掐着点签到,nice。于是你不紧不慢地来到了电梯前,温柔地按下了下降的按钮,两部电梯,一部不动,另一部刚刚降到10竟然又升上去了!哦豁,洗白了,这下玩完了。
好不容易电梯停在了你这一层,你发现,人满了…
或者说,你在底层,按下了向上的箭头,但这些电梯大爷动都不动。为什么呢?
电梯的上下箭头是为了告诉电梯你想上去或者下去,而不是让电梯向上或者向下。
百度在2019年还举办过一个电梯调度算法大赛,https://aistudio.baidu.com/aistudio/competition/detail/11
可以看到,这是一个深入人心的痛。
所以,我接下来要干什么呢?讲算法?no no no,讲算法是不可能的,这篇文章从头到尾都不会讲算法的。只有好好水文章才能获得阅读量的这个样子(不讲算法我又写啥呢?Doge
当然,本着诚实守信的原则,这篇文章是不会讲具体的算法的。只是简单提一下各个算法的设计思想。
- First Come First Serve(FCFS)Algorithm
大白话:谁先按下电梯按钮就先往谁所在的楼层跑。所以你需要可能需要一个机器人来帮助你,就像这种(把它粘在电梯旁)
-
Short Seek Time First(SSTF) Algorithm
大白话:谁离我近我就去谁那儿。“近水楼台先得月,向阳花木早逢春” -
SCAN Algorithm
类似托马车小火斯,在始发站和终点站一直循环着跑(可以把轨道想象成是圆形闭合的)。途中碰到人就勉为其难的载一下
-
LOOK Algorithm
这个算法是在 SCAN 基础上的改进,改进思想就是小火斯跑着跑着,连续过了好几站都发现没人。等得不耐烦了,于是就掉头了,oh my god,火车掉头。 -
Shortest Access Time First(SATF)Algorithm
这个算法是在 SSTF 的基础上的改进,增加考虑了大家上电梯时间对于调度的影响。 -
Earliest Deadline First(EDF) Algorithm
这个属于实时调度算法,怎么说了,我也不知道它是怎么预估 Deadline。就假设它知道接每个楼层的人需要多少时间,然后它就先挑时间短的,有点类似贪心。
- SCAN + EDF
这名字一看就知道是 SCAN 和 EDF 的改进。那这又怎么结合呢?这处理的是一种特殊情况,算法主体还是采用 EDF 来处理。但是对于完成时间相同的,就依次处理(SCAN 的思想)(这种算法改进思想是不是很平常)
- Priority Inversion Algorithm
有一天,连电梯都只搭载它喜欢的人了。哦豁,那人群就被分为了两类,高优先级的和低优先级的。电梯只在高优先级为空的情况下才处理低优先级的人…
- Feasible Deadline SCAN Algorithm
电梯自身有一个小本本,记录了它能接受的最长服务时间。(为什么是小本本呢?因为随着它的长大,我们等的时间比它最长能接受的时间还长)只要是满足这个限制的,那么电梯就向这个方向采取 SCAN 的思想依次服务。
就先介绍9个算法,因为我喜欢9这个数字(逃)
还有什么多梯梯内调度、梯外调度、单梯梯外调度、多梯梯外调度、分布式电梯群控系统多目标调度算法、基于CMAC网络强化学习的电梯群控调度等等。想想就头大,这里就不再介绍了。
在实际生活中,有用RSR算法的,如奥的斯,其逻辑原则是平均侯梯时间最短。当然,我们身边的大多数电梯都才刚刚成年,20多岁的电梯小年轻怎么会在意这些呢?
所以,最有效的方法就是,当你在顶层时,全部电梯按往下;当你在底层时,全部电梯按往上;中间的情况上下全按。高峰期可以先上再下。Oh耶,妈妈再也不用担心我挤不上电梯了。
那再不行,就走楼梯吧。还能锻炼身体…
以上是关于一个程序员的基本修养—论如何成功搭上电梯的主要内容,如果未能解决你的问题,请参考以下文章