首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

贪心有关问题请问

2012-03-04 
贪心问题请教假定要将长为l1,l2,l3.....ln的n个程序存入一盘磁带,程序i被检索的频率是fi,如果程序按i1,i2,

贪心问题请教
假定要将长为l1,l2,l3.....ln的n个程序存入一盘磁带,程序i被检索的频率是fi,如果程序按i1,i2,i3....in的次序存放,则期望的检索时间是:
  j
  [E(f(i(j))E l(i(k))]/E fi
  j k=1
  注:E代表累加,f(i(j)))中的括号是代表下标的...就象l1,l2的1 2..
  证明:按fi/li的非增次序来存放程序时得到ERT的最小值..


  各位大虾给个贪心的思路..谢谢了

[解决办法]
大体思路是:假定有一个最优解,通过把最优解逐步变为贪心解,并且每一步都不会提高检索时间。

具体证明:
假定有一个最优解不同于贪心解,那么可以证明在最优解中,必然存在着1<=i<=n,使得fi/li < f(i+1)/l(i+1)
把i和i+1互换,不会影响到i之前,也不会影响到i+1之后
所以把i和i+1互换前后检索时间之差={fi*li + f(i+1)*[li+l(i+1)]} - {f(i+1)*l(i+1) + fi*[li+l(i+1)]} = f(i+1)*li - fi*l(i+1) > 0
所以互换前后降低了检索时间,最优解仍然是最优解。

最多只需要n*n/2次互换可以把一个最优解换成贪心解,所以问题解决。

热点排行