第一個算法題-電梯調度算法


  參考文章編程之美---電梯調度算法

一問題描述:

      所有的員工均在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