当前课程知识点:算法设计与分析 > 9 Approximation Algorithms > 9.1 Load Balancing > Load Balancing
这一章 和大家一起学习近似算法
如果我们要求解的问题是NP-hard的
我们能做些什么呢
通过计算复杂性理论的学习
我们知道 它们不太可能有多项式时间算法
我们必须要做一些取舍
我们说一个算法求解了一个问题
要满足三个要求
求得最优解
算法的运行时间是多项式的
解决问题的任意一个实例
我们关注于近似算法
它的运行时间是多项式的
可以解决问题的任意一个实例
虽然未必求得最优解
但是可以保证
对于最小化问题
近似算法得到的目标值至多为最优值的ρ倍
我们称这样的算法为ρ-近似算法
显然 我们面临一个挑战
在不知道最优值的情况下
要证明近似算法得到的解
不超过最优值的ρ倍
我们通过一些例子
来展示近似算法的设计与分析
先来看一下Load Balancing 问题
即负载平衡问题
负载平衡问题
也称为平行机排序问题
给定m台相同的机器 n个工件
工件j的加工时间为tj
要求工件j必须在一台机器上连续加工
一台机器在一个时刻只能加工一个工件
令J(i)为安排在机器i上加工的工件集合
定义这台机器的负载L_i为J(i)中
所有工件加工时间之和
定义makespan
即最后完工时间
为所有机器的最大负载L=max_i L_i
负载平衡问题 即安排工件在机器上加工
使得makespan最小
List Scheduling是容易想到的
也是常用的一个贪婪算法
这个算法把工件排成一个序列
然后依次把工件
安排在当前最先完工的机器上
我们来看一下算法的伪代码
先对m台机器
令它们的负载为0
所安排的工件集合为空
然后对于n个工件逐一安排加工
在安排工件j时
令第i台机器当前负载最小
那么把工件j安排在第i台机器
令第i台机器的负载增加t_j
最后返回每台机器上加工工件的集合
我们来看一个演示的例子
有三台机器
10个任务
List Scheduling算法把工件A安排在机器1
然后依次把工件B和C安排在机器2和3
安排工件D的时候
注意到机器2先完工
那么就安排在这台机器上加工
然后依次安排工件D在机器1
工件F在机器3
工件G在机器2
工件H在机器1
工件I在机器1
工件J在机器3
最后得到了所有工件的排序
算法共有n个循环
每次要寻找m台机器的最小负载
可以通过两分搜索在logm时间实现
因此总的运行时间是O(nlogm)
Gramham在1966年证明了
List Scheduling是2-近似算法
这也是第一篇对近似算法
进行最坏情形分析的文献
为了比较算法得到的解和最优解的关系
我们先建立2个引理
引理1
最优的makespanL^*≥工件的最大加工时间
这是因为工件必须连续加工
那么任何一个解的最大完工时间
都不会小于工件的最大加工时间
引理2
最优的makespanL^*≥所有工件加工时间除以m
这是因为
总的加工时间被分配到m台机器
总有一台机器的加工时间
不小于总加工时间除以m
通过上面的两个引理
我们就可以证明贪婪算法是2-近似的
考虑最后一台完工的机器
设为第i台机器
其负载为L_i
令j是这台机器上最后加工的工件
当j被安排在机器i的时刻
i具有最小的负载为L_i-t_j
可知对于任何一台机器k
1≤k≤m
其上的负载满足
L_i-t_j≤L_k
把这些不等式加到一起再除以m
我们有
L_i-t_j≤所有机器上的负载除以m
而所有机器上的负载
等于所有工件的加工时间
因此 L_i-t_j≤所有工件加工时间除以m
由引理2
它又≤L^*
L_i=(L_i-t_j)+t_j
由引理1
t_j≤L^*
因此L_i≤2L^*
命题得证
我们所得到的2-近似的结果是紧的么
下面的例子表明
它几乎是紧的
有m台机器
依次有m(m-1)个加工时间为1的工件
和一个加工时间为m的工件
按照List Scheduling算法
先安排加工时间为1的小工件
每台机器上分配m-1个
最后把大工件安排在第一台机器上加工
最后的完工时间为2m-1
显然 我们可以把大工件
安排在一台机器上加工
其它工件平均分配到余下的机器
得到最优解
目标值为m
当m充分大时
算法得到的目标值接近最优值的2倍
在List Scheduling算法中
我们把工件按照任意的顺序进行排列
然后顺序加工
通过刚才的例子 我们也会发现
把加工时间长的工件放在前面
可能会得到更好的结果
这个想法就是Longest processing time 算法
称为LPT规则
LPT规则
先把工件按照加工时间从大到小排列
然后执行List Scheduling算法
首先 我们有一个简单的发现
如果至多有m个工件
那么LPT规则会得到最优解
因为每台机器上最多加工一个工件
显然得到的是最优解
如果有不少于m个工件
那么L^*≥2t_m+1
考虑前m+1个工件
加工时间为t_1,…,t_m+1
因为工件按照加工时间降序排列
因此这些工件的加工时间都不小于t_m+1
共有m台机器
那么这m+1个工件中
至少有2个被安排在一台机器上加工
因此最后完工时间≥2t_m+1
我们可以得到下面的定理
LPT规则是3/2近似算法
我们可以假设
最后完工的工件至少是第m+1个工件
否则我们得到了最优解
和List Scheduling相同的分析
我们有
L_i=(L_i-t_j)+t_j
这里最后完工工件的加工时间t_j≤1/2L^*
因此 L_i≤3/2L^*
我们的分析是紧的吗
这次的回答是否定的
Graham在1969年证明了
LPTrule是4/3近似的
分析的过程更加精细和复杂
那么4/3的结果是紧的吗
它几乎是紧的
比如对于这样的例子
m台机器
有2m+1个工件
加工时间依次为m+1,m+2,…,2m-1
还有2个加工时间为m的工件
可以验证
当m充分大时
我们算法得到的目标值
与最优值的比值趋近4/3
-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