在线算法2:classic

星形搜索问题

问题描述

和之前的线性搜索问题类似地,你是一头想要吃草的牛,但是道路变成了 w w w叉路口,某一条道路在距离 n n n处有一个草场。牛不知道是哪一条道路,也不知道 n n n

确定性算法

  • 输入:道路的数量 w w w
  • 输出:哪一条道路和距起始点的距离
  1. 初始化 i = 1 i=1 i=1
  2. 重复一下过程:
    1. d = ( w w − 1 ) i d=\left(\frac w{w-1}\right)^i d=(w1w)i
    2. 朝着第 i m o d    w i\mod w imodw的道路方向走距离 d d d,如果找到了就返回;如果没找到,则回到起始点,并更新 i ← i + 1 i\larr i+1 ii+1

(其实线性搜索每一次翻倍,就是这个星形搜索的一个特例。即当 w = 2 w=2 w=2,就有 w w = 1 = 2 \frac{w}{w=1}=2 w=1w=2

竞争比证明

竞争比是 1 + 2 ⋅ w w ( w − 1 ) ( w − 1 ) 1+2\cdot\frac{w^w}{(w-1)^(w-1)} 1+2(w1)(w1)ww

和之前的线性搜索类似,使用对手策略。假设草场的位置就在第 j j j次尝试的正前方,也就有:

O P T = ( w w − 1 ) j + δ \mathrm{OPT}=\left(\frac{w}{w-1}\right)^j+\delta OPT=(w1w)j+δ

考虑到 ( w w − 1 ) j ≤ O P T ≤ ( w w − 1 ) j + 1 \left(\frac{w}{w-1}\right)^j\le \mathrm{OPT}\le \left(\frac{w}{w-1}\right)^{j+1} (w1w)jOPT(w1w)j+1,这就意味着目标最多在第 ( j + w ) (j+w) (j+w)次迭代被发现(也就是又轮了一圈)

因此就有:

A L G ≤ w [ w w − 1 − ( w w − 1 ) j + w ] ( 1 − w ) + O P T = 2 [ − w + w j + w ( w − 1 ) j + w − 1 ] + O P T ≤ 2 [ w w ( w − 1 ) w − 1 ⋅ ( w w − 1 ) j ] + O P T ≤ [ 1 + 2 w w ( w − 1 ) w − 1 ] ⋅ O P T \begin{aligned} \mathrm{ALG}&\le w\left[\frac{w}{w-1}-\left(\frac{w}{w-1}\right)^{j+w}\right](1-w)+\mathrm{OPT}\\ &=2\left[-w+\frac{w^{j+w}}{(w-1)^{j+w-1}}\right]+\mathrm{OPT}\\ &\le 2\left[\frac{w^w}{(w-1)^{w-1}}\cdot\left(\frac{w}{w-1}\right)^j\right]+\mathrm{OPT}\\ &\le \left[1+2\frac{w^w}{(w-1)^{w-1}}\right]\cdot \mathrm{OPT} \end{aligned} ALGw[w1w(w1w)j+w](1w)+OPT=2[w+(w1)j+w1wj+w]+OPT2[(w1)w1ww(w1w)j]+OPT[1+2(w1)w1ww]OPT

因此竞争比就是 1 + 2 w w ( w − 1 ) w − 1 1+2\frac{w^w}{(w-1)^{w-1}} 1+2(w1)w1ww

电梯问题

问题描述

上楼。坐电梯要花费 E E E的时间,而走楼梯要花费 S S S的时间。电梯什么时候来并不确定。什么决策可以有最好的竞争比?

算法

  • 输入: E E E S S S
  • 输出:等待策略
  1. 等待 S − E S-E SE的时间:
    1. 如果电梯来了,就坐电梯,那么得到的就是最优解。
    2. 如果电梯没来,就走楼梯,花费 2 S − E 2S-E 2SE的时间(不是最优解)

竞争比

竞争比为 2 − E S 2-\frac ES 2SE


T T T是电梯到来的时间。

T ≤ S − E T\le S-E TSE,那么有 O P T = A L G = T + E \mathrm{OPT}=\mathrm{ALG}=T+E OPT=ALG=T+E

T > S − E T>S-E T>SE,那么有 O P T = S \mathrm{OPT}=S OPT=S以及 A L G = 2 S − E \mathrm{ALG}=2S-E ALG=2SE,竞争比显然就是 2 S − E S = 2 − E S \frac{2S-E}{S}=2-\frac ES S2SE=2SE


不可能有比 2 − E S 2-\frac ES 2SE更小的竞争比。

对于任意一个确定的算法,记其等待的时间是 W W W

W ≤ S − E W\le S-E WSE,对 T T T进行以下的分类讨论:

T <= WW < T < S-ET >= S-E
ALGT+EW+SW+S
OPTT+ET+ES

其中 W + S T + E ≥ W + S T + E \frac{W+S}{T+E}\ge \frac{W+S}{T+E} T+EW+ST+EW+S是显然的,而 W + S T + E \frac{W+S}{T+E} T+EW+S T = W T=W T=W时取得最大值,故竞争比为 W + S W + E \frac{W+S}{W+E} W+EW+S

而该竞争比和最优竞争比的关系如下:
W + S W + E ≥ ( S − E ) + S S \frac{W+S}{W+E}\ge \frac{(S-E)+S}{S} W+EW+SS(SE)+S

(糖水定理,分子分母同时加了 S − E S-E SE

W > S − E W>S-E W>SE,那么对 T T T进行分类讨论:

T <= S-ES-E < T < WT >= W
ALGT+ET+EW+S
OPTT+ESS

显然最大的是 W + S S \frac{W+S}{S} SW+S

该竞争比和最优竞争比的关系如下:
W + S S ≥ ( S − E ) + S S \frac{W+S}{S}\ge \frac{(S-E)+S}{S} SW+SS(SE)+S

(直接代入即可)

货币兑换问题

问题描述

人民币对美元的汇率是在第 j j j天为 p j p_j pj,其中 j ∈ [ 1 , n ] j\in[1,n] j[1,n]。在第 n n n天会停止交易,如果还有没有兑换的人民币,就必须全部兑换。目标是使得兑换的美元最多,那么应该在那一天兑换呢?

假设已知人民币对美元的汇率的上界和下界 U U U L L L,即对于 j ∈ [ 1 , n ] j\in[1,n] j[1,n],有 L < p j < U L<p_j<U L<pj<U

算法

  • 输入: U U U L L L和最后一天 n n n(在最后一天到来之前都不知道 n n n的值)
  • 输出:进行兑换的日期
  1. 初始化 p ∗ = U ⋅ L p^*=\sqrt{U\cdot L} p=UL
  2. 对于每一天 j ≤ n j\le n jn重复:
    1. p j p_j pj被公布
    2. 如果 j < n j<n j<n p j ≥ p ∗ p_j\ge p^* pjp;或者 j = n j=n j=n,就在这一天全部兑换

竞争比

ϕ = U L \phi=\frac UL ϕ=LU,竞争比是 ϕ \sqrt \phi ϕ


考虑两种情况:

  1. 没有任何一天的汇率大于 p ∗ p^* p,因此在线算法会按照 p n p_n pn全部兑换,而最优算法会按照 max ⁡ j p j \max_jp_j maxjpj进行兑换。
    p n > L p_n>L pn>L max ⁡ j p j < U L \max_jp_j<\sqrt{UL} maxjpj<UL ,故有竞争比:
    O P T A L G = max ⁡ j p j p n < U L L = ϕ \frac{\mathrm{OPT}}{\mathrm{ALG}}=\frac{\max_jp_j}{p_n}<\frac{\sqrt{UL}}{L}=\sqrt{\phi} ALGOPT=pnmaxjpj<LUL =ϕ
  2. 存在某一天 p j > p ∗ p_j>p^* pj>p,记第一个为 p j ′ p_{j'} pj。因此在线算法会按照 p j ′ > U L p_{j'}>\sqrt{UL} pj>UL 全部兑换,而最优算法会按照 max ⁡ j p j < U \max_jp_j<U maxjpj<U进行兑换,因此有竞争比:
    O P T A L G = max ⁡ j p j p j ′ < U U L = ϕ \frac{\mathrm{OPT}}{\mathrm{ALG}}=\frac{\max_jp_j}{p_{j'}}<\frac{U}{\sqrt{UL}}=\sqrt{\phi} ALGOPT=pjmaxjpj<UL U=ϕ

n n n已知的变种

即使 n n n已知,确定性算法的竞争比也不会小于 ϕ \sqrt\phi ϕ


∀ i ∈ [ 1 , n − 1 ] \forall i\in[1,n-1] i[1,n1],令 p i = U L p_i=\sqrt{UL} pi=UL ,而 p n p_n pn用于对手策略之后决定。

  1. 如果该确定性算法决定在第 n n n天之前进行交易,那么就让 p n = U p_n=U pn=U,竞争比就是 U U L = ϕ \frac{U}{\sqrt{UL}}=\sqrt\phi UL U=ϕ
  2. 如果该确定性算法决定在第 n n n天进行交易,那么就让 p n = L p_n=L pn=L,竞争比就是 U L L = ϕ \frac{\sqrt{UL}}{L}=\sqrt\phi LUL =ϕ

只知道 ϕ \phi ϕ的变种

如果不是知道 U U U L L L的具体值,而只是知道其比值 ϕ \phi ϕ,那么竞争比至少是 ϕ \phi ϕ


和上面的类似, ∀ i ∈ [ 1 , n − 1 ] \forall i\in[1,n-1] i[1,n1],令 p i = c p_i=c pi=c(任意一个常量),而 p n p_n pn用于对手策略。如果在线算法并不在第 n n n天进行交易,那么就令 p n = ϕ ⋅ c p_n=\phi \cdot c pn=ϕc;如果在线算法在第 n n n天进行交易,那么就令 p n = 1 ϕ ⋅ c p_n=\frac{1}{\phi}\cdot c pn=ϕ1c

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值