星形搜索问题
问题描述
和之前的线性搜索问题类似地,你是一头想要吃草的牛,但是道路变成了 w w w叉路口,某一条道路在距离 n n n处有一个草场。牛不知道是哪一条道路,也不知道 n n n。
确定性算法
- 输入:道路的数量 w w w
- 输出:哪一条道路和距起始点的距离
- 初始化 i = 1 i=1 i=1
- 重复一下过程:
- d = ( w w − 1 ) i d=\left(\frac w{w-1}\right)^i d=(w−1w)i
- 朝着第 i m o d w i\mod w imodw的道路方向走距离 d d d,如果找到了就返回;如果没找到,则回到起始点,并更新 i ← i + 1 i\larr i+1 i←i+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⋅(w−1)(w−1)ww
和之前的线性搜索类似,使用对手策略。假设草场的位置就在第 j j j次尝试的正前方,也就有:
O P T = ( w w − 1 ) j + δ \mathrm{OPT}=\left(\frac{w}{w-1}\right)^j+\delta OPT=(w−1w)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} (w−1w)j≤OPT≤(w−1w)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} ALG≤w[w−1w−(w−1w)j+w](1−w)+OPT=2[−w+(w−1)j+w−1wj+w]+OPT≤2[(w−1)w−1ww⋅(w−1w)j]+OPT≤[1+2(w−1)w−1ww]⋅OPT
因此竞争比就是 1 + 2 w w ( w − 1 ) w − 1 1+2\frac{w^w}{(w-1)^{w-1}} 1+2(w−1)w−1ww
电梯问题
问题描述
上楼。坐电梯要花费 E E E的时间,而走楼梯要花费 S S S的时间。电梯什么时候来并不确定。什么决策可以有最好的竞争比?
算法
- 输入: E E E和 S S S
- 输出:等待策略
- 等待
S
−
E
S-E
S−E的时间:
- 如果电梯来了,就坐电梯,那么得到的就是最优解。
- 如果电梯没来,就走楼梯,花费 2 S − E 2S-E 2S−E的时间(不是最优解)
竞争比
竞争比为 2 − E S 2-\frac ES 2−SE。
记 T T T是电梯到来的时间。
当 T ≤ S − E T\le S-E T≤S−E,那么有 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>S−E,那么有 O P T = S \mathrm{OPT}=S OPT=S以及 A L G = 2 S − E \mathrm{ALG}=2S-E ALG=2S−E,竞争比显然就是 2 S − E S = 2 − E S \frac{2S-E}{S}=2-\frac ES S2S−E=2−SE
不可能有比 2 − E S 2-\frac ES 2−SE更小的竞争比。
对于任意一个确定的算法,记其等待的时间是 W W W。
当 W ≤ S − E W\le S-E W≤S−E,对 T T T进行以下的分类讨论:
T <= W | W < T < S-E | T >= S-E | |
---|---|---|---|
ALG | T+E | W+S | W+S |
OPT | T+E | T+E | S |
其中 W + S T + E ≥ W + S T + E \frac{W+S}{T+E}\ge \frac{W+S}{T+E} T+EW+S≥T+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+S≥S(S−E)+S
(糖水定理,分子分母同时加了 S − E S-E S−E)
当 W > S − E W>S-E W>S−E,那么对 T T T进行分类讨论:
T <= S-E | S-E < T < W | T >= W | |
---|---|---|---|
ALG | T+E | T+E | W+S |
OPT | T+E | S | S |
显然最大的是 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+S≥S(S−E)+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的值)
- 输出:进行兑换的日期
- 初始化 p ∗ = U ⋅ L p^*=\sqrt{U\cdot L} p∗=U⋅L
- 对于每一天
j
≤
n
j\le n
j≤n重复:
- p j p_j pj被公布
- 如果 j < n j<n j<n且 p j ≥ p ∗ p_j\ge p^* pj≥p∗;或者 j = n j=n j=n,就在这一天全部兑换
竞争比
记 ϕ = U L \phi=\frac UL ϕ=LU,竞争比是 ϕ \sqrt \phi ϕ。
考虑两种情况:
- 没有任何一天的汇率大于
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=ϕ - 存在某一天
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=pj′maxjpj<ULU=ϕ
n n n已知的变种
即使 n n n已知,确定性算法的竞争比也不会小于 ϕ \sqrt\phi ϕ。
∀ i ∈ [ 1 , n − 1 ] \forall i\in[1,n-1] ∀i∈[1,n−1],令 p i = U L p_i=\sqrt{UL} pi=UL,而 p n p_n pn用于对手策略之后决定。
- 如果该确定性算法决定在第 n n n天之前进行交易,那么就让 p n = U p_n=U pn=U,竞争比就是 U U L = ϕ \frac{U}{\sqrt{UL}}=\sqrt\phi ULU=ϕ
- 如果该确定性算法决定在第 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,n−1],令 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=ϕ1⋅c。