博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
编程之美读书笔记——1.8小飞的电梯调度算法
阅读量:4673 次
发布时间:2019-06-09

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

分析:

1)直接想法是穷举法,依次算出电梯停靠在第一层到第N层乘客所要爬的总层数,找出最小值。

代码(js版):

View Code
1 var nPerson = new Array(0, 2, 3, 5, 8); //nPerson[i]表示第i层下的人数;  2          3         var N = 10; //电梯能到达的最大层数;  4          5         var nMinFloor, nTargetFloor; //nMinFloor为最小总层数;nTargetFloor为电梯停在哪层最优;  6          7          8         //解法一:穷举法 [时间复杂度O(N^2)]  9         function exhaustion() 10         {
11 var nFloor; //nFloor临时变量,记录每次的总层数; 12 13 nTargetFloor = -1; 14 15 //穷举电梯在每一层停靠的结果,比较结果得出最优解; 16 for(var i=1; i<=N; i++) 17 {
18 nFloor = 0; 19 for(var j=1; j
nFloor)) 35 {
36 nMinFloor = nFloor; 37 nTargetFloor = i; 38 } 39 40 } 41 42 alert("Minfloor acounts:"+ nMinFloor +", optTargetFloor:"+ nTargetFloor); 43 }

为降低时间复杂度,关键是减少嵌套for循环。

2)比较调整法(思路见注释)

View Code
1 //解法二:比较法 [时间复杂度O(N)]  2         /*  3         思路:当电梯停靠在第i层时,乘客所要爬的总的楼梯数为Y.  4         假设有N1个乘客要到达的层数
i. 5 所以有: 6 (1)当电梯改停在i-1,则 Y+(N2+N3-N1) 7 (2)当电梯改停在i+1,则 Y+(N1+N2-N3) 8 所以当后面那部分的值<0时(如(2)的N1+N2

体会:

对比了自己的代码和书上的代码才发现就算思路相同,但是书上的代码的优化质量和简洁度显然更高。

嘿嘿,“优秀的代码是不知不觉中写出来的”。

路漫漫。

转载于:https://www.cnblogs.com/Quains/archive/2011/11/03/2234411.html

你可能感兴趣的文章