15-451 Algorithms Fall 2012 November 13, 2012 Danny Sleator Competitive analysis of Online Algorithms - rent or buy? - competitive algorithms - the list update problem ========================================================================== On-line algorithms ================== Any situation in which you have to make a decision on the fly without knowing the future. Examples include: controlling an elevator data structures (search list, self-adjusting trees) scheduling problems (processor scheduling) caching "Competitive Analysis" is an approach to analyzing these problems. (Define more precisely later, first a simple example) Rent-or-buy? ============ Simple online problem called the rent-or-buy problem, aka the tuxedo-rental problem. Say you get invited to some formal event and need to wear a tuxedo. Can either rent for $50 or buy for $300. So, you decide to rent. Then get invited to one again. Pretty soon, if you get invited to more than 6, you're wishing you had bought right at the start. Optimal strategy is: if you know you will be invited to more than 6 before the styles or your waistline changes then you should buy. Otherwise you should rent. But, what if you don't know? To talk about goodness of an online algorithm, we're going to look at the Competitive Ratio measure. Competitive ratio (CR) is worst case (maximum) over sequences of events of the ratio: (our cost)/OPT, where OPT = optimal cost in hindsight. "cost" means total cost over all time. In this case, what is CR of algorithm that says "buy right away"? Worst case is: only go once. Ratio is 300/50 = 6. What about algorithm that says "Rent forever"? Worst case is: keep getting invited. Ratio is infinite. Here's an algorithm with a competitive ratio of (2 - r/p), where r = rent cost and p = purchase cost (and r <= p): "Rent so long as total spent is less than purchase cost, then buy". (e.g., here it is "rent 5 times then buy") [Could be called the "better late than never" strategy.] If you needed a tux 5 or fewer times you were optimal. If you needed it 6 times, you spent $250 + $300 = $550, but optimal was $300. If you needed it > 6 times, you spent $550 but optimal was $300. We pay either OPT (when OPT < p) or 2*OPT-r (when OPT = p), so our ratio is (2 - r/p). Claim: Can't beat ratio of (2 - r/p) with a deterministic alg. Proof: what if the time you buy is the last time you ever use it. Say you rented k times. You paid k*rent + purchase. In hindsight, OPT = min(purchase, (k+1)*rent). So, ratio = [kr + p]/[min(p, (k+1)r)] = [(k+1)r + p - r]/[min(p, (k+1)r)] case 1: p <= (k+1)r. Then, ratio >= [2p-r]/p = (2 - r/p). case 2: (k+1)r <= p. Then, ratio >= 1 + (p-r)/[(k+1)r] >= 1 + (p-r)/p = 2 - r/p. Competitive algorithms ====================== An algorithm A is c-competitive if there exists a number a such that for any B and sigma: C_A(sigma) <= c C_B(sigma) + a. Where sigma is a sequence of requests, and C_A(sigma) is the cost of algorithm A on sequence sigma. Eventually we'll make use of the extension of this definition to handle randomized on-line algorithms. In this case C_A(sigma) is the expected cost of algorithm A on sequence sigma, and the expectation is taken over all of A's random choices. Competitive analysis has been used to design and analyze many important algorithms in data structures, computer systems, and networks. The List Update Problem ======================= Groundrules for the problem: There's a list of n items. (For simplicity we fix n). The positions in the list are numbered 1, 2, ... n. Position 1 is the front of the list. An item x can be accessed. The operation is called Access(x). The cost of the operation is the position i of x in the list. After doing an access, the algorithm is allowed to rearrange the list by doing swaps of adjacent elements. The cost of a swap is 1. So an on-line algorithm is specified by describing which swaps are done after an element is accessed. (Without loss of generality we can give off-line optimum algorithm the power to do its sawps any time it wants, and not associate them with any particular access.) The goal is to devise and analyze an on-line algorithm for doing Access() with a small competitive factor. Here are several algorithms to consider. Single Exhchange: After accessing x, if x is not at the front of the list, swap it with its neighbor toward the front. Frequency Count: Maintain a frequency of access for each item. Keep the list ordered by non-increasing frequency from front to back. Move To Front (MTF): After an access to an element x, do a series of swaps to move x to the front of the list. It's easy to construct sample sequences to show that Single Exchange and Frequency Count have competitive factors that are Omega(n). Theorem: MTF is a 4-competitive algorithm for the list-update problem. Proof: We'll use the potential function method. There will be a potential function that depends on the state of the MTF algorithm and the state of the "opponent" algorithm B, which can be any algorithm, even one which can see the future. Using this potential, we'll show that the amortized cost to MTF of an access is at most 4 times the cost of that access to B. Here are the two lists: _ _ _ _ _ _ _ _ _ B |_|_|_|_|_|_|_|_|...|_| _ _ _ _ _ _ _ _ _ MTF |_|_|_|_|_|_|_|_|...|_| Phi = 2*(The number of inversions between B's list and MTF's list) Recall that an inversion is a pair of distinct elements (x,y) that appear in one order in B's list and in a different order in MTF's list. It's a measure of the similarity of the lists. Using this potential, we'll analyze the amortized cost to MTF of Access(x), and the amortized cost to MTF that is incurred when B does a swap. (Note that in this case MTF incurrs zero cost, but it will have a non-zero amortized cost. To be complete the analysis must take this into account.). In each case we'll show that the amortized cost to MTF is at most 4 times the cost to B. That is, we'll show: AC <= 4C MTF B We can then sum the amortized costs, and add in the initial potential minus the final potential to bound the actual cost of the entire sequence of accesses to MTF. Analysis of Access(x) --------------------- _____________ B |_____x_______| _____________ MTF |_________x___| Define sets S = {y | y is before x in MTF and y is before x in B} T = {y | y is before x in MTF and y is after x in B} What is the cost of the access to MTF in terms of these sets? C = 1 + |S| + |T| + |S| + |T| = 1+2(|S|+|T|) MTF \___________/ \_________/ find cost swap cost C >= |S| + 1 Because all of S is before x in B. B What happens to the potential as a result of this operation? Well, here's MTF after the operation: _____________ MTF |x____________| The only changes in the inversions involve element x, because all other pairs stay in the same relative order. We can write the change in Phi precisely: Delta(Phi) = 2 (|S| - |T|) Because for every element of S the the number of inversions increases by 1 and for every element of T the number of inversions decreases by 1. Using this we can evaluate the amortized cost of the access to MTF. AC = 2 (|S| - |T|) 1+2(|S|+|T|) = 1+4|S| <= 4(1+|S|) <= 4 C MTF B This completes the amortized analysis of Access(x). Analysis of B swapping ---------------------- C = 0 C = 1 MTF B Delta(Phi) <= 2 AC <= 2 C <= 4 C MTF B B Putting the parts together -------------------------- Summing the amortized costs we get: Total Cost to MTF <= 4*(Total Cost to B) + Phi(init) - Phi(final) Phi(init) - Phi(final) <= n choose 2 = n(n-1)/2 Total Cost to MTF <= 4*(Total Cost to B) + (n choose 2) And the (n choose 2) term is actually 0 if MTF's list and B's list start out the same. QED.