当前课程知识点:算法设计与分析 > 4 Greedy Algorithms > 4.5 Optimal Caching > Optimal Caching
下面我们来学习最优缓存问题
缓存中可以存放k个元素
有m个要访问的要求依次到达
记为d_1,d_2,…d_m
如果缓存中存在当前要访问的元素
那么我们就称为缓存命中
如果访问的元素没有被存储于缓存中
我们必须剔除已存在的某个元素
加入要访问的元素
这称为缓存未命中
我们的目标是
制定一个更新缓存的计划
使得剔除的操作次数最少
比如下面例子中k等于2
初始缓存为ab
需求序列为abcbcaab
第一轮a的访问要求可以满足
第二轮b的访问要求也可以满足
第三轮c不在缓存中
我们把a剔除 加入c
进行一次剔除操作
第四轮b在缓存中
第五轮c在缓存中
第六轮a不在缓存中
剔除c 加入a
如此依次进行
共有两次剔除操作
对于最有缓存的问题
我们设计这样的贪婪算法
剔除缓存中下一次访问需求最远的元素
我们简称这个算法为FF算法
比如当前的缓存内容为abcdef
访问需求为g
不在缓存中
我们看一下
缓存中的元素
在访问队列中下一次出现最晚的是f
我们就将f从缓存中剔除
下面我们来证明这个算法
对于最优缓存问题来说是最优的
算法和结论是符合直觉的
但是 证明却很精巧
如果一个方案中
我们只有在需要一个元素的时候
才把它加入到缓存
我就称这个方案是简化的
直觉上来说
对于一个未简化的方案
我们可以把它转换为一个简化的方案
而不增加剔除的次数
比如说 在这个例子中
第二轮 a的访问要求能够得到满足
但是它剔除了b 加入了x
在第三轮 c的要求能得到满足
但是它剔除了x 加入了d
在第四轮 d的访问要求也能满足
但它剔除了c 加入了b
第五轮 a的要求能得到满足
但是它剔除了d 加入了c
在下一轮b的要求也能够得到满足
但是它剔除了c 加入了x
我们看到 一共进行了五次剔除
实际上要完成同样的任务
我们可以用这样的方式
在第四轮
对于d的访问要求不能够得到满足时
剔除b 加入d
第六轮 b的访问要求不能得到满足时
把c去掉 加入b
再下一轮
去掉d 加入c
我们总共用了三次剔除操作
满足了上面的所有的访问要求
我们将证明
对于任何未简化的方案
我们可以把它转化为一个简化的方案
而不增加剔除的次数
假设 方案S
在时刻t 把d加入缓存
而当前没有对d的访问要求
令c是S中同时被剔除的元素
我们证明 可以在t时刻不做c和d的交换
如果方案S中对d的操作之前
这里包括访问和剔除
c在某一步又被加回来
我们可以在这一步把d加入
剔除同样的元素
之后进行相同的操作
这样剔除的次数减少了一次
下面我们分情况来讨论
在d被操作之前
元素c未被重新加入
第一种情况 在对d的访问要求之前
我们在时刻t'
又把d剔除 加入了元素e
我们可以在这一步剔除c 加入e
从而减少了一次剔除的操作
第二种情况 在d被剔除之前
有访问d的要求
那么我们在这一步
剔除c 加入d
剔除的次数没有增加
但是这个方案更加简化
我们一直做下去
或者可以减少剔除的次数
或者可以使得方案更加简化
最后我们一定可以得到一个简化的方案
下面证明算法的最优性
我们用归纳法来证明
存在一个最优的方案S
它与ff算法
前j+1步的操作是完全相同的
令S是一个简化的最优方案
它前j步和ff算法采用相同的操作
我们将得到S'
它的前j+1步和FF算法采用相同的操作
考虑 第j+1个需求d
到目前为止
S和FF算法的操作是完全一样的
所以缓存中的内容也完全相同
第一种情况
如果d在缓存中
那么S和FF算法都不做任何的操作
我们令S'=S
第二种情况
d不在缓存中
S和FF算法都剔除了同样的元素
那么在这一步
它们又是完全相同的
我们令S'=S
第三种情况
d不在缓存中
S加入了d 剔除了f
FF算法加入d 删除了e
这个e是不等于f的
令S'前j步和S相同
在这一步和FF算法相同
也就是说
它也删除e 加入d
之后S'和S执行相同的操作
直到时刻j'
它们必须执行不同的操作
此时一定是要涉及e或者是f
令g是此时的访问要求
我们分三种情况来讨论
第一种情况g=e
这是不会发生的
因为在FF算法中
j时刻之后
对f的访问要求一定是在e的前面
第二种情况
g=f
元素f不在S的缓存中
令e'是S要剔除的元素
如果e'=e的话
S'的缓存中包含f
不做任何操作
与S有相同的缓存
如果e'不等于e
S'可以剔除e' 加入e
也与S有相同的缓存
虽然这个方案不是简化的
但是可以转化为一个简化的方案
并和FF算法前j+1步的操作是相同的
最后一种情况
g不等于e,f
S一定是剔除e
令S'剔除f
现在S与S'有相同的缓存
综合上面的讨论
我们得到了所要的结论
对于缓存问题
有两个版本
在线版本和离线版本
对于离线版本
我们事先知道需求序列
对于在线版本
需求序列是逐一释放的
不是事先已知的
缓存问题是计算机科学领域里
一个最基本的问题
对于在线版本
我们只能利用已经发生的信息
LIFO策略
它剔除最近被加入的元素
LRU策略 剔除上一次访问最早的元素
对于离线版本
我们已经证明了FF算法是最优的
对在线的缓存问题来说
LRU是k竞争的
而LIFO可以是任意坏的
-1.1 Introduction
-1.2 A First Problem: Stable Matching
--A First Problem: Stable Matching
-1.3 Gale-Shapley Algorithm
-1.4 Understanding Gale-Shapley Algorithm
--Understanding Gale-Shapley Algorithm
-Homework1
-Lecture note 1
--Lecture note 1 Introduction of Algorithm
-2.1 Computational Tractability
-2.2 Asymptotic Order of Growth
-2.3 A Survey of Common Running Times
--A Survey of Common Running Times
-Homework2
-Lecture note 2
--Lecture note 2 Basics of Algorithm Analysis
-3.1 Basic Definitions and Applications
--Basic Definitions and Applications
-3.2 Graph Traversal
-3.3 Testing Bipartiteness
-3.4 Connectivity in Directed Graphs
--Connectivity in Directed Graphs
-3.5 DAG and Topological Ordering
--DAG and Topological Ordering
-Homework3
-Lecture note 3
-4.1 Coin Changing
-4.2 Interval Scheduling
-4.3 Interval Partitioning
-4.4 Scheduling to Minimize Lateness
--Scheduling to Minimize Lateness
-4.5 Optimal Caching
-4.6 Shortest Paths in a Graph
-4.7 Minimum Spanning Tree
-4.8 Correctness of Algorithms
-4.9 Clustering
-Homework4
-Lecture note 4
--Lecture note 4 Greedy Algorithms
-5.1 Mergesort
-5.2 Counting Inversions
-5.3 Closest Pair of Points
-5.4 Integer Multiplication
-5.5 Matrix Multiplication
--Video
-5.6 Convolution and FFT
-5.7 FFT
--FFT
-5.8 Inverse DFT
-Homework5
-Lecture note 5
--Lecture note 5 Divide and Conquer
-6.1 Weighted Interval Scheduling
--Weighted Interval Scheduling
-6.2 Segmented Least Squares
-6.3 Knapsack Problem
-6.4 RNA Secondary Structure
-6.5 Sequence Alignment
-6.6 Shortest Paths
-Homework6
-Lecture note 6
--Lecture note 6 Dynamic Programming
-7.1 Flows and Cuts
-7.2 Minimum Cut and Maximum Flow
--Minimum Cut and Maximum Flow
-7.3 Ford-Fulkerson Algorithm
-7.4 Choosing Good Augmenting Paths
--Choosing Good Augmenting Paths
-7.5 Bipartite Matching
-Homework7
-Lecture note 7
-8.1 Polynomial-Time Reductions
-8.2 Basic Reduction Strategies I
--Basic Reduction Strategies I
-8.3 Basic Reduction Strategies II
--Basic Reduction Strategies II
-8.4 Definition of NP
-8.5 Problems in NP
-8.6 NP-Completeness
-8.7 Sequencing Problems
-8.8 Numerical Problems
-8.9 co-NP and the Asymmetry of NP
--co-NP and the Asymmetry of NP
-Homework8
-Lecture note 8
--Lecture note 8 NP and Computational Intractability
-9.1 Load Balancing
-9.2 Center Selection
-9.3 The Pricing Method: Vertex Cover
--The Pricing Method: Vertex Cover
-9.4 LP Rounding: Vertex Cover
-9.5 Knapsack Problem
-Homework9
-Lecture note 9
--Lecture note 9 Approximation Algorithms
-10.1 Landscape of an Optimization Problem
--Landscape of an Optimization Problem
-10.2 Maximum Cut
-10.3 Nash Equilibria
-10.4 Price of Stability
-Homework10
-Lecture note 10
--Lecture note 10 Local Search
-11.1 Contention Resolution
-11.2 Linearity of Expectation
-11.3 MAX 3-SAT
-11.4 Chernoff Bounds
-Homework11
-Lecture note 11
--Lecture note 11 Randomized Algorithms
-Exam