編程之美﹣電梯調度算法

最近想详细研究一下电梯调度算法,但是所涉及到内容太多了,目前没有时间了。关于电梯算法的种类:

那我只能研究一下简单的了。

这是编程之美中的一道题目:

一座大厦一共有6部电梯。在高峰时间,每层都有人上下,,电梯在每层都停。

实习生小飞常常会被每层都停的电梯弄得很不耐烦,于是他提出了这样的一个办法:

由于楼层并不太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的一层。所有乘客都从一楼上电梯,到达某楼层后,电梯停下来,所有乘客再从这里爬到自己的目的层。在一楼上电梯的时候,每个乘客选择自己的目的层,电梯则自动计算出应停的楼层。

问:电梯停在哪一层,能够保证这次乘坐的电梯所有乘客爬楼梯的层数之和最少。

直接贴出我用java实现的代码吧:

public static void main(String[] args){for (int n = 0; n < 10; n++){int nums[] = getInfoInOneElevator();System.out.println("一共有:" + nums.length + "人上楼,分别上得楼层数为:");for (int i = 0; i < nums.length; i++){System.out.print(nums[i] + " ");}System.out.println("");int[] info = getMinTotalSteps(nums);System.out.println("最小步数:" + info[0]);System.out.println("停在楼层:" + info[1]);System.out.println("—————————–");}}/** * 根据一电梯中人的信息,计算出最小需要爬得步数,和电梯应该停的楼层 */public static int[] getMinTotalSteps(int nums[]){int minStep = level * nums.length; // 默认都去最高层int nFloor = -1;for (int i = 0; i < level; i++){int tempStep = 0;for (int j = 0; j < nums.length; j++){tempStep += Math.abs(nums[j] – i – 1);}if (minStep > tempStep){minStep = tempStep;nFloor = i + 1;}}return new int[] { minStep, nFloor };}/** * 随机得到一批的上电梯的人,限载人13 */public static int[] getInfoInOneElevator(){// 随机上来的人数int[] nums = new int[(int) (Math.random() * 13)];for (int i = 0; i < nums.length; i++){nums[i] = (int) (Math.random() * level) + 1;}return nums;} 经过10次随机模拟:

这个问题比较简单,以后有时间详细的模拟各个电梯调度算法。

有时我们选择改变,并非经过深思熟虑,

編程之美﹣電梯調度算法

相关文章:

你感兴趣的文章:

标签云: