编程之美1.8小飞的电梯调度算法扩展问题

本文探讨了电梯从一层改停在下一层时的能量消耗变化,通过计算不同楼层停靠时乘客上下楼所需能量,提出了一种优化停靠策略的方法。在特定条件下,通过调整停靠楼层可以降低总体能耗。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设有N2个乘客在第i层下,N1个乘客的目的地楼层在第i层以下,N3个乘客的楼层在第i层以上

假设电梯从停在i层改停在为i+1层,停在第i层时消耗的总能量为E

则改为i+1层停之后原先i层以上的乘客即N3个乘客少往上爬一层,原先第i层的N2个乘客需多往下爬一层,原先第i层以下的N1个乘客需多往下爬一层。

所需总能量变为E-N3*K+N1+N2

若N3*K>(N1+N2),则停在i+1层好



若停第i层比停i+1层能量消耗低,会出现停第i层比停第i+2层能量消耗多的情况么


已知 N3*K<(N1+N2)

从i层到i+2层

消耗的能量变为E+2(N1+N2)+nPersons[i+1]-k(N3-nPersons[i+1])>E

因此循环只要有一次停第i层比停i+1层能量消耗低,后面变无需再比较


//nPerson[i]表示到第i层的乘客数目
//N1代表目标楼层在第i层以下的乘客数
//N2代表目标楼层第i层的乘客数
//N3代表目标楼层在第i层以上的乘客数
void (int *nPerson,int k){
	int nMinEnergy=0;
	int nTargetFloor=1;
	int N1,N2,N3;
	int i;
	for(N1=0,N2=nPerson[1],N3=0,i=2;i<N;i++)
	{
		N3+=nPerson[i];
		nMinEnergy+=nPerson[i]*(i-1)*k;
		
	}
	for(i=2;i<N;i++)
	{
		if(N3*k>(N1+N2)){
			nTargetFloor=i;
			nMinEnergy=nMinEnergy-N3*K+N1+N2;
			N1=N1+nPerson[i-1];
			N3-=nPerson[i];
			N2=nPerson[i];
			
		}
		else
			break;
	}
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值