04.09.2013 Views

Algorithm Design

Algorithm Design

Algorithm Design

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

754<br />

Chapter 13 Randomized <strong>Algorithm</strong>s<br />

phase, from the marking algorithm’s point of view. At the beginning of the<br />

phase, all items are unmarked. Any item that is accessed during the phase is<br />

marked, and it then remains in the cache for the remainder of the phase. Over<br />

the course of the phase, the number of marked items grows from 0 to k, and<br />

the next phase begins with a request to a (k + 1) st item, different from all of<br />

these marked items. We summarize some conclusions from this picture in the<br />

following claim.<br />

(13.35) In each phase, a contains accesses to exactly k distinct items. The<br />

subsequent phase begins with an access to a different (k + !) st item.<br />

Since an item, once marked, remains in the cache until the end of the<br />

phase, the marking algorithm cannot incur a miss for an item more than once in<br />

a phase. Combined with (!3.35), this gives us an upper bound on the number<br />

of misses incurred by the marking algorithm.<br />

(13.36) The marking algorithm incurs at most k misses per phase, for a total<br />

of at most kr misses over all r phases.<br />

As a lower bound on the optimum, we have the following fact.<br />

(13.37) The optimum incurs at least r - 1 misses. In other words, "f(a) >_<br />

Proof. Consider any phase but the last one, and look at the situation just<br />

after the first access (to an item s) in this phase. Currently s is in the cache<br />

maintained by the optimal algorithm, and (13.55) tells us that the remainder<br />

of the phase will involve accesses to k - 1 other distinct items, and the first<br />

access of the next phase will involve a k th other item as well. Let S be this<br />

set of k items other than s. We note that at least one of the members of S is<br />

not currently in the cache maintained by the optimal algorithm (since, with s<br />

there, it only has room for k - 1 other items), and the optimal algorithm will<br />

incur a miss the first time this item is accessed.<br />

What we’ve shown, therefore, is that for every phase ) < r, the sequence<br />

from the second access in phase) through the first access in phase) + 1 involves<br />

at least one miss by the optimum. This makes for a total of at least r - 1 misses.<br />

Combining (13.36) and (13.37), we have the following performance guarantee.<br />

(13.38) For any marking algorithm, the number of misses it incurs on any<br />

sequence a is at most k. f(a) + k,<br />

13.8 Randomized Caching<br />

Proof. The number of misses incurred by the marking algorithm is at most<br />

kr = k(r - !) + k < k. f(~r) + k,<br />

where the final inequality is just (13.37). []<br />

Note that the "+k" in the bound of (13.38) is just an additive constant,<br />

independent of the length of the request sequence or, and so the key aspect<br />

of the bound is the factor of k relative to the optimum. To see that this factor<br />

of k is the best bound possible for some marking algorithms, and for LRU in<br />

particular, consider the behavior of LRU on a request sequence in which k + 1<br />

items are repeatedly requested in a round-robin fashion. LRU will each time<br />

evict the item that will be needed iust in the next step, and hence it will incur<br />

a cache miss on each access. (It’s possible to get this kind of terrible caching<br />

performance in practice for precisely such a reason: the program is executing a<br />

loop that is just slightly too big for the cache.) On the other hand, the optimal<br />

policy, evicting the page that will be requested farthest in the fllture, incurs<br />

a miss only every k steps, so LRU incurs a factor of k more misses than the<br />

optimal policy.<br />

~ <strong>Design</strong>ing a Randomized Marking <strong>Algorithm</strong><br />

The bad example for LRU that we just saw implies that, if we want to obtain<br />

a better bound for an online caching algorithm, we will not be able to reason<br />

about fully general marking algorithms. Rather, we will define a simple Randomfzed<br />

Marking <strong>Algorithm</strong> and show that it never incurs more than O(log k)<br />

times the number of misses of the optimal algorithm--an exponentially better<br />

bound.<br />

Randomization is a natural choice in trying to avoid the unfortunate<br />

sequence of "wrong" choices in the bad example for LRU. To get this bad<br />

sequence, we needed to define a sequence that always evicted precisely the<br />

wrong item. By randomizing, a policy can make sure that, "on average," it is<br />

throwing out an unmarked item that will at least not be needed right away.<br />

Specifically, where the general description of a marking contained the line<br />

Else evict an unmarked item from the cache<br />

without specifying how this unmarked item is to be chosen, our Randomized<br />

Marking <strong>Algorithm</strong> uses the following rule:<br />

Else evict an unmarked item chosen umiformly at random<br />

from the cache<br />

755

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!