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

来源:互联网 发布:苹果cms模板怎么安装 编辑:程序博客网 时间:2024/05/22 11:36

设有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];}elsebreak;}}




原创粉丝点击