編程之美﹣電梯調度演算法,電梯調度演算法

來源:互聯網
上載者:User

編程之美﹣電梯調度演算法,電梯調度演算法

    最近想詳細研究一下電梯調度演算法,但是所涉及到內容太多了,目前沒有時間了。關於電梯演算法的種類:

    http://www.cnblogs.com/jianyungsun/archive/2011/03/16/1986439.html

    那我只能研究一下簡單的了。

      這是編程之美中的一道題目:

     一座大廈一共有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次隨機類比:

       

   這個問題比較簡單,以後有時間詳細的類比各個電梯調度演算法。

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.