当前课程知识点:算法设计与分析 >  6 Dynamic Programming >  6.1 Weighted Interval Scheduling >  Weighted Interval Scheduling

返回《算法设计与分析》慕课在线视频课程列表

Weighted Interval Scheduling在线视频

Weighted Interval Scheduling

下一节:Segmented Least Squares

返回《算法设计与分析》慕课在线视频列表

Weighted Interval Scheduling课程教案、知识点、字幕

在这一章里

我们一起来学习动态规划

我们已经学习了几种

算法设计与分析的思路

在贪婪算法中

我们把原问题分解为多个阶段

每阶段按照一个准则去求解局部的最优

然后逐步构建出原问题的解

在分治算法中

我们把原问题划分为若干个子问题

比如两个子问题

然后独立地递归求解子问题

再把它们的解组合为原问题的解

在这一章要学习的动态规划算法中

我们还是把问题划分为一系列的子问题

但它们相互关联

求解问题的规模由小到大

最后得到原问题的解

Bellman被认为是动态规划的创始人

他在50年代系统地研究了动态规划

动态规划从提出至今

在科学和工程的各个领域

都有广泛的应用

比如在生物信息学 控制理论

信息论 运筹学

以及计算机科学的各个方面

有很多以动态规划为基础的经典算法

比如隐式马尔可夫模型的Viterbi算法

Unix中的比较两个文件的diff命令

以及稍后我们将要学习的序列比对算法

最短路算法等等

我们用几个例子来展示动态规划算法

先来看一下加权区间排序问题

之前我们讲过排序问题

给定n个工件

工件j开始时间是s_j 结束时间是f_j

在这里 我们增加一个新的参数

每个工件有一个权重v_j

两个工件是相容的

如果它们的加工时间上没有重叠的部分

我们的目标是安排相容的工件进行加工

使得它们的权重之和最大

在之前学习的区间排序问题中

相当于所有的权重为1

我们的贪婪算法

把工件按照结束时间升序排列

然后依次把不冲突的工件

安排在机器上加工

但是我们发现

贪婪算法对于加权版本的区间排序问题

不是最优的

比如看下面的例子

有两个工件

工件a的长度为3 权重是1

工件b 长度10 权重999

贪婪算法

选择工件a来加工

但是显然这个问题的最优解是加工工价b

为了求解加权区间排序问题

我们先做一些准备工作

工件的结束时间

仍然是我们需要参考的重要指标

把它们升序排列

定义p(j)是在j之前

并与j相容工件的最大序号

比如下例中

对于工件8来说

在它之前并且相容的最大的序号的工件是5

因此p(8)=5

类似地 p(7)=3, p(2)=0

定义OPT(j)是有j个工件的时候的最优解

我们的原问题就是j=n时的情况

我们讨论最优解所有可能发生的情形

第一种情况

OPT选择了工件j

我们已经定义了p(j)是在j之前

并与j相容工件的最大序号

那么 因为选择了工件j

那么就不能够选取p(j)+1到j-1的这些工件

因为它是一个最优解

一定在从1,2一直到p(j)这些工件中

也做出了最优的选择

第二种情况

OPT没有选择工件j

它一定是从1一直到j-1这些工件中

做出了最优的选择

由以上两种情况

我们可以给出OPT(j) 的表达式

当j=0的时候

显然OPT(j)=0

一般情况

OPT(j)的值是刚才所说的两种情况中

最优的一种选择

第一种情况对应的目标值为

选取工件j获得的收益v_j

加上OPT(p(j))

另一种情况对应的目标值是OPT(j-1)

OPT(j)等于两种情况取大

这样的方程我们称为动态规划基本方程

下面我们给出动态规划算法的伪代码

输入n个工件的开始时间

结束时间 权重

把工件按照结束时间升序排列

然后按照之前的定义

计算p(1),p(2)…p(n)

算法Compute-Opt(j)

先给出边界条件

如果j=0

那么就是返回0

否则 就按刚才所给出的动态规划基本方程

递归地去求解

算法很简洁

看起来也很优美

但是很快我们发现

它却很难执行

因为在算法的执行过程中

需要调用大量的子问题

这是一个指数时间的算法

比如看下面的例子

有5个工件

加工时间都为3

开始时间依次间隔两个单位

可以计算出来p(1)=0,p(j)=j-2

为了计算opt(5)

我们需要计算opt(4)和opt(3)

依次展开

我们会看到

这是一个二叉的结构

所需要求解子问题的数量

是指数级别增长的

为了克服这个困难

我们可以把算法加以改进

存储算法中间运算中

所求解出的子问题的解

在需要的时候可以直接调用

算法的输入和之前一样

我们对于每个工件j定义M(j)

初始的时候为空

令M(0)=0

然后运行主程序

当M(j)是空的时候

我们调用动态规划基本方程

计算M(j)

带记忆版本的动态规划算法

把执行的时间改进到O(nlogn)

初始的时候

按照工件的结束时间进行排序

需要O(nlogn)的时间

因为工件已经按照结束时间进行升序排列

我们可以用两分搜索

在O(logn)的时间得到p(j)

总计用时就是O(nlogn)

主程序中的计算

主要是动态规划基本方程的运算

每次需要O(1)的时间

每次调用时

或者返回已经存在的一个M[j]的值

或者得到一个新的M[j]的值

并且两次的递归调用算法

我们用势函数的方法

来对总共调用算法的次数进行估计

定义φ等于非空的M[j]的数量

初始时φ=0

算法过程中φ单调增加并且φ≤n

而增加φ一个单位至多两次调用程序

因此总共调用程序的次数不超过2n次

