每日一题(90) - 磁带文件存放优化

来源:互联网 发布:网络春晚串词 编辑:程序博客网 时间:2024/05/16 10:17

题目和思路均来自编程之美

题目:

磁带上有n个文件,长度分别为L[0],L[1], ..., L[n-1]且被访问的概率分别为P[0],P[1],...,P[n-1]。要访问磁带上第n个文件,须要依次经过前面n-1个文件。分别给出三种情况,求如何安排文件在磁带上的存储顺序,使得访问这些文件所需经过的平均磁带长度最短?

<1> 每一个文件被访问的概率相等,但文件长度不同,求所有文件的存储顺序。

<2> 每一个文件被访问的概率不等,但文件长度相同,求所有文件的存储顺序。

<3> 每一个文件被访问的概率不等,且文件长度也不同,求所有文件的存储顺序。

----------------------

问题 <1> 假设每一个文件被访问的概率相等,但文件长度不同求所有文件的存储顺序,使得访问这些文件所需经过的平均磁带长度最短?

解答:根据题意,求出访问所有文件经过平均磁带长度的期望:


分析:

根据式子2可得出访问所有文件经过平均磁带长度 = p{n*L[0] + (n - 1)*L[1] + ... + L(n - 1)}

我们的目的是要求E(L)最小,即 n*L[0] + (n - 1)*L[1] + ... + L(n - 1) 最小。

观察式子可知,当L[0] <= L[1] <= L[2] <= ... <= L[n - 1]时,E(L)最小。

即,这些文件按照文件长度由短到长存储到磁带上时,访问所有文件经过平均磁带长度,可得到最佳访问效率

问题 <2> 假设每一个文件被访问的概率不等,但文件长度相同求所有文件的存储顺序,使得访问这些文件所需经过的平均磁带长度最短?

解答:根据题意,求出访问所有文件经过平均磁带长度的期望:


假设每一个文件长度为L,则根据式子1展开可得:

E(L) = p[0] * L[0] + p[1] * (L[0] + L[1]) + .. + p[n - 1] * (L[0]..+ L[n - 1])

=  L(p[0] + 2 * p[1] + 3 * p[2] +...+ n * p[n - 1])

分析该式子可得,我们的目的是要求E(L)最小,即 L(p[0] + 2 * p[1] + ...+ n * p[n - 1]) 最小。

观察式子可知,当p[0] >= p[1] >= p[2] >= ... >= p[n - 1]时,E(L)最小。

即,这些文件按照访问概率由大到小存储到磁带上时,访问所有文件经过平均磁带长度,可得到最佳访问效率

问题 <3> 假设每一个文件被访问的概率不等,且文件长度也不同求所有文件的存储顺序,使得访问这些文件所需经过的平均磁带长度最短?

答案参考网络。

假设我们已经根据某种排序方式获得经过平均磁带长度最短的序列,且第i个文件的长度和访问概率分别为L[i],p[i],第i+1个文件的长度和访问概率分别为L[i+1],p[i+1]。

如果我们交换第i和第i+1个文件,则交换后经过平均磁带长度会增加。

由于我们只交换第i和i+1个文件,那么交换前后访问其他文件经过的平均磁带长度不变。

对于交换后,访问第i个元素,增加的代价为p[i] * L[i + 1];

访问第i + 1个元素,减少的代价为p[i + 1] * L[i].

由于交换前的序列代价最小,则交换后的序列代价会大于或等于交换前的代价。

则可得出交换后增加的代价 大于或等于 减少的代价。

则 p[i] * L[i + 1] >= p[i + 1] * L[i];

则 p[i] / L[i] >= L[i + 1] / p[i + 1];

根据上面的式子可知,达到最优访问效率的文件顺序是按照P[i]/L[i] 按降序排列的

说明:对于问题三,给出的方法不是严格的证明,这里仅仅给出交换相邻两个数的情况,其实应该考虑交换任意两个数的情况。可是俺不会证。哎。


原创粉丝点击