求此题解题方法,思路
有一个电脑,给定你内存(正整数),给你很多作业,每个作业都有一个需要的内存大小,还有一个驻留内存大小,比如内存10,一个作业需要8,驻留2,那么这个作业可以跑,跑完了它就驻留2的内存,可用内存就只有8了。如果这时再跑个需要9,驻留1的作业,就跑不动了。但是,如果2个作业次序反过来,2个作业都可以跑过。ok,现在给你内存大小(10万内),作业数目(10万内),每个作业信息(需要和驻留大小),问你是否可以按照某种次序安排作业,让所有作业跑过。可以就输出YES,否则NO
[解决办法]
以工作内存-驻留内存作为优先级排序,按优先级大小安排就可以了。O(nlogn)
[解决办法]
1楼说的方法,可能是对所有作业排序,然后按顺序执行。
排序的标准是,按工作内存从大到小排序,
工作内存相同时,按驻留内存从小到大排序。。。
[解决办法]
归纳法证明。
假设对作业数小于n的规模,上述方案为最优。
那么考虑n个作业的情况,如果此时的最优方案应该将优先级最小的作业排在最后,
根据假设,前n-1个作业应该按优先级排,所以,全部n个作业都是按优先级大小排的;
如果此时的最优方案没有将优先级最小的作业排在最后,那么优先级第i大的作业(i<n)
会排在最后。令xi表示第i个作业需要的工作内存,zi表示驻留内存大小,
则根据优先级可知 xi-zi > xn-zn ,即xi+zn > zi+xn 。
那么现在将最优方案中的第n个作业抽出,后续作业依次次提前一个位置,再将第n个作业
插入到末尾,比较这种方案和假设的最优方案。
在假设的最优方案中,最后一个作业如果能够运行,说明总内存减掉前面的作业驻留内存
之和至少还剩xi, 或者说总内存减掉所有的作业(但不包括第n个和第i个作业)驻留内存之和
至少还剩xi+zn。而在根据最优方案调整之后的方案中,最后一个作业运行时,空闲内存为
总内存减掉所有的作业(但不包括第n个和第i个作业)驻留内存之和再减掉第i个作业的驻留内存,
即至少为xi+zn-zi,有前面的式子可知xi+zn-zi > xn。所以只要其他任意方案能够安排下,
那么按优先级顺序的方案必定可以。
[解决办法]