編程之美﹣電梯調度算法

28 篇文章 2 订阅

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

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

       

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

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值