基于参考材料,和自己的理解,本文主要整理了在线学习中的竞争性分析,和它的典型例子:page replacement问题。便于自己后续查阅。

说到这里,真的是不得不吐槽国内的算法课以及百度,几乎不教或者没有这方面的中文资料。必须要去google上去找国外lecture的资料和书。由于自己之前其实也没有接触过competitve analysis,所以才想记录一下自己的了解过程。一些基础的概念就不再记录了。

一、Problem Setting

1.1 competitve analysis

竞争分析是指,将在线算法所产生的费用与离线算法(假设所有信息都知道)所产生的费用进行比较和分析。

参考文献【1】是难得的一个用中文描述的资料。胡老师在PPT中介绍:

在线算法(online algorithm)--竞争性分析
这里有一个重要的概念在于:对于任意给定的SS,算法AA产生的cost最多是最优算法OPT的α\alpha倍。

1.2 page replacement

We give a machine with a slow memory that can hold N pages, and a fast memory with k slots. Page requests arrive one at a time, and must be served out of fast memory. If the page is already in fast memory (cache), then a hit occurs, and the operation is free. Otherwise, there is a cache miss, the page is brought into fast memory, and one of the k existing pages in the cache is evicted. The goal is to minimize the number of cache misses over the sequence of page requests.

简单来说,就是有一个页面请求序列,如果序列里的元素在cache中了,那么就算命中,没有开销;如果不在cache里,必须要evict cache中的一个element,设计出一个算法使得整个序列的miss最少。

接下来,我们以这个问题为背景展开介绍。

二、Deterministic Online Algorithms

2.1 deterministic online algorithm

在操作系统课上,已经学过不少的确定性的页面置换算法了。这里做个简单的总结:

  • LIFO(last input first output):”后进新出原则“,将最近一次放入cache中的页面交换出去。
  • LFU (leasy frequency used):“最少调用原则”,交换出去最少被调用的页面。
  • LRU(least recently used): “最近最久未使用原则”,交换出这样一个页面它最近的一次调用是最早产生的。
  • FIFO(first input first out):”先进先出原则“,交换出去在cache中时间最长的页面。

当然,对于离线算法来说,它已经知道了序列的未来,所以就有一个offline 最优的算法(有时候称为MIN),这就是Bedaly在1966年提出的一种算法,选择以后永远不会被访问的页面或者未来最长时间内不再被访问的页面。
有时候,也被称为LFD (longest-forwarded-distance)。关于它是最优算法的证明,可以参考这篇文章。我们这里省略。

2.1.1 LIFO和LFU不是α\alpha-竞争算法

定理2-1:LIFO不是α\alpha-竞争算法

证明:若request序列长度为NN, 为<p,q,p,q,p,q…>,且初始状态q在cache中,p不在cache中。
在线算法(online algorithm)--竞争性分析
因为,For any α\alpha, there exists a sequence of requests such that #misses(FIFO) ≥ α\alpha #misses (LFD)。在上面的分析中,算法的开销为NN,而最优策略是1,因此算法的开销/最优的开销为N,也就是说是无穷大了。

根据竞争分析的定义,存在了一个序列使得 算法的开销/最优的开销 不小于 α\alpha,因此不能用于竞争性分析。

下面来看LFU算法:

在线算法(online algorithm)--竞争性分析
定理2-2:LFU不是α\alpha-竞争算法
证明:如果cache kk=3,元素是a,b,c,则我们可以构造一个序列,即出现mm次a,再出现mm次b,再出现1次d,接着出现1次c,dc这样的组合共出现mm次。
我们可以看到,按照LFU算法,在出现d时,会发生miss替换掉c,接着出现1次c,会发生miss替换掉d。这样就会产生2m2m个miss,而最优算法只会产生1次miss(即第一次出现d时替换掉a即可),因此如果m无穷大,则LFU算法仍然没有bounded。

换句话说,对于LFU算法,也存在了一个序列使得 算法的开销/最优的开销 不小于 α\alpha,因此不能用于竞争性分析。


注:以上2个算法的形式化的证明可以在参考文献【2】中找到。
在线算法(online algorithm)--竞争性分析

2.1.2 LRU和FIFO是kk-竞争算法

定理2-3:LRU是kk-竞争算法

这里其实有两个思路来证明定义2-3。我们以参考文献【2】中的证明来举例:
我们将序列σ\sigma来划分phrase,phrase1以序列的第一个元素开始;phrase i开始是以从阶段i-1开始后,我们看到的第kk个元素开始。从图中就可以看到
在线算法(online algorithm)--竞争性分析
我们可以分析,由于LRU算法的性质,在每一个阶段,最多出现kk次cache miss(不可能出现k+1k+1次,否则不符合阶段的定义了)如果我们可以证明:每一个阶段OPT算法至少会出现1次cache miss。那么竞争ratio就是小于等于kk的。
我们具体分析:如果p2ip_2^ipkip_k^i中没有发现miss,那么在OPT下p1i+1p_1^{i+1}必然要发生miss,因为p2ip_2^ip1i+1p_1^{i+1}已经是kk个不同的元素了,且此时p1ip_1^i已经在cache中了,而cache只有kk个位置;
如果在OPT下p2ip_2^ipkip_k^i中发现miss,那更说明了每一轮最少发生1次miss了。
在线算法(online algorithm)--竞争性分析
当然还有另外一种证明的思路,参考文献【3】和【1】。它划分阶段的方式不一样。但是在【3】中,它提供了一个引理,如果我们可以证明出引理,实际也就证明了定理。

