zoukankan      html  css  js  c++  java
  • 译:滑雪租赁问题(ski rental problem)

         本文翻译自维基百科词条:http://en.wikipedia.org/wiki/Ski_rental_problem
      滑雪租赁问题(ski rental problem)是一类问题的总称,指在持续重复花费和消除或减少重复花费后一次性付清两种策略间做出选择。
         问题阐述:
         许多在线问题(online problems)有名为租/买问题的子问题。我们需要在保持现有每隔一段时间付一定费用,或利用若干次固定大规模付费一次付清两种情况下做出选择。滑雪租赁就是一个经典的小例子,租/买即是整个问题。它的基本版本如下:
         你要去滑雪,但天数未知(各种原因使你不能确定准确时间,比如,丧失兴趣、摔坏腿或恶劣的天气)。假设滑雪板的租赁价格是每天1美金,购买滑雪板的花费是10美金。每天你都需要在将滑雪板再租一天和购买一副新的滑雪板之间做出决策。如果你事先知道你会去滑雪多少天,你就能决定你的最少花费。滑雪少于10天,租赁划算;多于十天,当然买滑雪板更划算;如果刚好十天,那或租或买都无所谓。这个问题就是,当你事先不知道你要滑雪多少天时怎么办。
         这个问题能以如下的方式正式建立。你将会去滑雪,滑雪天数d未知。我们现在寻找一种算法,使你不知道d时使用这种算法和你事先知道d时选取的最优方案之间的花费比率最低。这个问题普遍在最坏情况下分析,即算法是固定的我们寻找所有可能d值在最坏情况下的性能。尤其是,没有针对d的分布的假设(很显然,根据d分布情况,会选择不同分析和不同的方案)。
         收支平衡算法(the break-even algorithm):
         收支平衡算法会指导你头9天租赁,如果第十天继续滑雪,那么购买滑雪板。如果你在头9天过程中终止滑雪,那么你的花费和你事先知道你滑雪天数的花费相同。如果你刚好滑雪10天后停止,你的花费是19美金,比你事先知道滑雪天数的花费多出了90%。这是收支平衡算法的最坏情况。收支平衡算法是针对此问题已知的最好的确定性算法。
         你能比收支平衡算法做得更好吗?
         当然。比如,你能抛硬币决定。如果硬币正面朝上,你在第8天购买滑雪板,否则,在第10天购买。这是一个随机化算法的例子。显而易见,在不考虑滑雪天数情况下,总花费的期望最多比你事先知道滑雪天数多80%。如果你滑雪10天,你的花费的期望值是1/2 [7 +10] + 1/2 [9+10] = 18 美金,比起前面的90%来仅为80%。
         相应于无视对手(oblivious adversary)的最好的随机化算法是根据下面的分布p随机选择天数i,租赁i-1天,若第i天继续滑雪则购买滑雪板。Karlin等人首先提出了这个算法的分布 
p_i = left {
egin{array}{ll}
(frac{b-1}{b})^{b-i} frac{1}{b(1-(1-(1/b))^b)} & i leq b \ 
0 & i > b
end{array} 
ight . ,
 其中购买滑雪板花费b美金然后每天的租赁价格是1美金。它得出的花费期望值仅为事先知道滑雪时间的e/(e-1)≈ 1.58倍。没有随机化算法能做到更好。
         应用:
         Snoopy caching
         TCP确认
         总竞争时间调度
  • 相关阅读:
    样式表中!important的用法
    ORA27101: shared memory realm does not exist问题的解决
    重置标识列的当前值
    ASP.NET Oracle数据库使用事务时注意事项
    Oracle中约束的添加方法总结
    HTML段落自动换行的样式设置
    ASP.NET应用程序中的服务器错误
    oracle中的rownum、order by与分页
    position:relative与float的区别
    Moss/Sharepoint 备份或还原时出错的处理(持续更新)
  • 原文地址:https://www.cnblogs.com/qiyukun/p/3418566.html
Copyright © 2011-2022 走看看