贪心算法

问:有个单线程任务,总内存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的差值由小到大排序后的顺序就是执行的最佳顺序。

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息