问:有个单线程任务,总内存M,处理N个请求,每一个请求运行时占用Ri的内存空间,运行完后会占用Oi的内存,请问按照怎么的顺序处理任务,能够处理完全部的请求?线程
解:排序
假设最优顺序是 1->N,那么运行最后一个任务的时候内存状态为:内存
O1+O2+...+O(n-1) + Rn请求
再假设将最佳顺序的最后一个任务Rn和Ri改变一下顺序,那么运行最后一个任务的时候内存状态为:
O1+O2+On+...+O(n-1)+ Ri
由于第一种状况是假设顺序最优,说明运行时占用总内存最小,那么就有:
(O1+O2+Oi+...+O(n-1) + Rn) <= (O1+O2+On+...+O(n-1)+ Ri )
销掉同类项为:
Oi + Rn <= On + Ri 交换得:
Rn - On <= Ri-Oi
由此可知:最佳的顺序的要求是R-O的差值最小,既按Rx-Ox的差值由小到大排序后的顺序就是执行的最佳顺序。