所以主程序被调用的次数是O(n)的

这也就得到了我们所需的结论

动态规划算法给出了

加权区间排序问题的最优值

如何得到最优解呢

我们可以进行一些后期的处理

初始条件如果j=0

那么我们就是返回0

我们已经得到了M[j]的值

可以逐步的去比较v(j)+M(p(j))与M(j-1)的大小

以决定是否加入工件j

如果前者大的话 那么就加入j

否则就放弃工件j

最后输出的工件集合即为所求的最优解

这个算法共n次循环

每次运算时间都是O(1)的

因此算法的运行时间是O(n)的

刚才的算法中

我们是从后往前分析的

用递归的形式给出了算法

实际上对于这个问题

以及很多的动态规划算法

我们还可以从前向后地分析

我们给出相应的算法

预处理阶段和之前一样

把工件按照结束时间升序排列

计算p(j)的值

初始时M(0)=0

然后 j=1到n

按照动态规划基本方程去计算M(j)

可以很清楚的看出

这个算法的运行时间也是O(nlogn)

算法设计与分析课程列表:

1 Introduction of Algorithm

-1.1 Introduction

--Introduction

-1.2 A First Problem: Stable Matching

--A First Problem: Stable Matching

-1.3 Gale-Shapley Algorithm

--Gale-Shapley Algorithm

-1.4 Understanding Gale-Shapley Algorithm

--Understanding Gale-Shapley Algorithm

-Homework1

-Lecture note 1

--Lecture note 1 Introduction of Algorithm

2 Basics of Algorithm Analysis

-2.1 Computational Tractability

--Computational Tractability

-2.2 Asymptotic Order of Growth

--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 Graph

-3.1 Basic Definitions and Applications

--Basic Definitions and Applications

-3.2 Graph Traversal

--Graph Traversal

-3.3 Testing Bipartiteness

--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

--Lecture note 3 Graph

4 Greedy Algorithms

-4.1 Coin Changing

--Coin Changing

-4.2 Interval Scheduling

--Interval Scheduling

-4.3 Interval Partitioning

--Interval Partitioning

-4.4 Scheduling to Minimize Lateness

--Scheduling to Minimize Lateness

-4.5 Optimal Caching

--Optimal Caching

-4.6 Shortest Paths in a Graph

--Shortest Paths in a Graph

-4.7 Minimum Spanning Tree

--Minimum Spanning Tree

-4.8 Correctness of Algorithms

--Correctness of Algorithms

-4.9 Clustering

--Clustering

-Homework4

-Lecture note 4

--Lecture note 4 Greedy Algorithms

5 Divide and Conquer

-5.1 Mergesort

--Mergesort

-5.2 Counting Inversions

--Counting Inversions

-5.3 Closest Pair of Points

--Closest Pair of Points

-5.4 Integer Multiplication

--Integer Multiplication

-5.5 Matrix Multiplication

--Video

-5.6 Convolution and FFT

--Convolution and FFT

-5.7 FFT

--FFT

-5.8 Inverse DFT

--Inverse DFT

-Homework5

-Lecture note 5

--Lecture note 5 Divide and Conquer

6 Dynamic Programming

-6.1 Weighted Interval Scheduling

--Weighted Interval Scheduling

-6.2 Segmented Least Squares

--Segmented Least Squares

-6.3 Knapsack Problem

--Knapsack Problem

-6.4 RNA Secondary Structure

--RNA Secondary Structure

-6.5 Sequence Alignment

--Sequence Alignment

-6.6 Shortest Paths

--Shortest Paths

-Homework6

-Lecture note 6

--Lecture note 6 Dynamic Programming

7 Network Flow

-7.1 Flows and Cuts

--Flows and Cuts

-7.2 Minimum Cut and Maximum Flow

--Minimum Cut and Maximum Flow

-7.3 Ford-Fulkerson Algorithm

--Ford-Fulkerson Algorithm

-7.4 Choosing Good Augmenting Paths

--Choosing Good Augmenting Paths

-7.5 Bipartite Matching

--Bipartite Matching

-Homework7

-Lecture note 7

--Lecture note 7 Network Flow

8 NP and Computational Intractability

-8.1 Polynomial-Time Reductions

--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

--Definition of NP

-8.5 Problems in NP

--Problems in NP

-8.6 NP-Completeness

--NP-Completeness

-8.7 Sequencing Problems

--Sequencing Problems

-8.8 Numerical Problems

--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 Approximation Algorithms

-9.1 Load Balancing

--Load Balancing

-9.2 Center Selection

--Center Selection

-9.3 The Pricing Method: Vertex Cover

--The Pricing Method: Vertex Cover

-9.4 LP Rounding: Vertex Cover

--LP Rounding: Vertex Cover

-9.5 Knapsack Problem

--Knapsack Problem

-Homework9

-Lecture note 9

--Lecture note 9 Approximation Algorithms

10 Local Search

-10.1 Landscape of an Optimization Problem

--Landscape of an Optimization Problem

-10.2 Maximum Cut

--Maximum Cut

-10.3 Nash Equilibria

--Nash Equilibria

-10.4 Price of Stability

--Price of Stability

-Homework10

-Lecture note 10

--Lecture note 10 Local Search

11 Randomized Algorithms

-11.1 Contention Resolution

--Contention Resolution

-11.2 Linearity of Expectation

--Linearity of Expectation

-11.3 MAX 3-SAT

--MAX 3-SAT

-11.4 Chernoff Bounds

--Chernoff Bounds

-Homework11

-Lecture note 11

--Lecture note 11 Randomized Algorithms

Exam

-Exam

Weighted Interval Scheduling笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。