文章目录
基于参考材料,和自己的理解,本文主要整理了在线学习中的竞争性分析,和它的典型例子:page replacement问题。便于自己后续查阅。
说到这里,真的是不得不吐槽国内的算法课以及百度,几乎不教或者没有这方面的中文资料。必须要去google上去找国外lecture的资料和书。由于自己之前其实也没有接触过competitve analysis,所以才想记录一下自己的了解过程。一些基础的概念就不再记录了。
一、Problem Setting
1.1 competitve analysis
竞争分析是指,将在线算法所产生的费用与离线算法(假设所有信息都知道)所产生的费用进行比较和分析。
参考文献【1】是难得的一个用中文描述的资料。胡老师在PPT中介绍:
这里有一个重要的概念在于:对于任意给定的,算法产生的cost最多是最优算法OPT的倍。
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不是-竞争算法
定理2-1:LIFO不是-竞争算法。
证明:若request序列长度为, 为<p,q,p,q,p,q…>,且初始状态q在cache中,p不在cache中。
因为,For any , there exists a sequence of requests such that #misses(FIFO) ≥ #misses (LFD)。在上面的分析中,算法的开销为,而最优策略是1,因此算法的开销/最优的开销为N,也就是说是无穷大了。
根据竞争分析的定义,存在了一个序列使得 算法的开销/最优的开销 不小于 ,因此不能用于竞争性分析。
下面来看LFU算法:
定理2-2:LFU不是-竞争算法
证明:如果cache =3,元素是a,b,c,则我们可以构造一个序列,即出现次a,再出现次b,再出现1次d,接着出现1次c,dc这样的组合共出现次。
我们可以看到,按照LFU算法,在出现d时,会发生miss替换掉c,接着出现1次c,会发生miss替换掉d。这样就会产生个miss,而最优算法只会产生1次miss(即第一次出现d时替换掉a即可),因此如果m无穷大,则LFU算法仍然没有bounded。
换句话说,对于LFU算法,也存在了一个序列使得 算法的开销/最优的开销 不小于 ,因此不能用于竞争性分析。
注:以上2个算法的形式化的证明可以在参考文献【2】中找到。
2.1.2 LRU和FIFO是-竞争算法
定理2-3:LRU是-竞争算法
这里其实有两个思路来证明定义2-3。我们以参考文献【2】中的证明来举例:
我们将序列来划分phrase,phrase1以序列的第一个元素开始;phrase i开始是以从阶段i-1开始后,我们看到的第个元素开始。从图中就可以看到
我们可以分析,由于LRU算法的性质,在每一个阶段,最多出现次cache miss(不可能出现次,否则不符合阶段的定义了)如果我们可以证明:每一个阶段OPT算法至少会出现1次cache miss。那么竞争ratio就是小于等于的。
我们具体分析:如果到中没有发现miss,那么在OPT下必然要发生miss,因为到已经是个不同的元素了,且此时已经在cache中了,而cache只有个位置;
如果在OPT下到中发现miss,那更说明了每一轮最少发生1次miss了。
当然还有另外一种证明的思路,参考文献【3】和【1】。它划分阶段的方式不一样。但是在【3】中,它提供了一个引理,如果我们可以证明出引理,实际也就证明了定理。
它划分阶段如下:
接着提出一个引理并证明:这个引理是如果中含有个不同的且不用于上个阶段最后一个页面的页面,那么其实就说明OPT下必然至少发生一次miss(因为这样就有个不同的页面了),而由于我们阶段划分已经保证了每个阶段在LRU下发生次miss,所以实际就证明了LRU是-竞争算法。
证明引理的过程如下:如果在中个miss是由于1个页面引起了2次,也就是说并非是个不同的页面引起的个miss,那么实际上这是不可能的事情。
在参考文献【1】中用中文已经举出了这个例子。这里的就是我们上面的说的。
FIFO的证明类似。我们这里不再证明。
2.2 deterministic online algorithm的竞争比是
这个定理的含义是,对于任意的确定性在线算法,它的竞争比至少是。换句话说,不可能再有一个在线的确定性算法的竞争比 比好了,其中是cache的size。
证明,参考文献【2】即可。
不妨假设ALG是某一确定性算法;假设序列长度,且目前的cache内容就是1,2,3,直到k。假设序列里的内容是1,2,3,k,k+1共k+1个不同的值。那么,对于一个adversary来讲,自然可以把序列变成使得ALG在每个request来的时候都发生miss,这时候ALG的miss是次。
对于OPT算法来说,一旦发生一个miss,则意味着它逐出的页面将在至少k个其他请求之后被请求,这是肯定的,因为MIN算法已经保证了这一点,即它逐出的永远都是最晚到来的,当发生下一次的miss的时候,最快也是第k+1个,这就意味着OPT每次发生miss的时候,ALG最少发生k次,也就是说竞争比至少为k,即。
上述的结果其实也扩充了,即如果online算法和offline算法的内存大小不一样,也产生产生类似的结果。证明过程可以参考文献【4】.
在这里,我对竞争性分析和符号的关系总结一下,迷惑点在于竞争性分析是≤符号,即算法损失/最优损失 小于等于 一个值,代表了一个最坏的情况(worst-analysis),不管你找什么样的序列,我的算法最烂的损失也就是在这种情况下最优算法的倍。而是大于等于,代表了最优情况,是一个下限,再加上竞争比肯定是越小越好,所以对于一个算法来说要好于。
如果我们说一个算法的竞争比为,这意味着这个算法的竞争比的下限为,即属于这类算法的竞争比会大于等于, 但最好也不过是了。我们可以回想确定性算法LIFO和LFU都没有竞争比(即无穷大,没有Bounded),而确定性算法LRU和FIFO是竞争,是有bounded的。
这时候如果我们有另一类算法的竞争比是,那么它的下限是优于上面的算法的下限的。
三、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 distinct elements appear.
伪代码如下:
举一个例子:
也就是加了一个对于cache中的每一个元素,加了一个marker位。然后分阶段进行分析。
在算法中,还有2个概念非常重要即clean元素和stale元素,它们的定义如下:
For the purposes of analysis, an element is called clean in phase if it appears during phase ,
but does not appear during phase . In contrast, elements that also appeared in the previous
phase are called stale.
也就是说,clean元素是上一个阶段没有,而这个阶段有的;而stale元素上个阶段有,这个阶段也有。
所以很显然,clean元素是必然会引起miss的。
接下来我们证明一些mark算法的性质。
3.2
我们先定义无穷级数
3.3
3.4
随机的竞争比是
参考文献
【1】 运筹学_在线算法(中科院胡晓东)
【2】CS787: Advanced Algorithms:Topic: Caching Algorithms
【3】Competitive Online Algorithms: Susanne Albers
【4】Stanford University — CS261: Optimization