主要来源于我们上课的PPT
1、负载均衡问题
有 m m m个独立的机器, n n n个任务,解决第 j j j 个任务所需要的时间为 t j t_j tj.
- 一个任务只能在一台机器上连续的进行处理
- 一台机器在同一个时间段只能处理一个任务(不能并行)
要求:将这 n n n个任务安排给 m m m台机器,并且最小化负载均衡。
定义:
J ( i ) J(i) J(i):分配给第 i i i 台机器的任务 组成的集合。
L ( i ) L(i) L(i):第 i i i 台机器的负载,有 L ( i ) = ∑ j ∈ J ( i ) t j L(i) = \sum_{j \in J(i)}t_j L(i)=∑j∈J(i)tj。
L L L:负载均衡(makespan),有 L = m a x i L ( i ) L = max_iL(i) L=maxiL(i)。
算法一:List Scheduling
每次将任务分配给 当前 负载最小 的机器。【算法复杂度 O ( n l o g ( m ) ) O(nlog(m)) O(nlog(m)) 】。
结论:该算法是 2倍近似最优的,既 2 − a p p r o x i m a t i o n 2-approximation 2−approximation.
证明:
引理1 最优的负载均衡 L ∗ ≥ m a x j t j L^* \geq max_jt_j L∗≥maxjtj
引理2 最优的负载均衡 L ∗ ≥ 1 m ∑ j = 1 n t j L^* \geq \frac{1}{m}\sum_{j=1}^nt_j L∗≥m1∑j=1ntj (反证法可证明)
假设具有最大负载的机器 i i i 完成的最后一个任务是 j j j,有:
L − t j < = 1 m ∑ k = 1 m L k = 1 m ∑ p = 1 n − 1 t p ≤ L ∗ L - t_j <= \frac{1}{m}\sum_{k=1}^mL_k =\frac{1}{m}\sum_{p=1}^{n-1}t_p \leq L^* L−tj<=m1k=1∑mLk=m1p=1∑n−1tp≤L∗
又根据引理1:
t j ≤ L ∗ t_j \leq L* tj≤L∗
故:
L − t j + t j ≤ L ∗ + L ∗ = 2 L ∗ L - t_j + t_j \leq L^* + L^* = 2L^* L−tj+tj≤L∗+L∗=2L∗
所以 l i s t − s c h e d u l i n g list-scheduling list−scheduling 算法是2倍近似最优的。
算法二:LPT Rule
先将 n n n个任务按处理时间的降序排列,再执行 l i s t − s c h e d u l i n g list-scheduling list−