码迷,mamicode.com
首页 > 编程语言 > 详细

編程之美﹣電梯調度算法

时间:2015-03-20 23:49:58      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:

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

    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次随机模拟:

   技术分享    

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

編程之美﹣電梯調度算法

标签:

原文地址:http://blog.csdn.net/yilip/article/details/44498949

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!