磁带的最优存储(贪心算法)

来源:互联网 发布:mac发热严重怎么办 编辑:程序博客网 时间:2024/05/01 11:15

题目:磁带的最优存储:假定有n个程序需存放在长度为L的磁带上,每一个程序i有长度li),1<=i<=n,l(1)+l(2)+....+l(n)<=L.假定无论什么时候,检索该带上的某个程序时,带的位置都处于始端。因此,若程序按I=i(1),i(2)...i(n)存放时,则检索时间i(j)的时间t(j)l[i1)]+l[i2)]+...+l[i(j],如果各程序的检索机会相等,则期望检索时间为[t(1)+t(2)+...+t(n)]/n.试给出一个贪心算法,找出n个程序的一种排列,证明当他们按此顺序存放时,能使期望检索时间最少。

算法思想:

最短时间设想:(贪心策略)

因为程序长度和检索该程序的时间成正比,输入个程序后,先按程序长度由小到大序,即程序短的放前面。则由题意的检索方法可知该方法检索时间最短。

算法过程:

1、输入nL[1] L[2] 、… L[n]

2、将L数组从小到大排序。

3、计算出各个程序的从头查找的检索时间T[i]

4、计算出最优存储的平均检索时间 ST

算法证明:

假设排序后的理想最优序列为:A1A2、…、An

则对于检索的平均调度时间为:

ST=(0+A1+(A1+A2)+(A1+A2+A3)+...+(A1+A2+…+An-1)) / n

  =((n-1)A1+(n-2)A2+...+An-1) / n

利用反正法思想

假设存在一个序列B1B2、…、Bn的平均调度时间小于上面的贪心策略时间,则至少存在A1,A2,...,Aj,...,Ai,...An,使得Aj>Ai, j>i

那么(n-i)Aj+(n-j)Ai>(n-i)Ai+(n-j)Aj,

与最优解矛盾,故贪心解为最优解。