它划分阶段如下:
在线算法(online algorithm)--竞争性分析
接着提出一个引理并证明:这个引理是如果P(i)P(i)中含有kk个不同的且不用于上个阶段最后一个页面pp的页面,那么其实就说明OPT下必然至少发生一次miss(因为这样就有k+1k+1个不同的页面了),而由于我们阶段划分已经保证了每个阶段在LRU下发生kk次miss,所以实际就证明了LRU是kk-竞争算法。

证明引理的过程如下:如果在P(i)P(i)kk个miss是由于1个页面qq引起了2次,也就是说并非是kk个不同的页面引起的kk个miss,那么实际上这是不可能的事情。
在线算法(online algorithm)--竞争性分析
在参考文献【1】中用中文已经举出了这个例子。这里的pp就是我们上面的说的qq

在线算法(online algorithm)--竞争性分析
FIFO的证明类似。我们这里不再证明。

2.2 deterministic online algorithm的竞争比是Ω(k)\Omega(k)

这个定理的含义是,对于任意的确定性在线算法,它的竞争比至少是kk。换句话说,不可能再有一个在线的确定性算法的竞争比 比kk好了,其中kk是cache的size。

证明,参考文献【2】即可。
不妨假设ALG是某一确定性算法;假设序列长度N>kN > k,且目前的cache内容就是1,2,3,直到k。假设序列里的内容是1,2,3,k,k+1共k+1个不同的值。那么,对于一个adversary来讲,自然可以把序列变成使得ALG在每个request来的时候都发生miss,这时候ALG的miss是NN次。
对于OPT算法来说,一旦发生一个miss,则意味着它逐出的页面将在至少k个其他请求之后被请求,这是肯定的,因为MIN算法已经保证了这一点,即它逐出的永远都是最晚到来的,当发生下一次的miss的时候,最快也是第k+1个,这就意味着OPT每次发生miss的时候,ALG最少发生k次,也就是说竞争比至少为k,即Ω(k)\Omega(k)

在线算法(online algorithm)--竞争性分析在线算法(online algorithm)--竞争性分析
上述的结果其实也扩充了,即如果online算法和offline算法的内存大小不一样,也产生产生类似的结果。证明过程可以参考文献【4】.


在这里,我对竞争性分析和符号Ω\Omega的关系总结一下,迷惑点在于竞争性分析是≤符号,即算法损失/最优损失 小于等于 一个值,代表了一个最坏的情况(worst-analysis),不管你找什么样的序列,我的算法最烂的损失也就是在这种情况下最优算法的α\alpha倍。而Ω\Omega是大于等于,代表了最优情况,是一个下限,再加上竞争比肯定是越小越好,所以对于一个算法来说Ω(logn)\Omega(log n)要好于Ω(n)\Omega(n)

如果我们说一个算法的竞争比为Ω(k)\Omega(k),这意味着这个算法的竞争比的下限为kk,即属于这类算法的竞争比会大于等于kk, 但最好也不过是kk了。我们可以回想确定性算法LIFO和LFU都没有竞争比(即无穷大,没有Bounded),而确定性算法LRU和FIFO是kk竞争,是有bounded的。

这时候如果我们有另一类算法的竞争比是Ω(logn)\Omega(log n),那么它的下限是优于上面的算法的下限的。

三、Randomised Online Algorithms

3.1 Marker Algorithm

Marker算法是最经典的随机在线算法。它的过程如下:
Classic Marker algorithm: The algorithm runs in phases. At the beginning of each phase, all elements are unmarked. When an element arrives and is already in the cache, the element is marked. If it is not in the cache, a random unmarked element is evicted, the newly arrived element is placed in the cache and is marked. Once all elements are marked, the phase ends and we unmark all of the elements. In other word, each phase ends as soon as kk distinct elements appear.

伪代码如下:

在线算法(online algorithm)--竞争性分析

举一个例子:

在线算法(online algorithm)--竞争性分析
在线算法(online algorithm)--竞争性分析
在线算法(online algorithm)--竞争性分析
在线算法(online algorithm)--竞争性分析
也就是加了一个对于cache中的每一个元素,加了一个marker位。然后分阶段进行分析。

在算法中,还有2个概念非常重要即clean元素和stale元素,它们的定义如下:
For the purposes of analysis, an element is called clean in phase rr if it appears during phase rr,
but does not appear during phase r1r-1. In contrast, elements that also appeared in the previous
phase are called stale.

也就是说,clean元素是上一个阶段没有,而这个阶段有的;而stale元素上个阶段有,这个阶段也有。
所以很显然,clean元素是必然会引起miss的。

接下来我们证明一些mark算法的性质。

3.2

我们先定义无穷级数
Hk=1+1/2+1/3++1/k=O(logk)H_k= 1+1/2+1/3+…+1/k = O(log k)

3.3

3.4

随机的竞争比是Ω(logk)\Omega(log k)

参考文献

【1】 运筹学_在线算法(中科院胡晓东)

【2】CS787: Advanced Algorithms:Topic: Caching Algorithms

【3】Competitive Online Algorithms: Susanne Albers

【4】Stanford University — CS261: Optimization

相关文章: