第一个算法题-电梯调度算法


  参考文章编程之美---电梯调度算法

一问题描述:

      所有的员工均在1楼进电梯的时候,选择所要到达的楼层。
     然后计算出停靠的楼层i,当到达楼层i的时候,电梯停止。
     所有人走出电梯,步行到所在的楼层中。
     求所有人爬的楼层数目和的最小值。 

二 问题解决方法:

   解决方案:
  (1)使用简单的方法,直接将楼层从1到n开始遍历
       sum(person[i] *  |i - j| ) 此表达式为一个双重循环,i与j均为1-n的循环。 
       j下标表示电梯停靠的楼层。 
       person数组表示,对应i层的下电梯的人数。此算法负责度为o(n*n) 
       对应的j是上述和为最小的一层即为所求。 上面的算法复杂度为o(n) 
       
  (2)下面考虑一个简单的算法,使其复杂度达到o(n)
      考虑假如电梯停靠在某一楼层i处,假设在i处下楼的客人为N2,
      在i以上楼层的客人数目为N3 ,在i一下楼层的客人数目为N1。 
      且将电梯在i层停止时,全部人员的路程之和记为T。 
      
      那么加入电梯在i-1层停的话,则原来i层之上的人需要多爬一层,即增加了N3
      第i层的人需要多爬一层,则结果增加了N2,  i层之下的人则少爬了一层,结果减去N1
      所以第i-1层的结果为 T - N1 + N2 + N3 。即结果可以即为 T -(N1 - N2 - N3) 
      
      
      下面考虑在i+1层的结果,若电梯在i+1层停止的话,原来i层之上的客户都会少爬一层,
      则结果减少N3 ,而i层之下的人员则都会多爬一层即增加了N1 ,第i层的人员都会多爬一层
      即为增加了N2 。则结果为 T + N1 + N2 - N3 
        
      综上我们得出,
      (1)若N1 > N2 + N3的时候, 我们在第i-1层 选择电梯停止最好。
      (2)若N1 + N2 < N3的时候, 我们选择在第i+1层停止电梯最好。  

个人完全不知道什么是o(n) 的概念,等熟能生巧,每天有时间就看看算法问题。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM