当前课程知识点:算法设计与分析 >  5 Divide and Conquer >  5.1 Mergesort >  Mergesort

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

Mergesort在线视频

Mergesort

下一节:Counting Inversions

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

Mergesort课程教案、知识点、字幕

这一章我们学习分治算法

所处理的都是一些最基本的问题

分治算法

形式上简洁优美

蕴含着丰富的创造性的工作

其分析和证明往往需要

细致的讨论和精巧的构造

所得到结果效率很高

有时甚至是出人意料的

分治算法一般把问题分成几个部分

递归地去求解每个部分

然后再把各部分的解组合为原问题的解

分治算法各式各样

但都包含分 治 合三步操作

分治算法中最常见的是

把规模为n的问题

分为2个规模为n/2的问题

递归求解这两个子问题

然后再把两个子问题的解

合并为原问题的解

通常合并所用的时间是线性的

对于这样的问题

一般说来强力搜索的算法需要n^2的时间

而分治算法只需要nlog n的时间

这里我们说的log n指的是log_2 n

我们通过几个例子来给大家展示分治算法

首先是并归排序问题

排序问题是算法中的最基本问题

给定n个元素

把它们按照某个序

比如说升序进行排列

排序问题有很多明显的应用

比如把目录中的文件进行排序

把音乐进行排序

电话簿中的名字进行排序 网页排序等等

还有很多不平凡的应用

比如说数据压缩 计算机图形

我们之前见到过的区间排序 最小支撑树

还有供应链管理

亚马逊的书籍推荐系统。。。

还有很多问题

当数据是有序的话

会变得比较简单

比如中位数问题

比如找最近点对问题等

排序问题的算法有很多

并归排序是常用的一种算法

并归排序算法把数据分为两部分

递归地对每一部分进行排序

然后再把有序的两部分合成一个整体

比如给出这样一个字母序列

algorithms

也就是我们的算法

我们把它划分为各五个字母的两部分

划分我们需要O(1)的时间

然后我们对两部分

分别进行排序

如果对于n个数的排序需要T(n) 的时间的话

那么每一部分需要T(n/2)的时间

总共需要2T(n/2)的时间

最后我们再把两个有序的子序列

合并成一个序列

这需要O(n)的时间

我们在刚才所叙述的算法中

需要把两个有序的列表

合并成一个有序的列表

我把这称为并归

如何有效的去实现并归呢

我们来演示一下

现在给定两组有序的序列

各包含5个数字

我们放两个指针

在这两个序列的第一个数字上

然后比较这两个数字的大小

我们会看到

右端的序列的

对应的数字比较小 是2

我们把这个2放到

我们新队列中的第一个

然后右边的指针向右移动一格

出现的数字是11

然后跟3进行比较

我们发现3比较小

那么把3放到我们新队列中的第二个位置

然后左边队列的指针向右移动一格

出现的是7

然后跟11进行比较

7比较小

把7放到新队列中

然后左边队列中的指针再向右移动一个格子

出现的是10

仍然是小于11

把它放到新队列的队尾

下一个数字是14

14大于11

那我们把11放到新的队列中

并且把这个队列中的指针向右移动一个格子

我们这样依次进行下去

我们就可以把这两个有序的这样一个队列

给它合并成一个整体的有序的一个队列

我们可以看到

线性的时间就可以完成并归的操作

我们先来做一点技术上的准备

T(n)是对于规模为n的列表进行并归排序

所需要的比较的操作次数

那么我们可以看到

当n等于1的时候 T(n)=0

如果n大于等于1的时候

我们要解决一个规模为n的问题

需要解决两个子问题

规模分别为n/2取上整和n/2取下整

对它们进行排序

需要T (n/2取上整)

以及T(n/2取下整的时间)

而合并的操作需要n的时间

所以我们有这样的递归关系的表达式

我们将证明

T(n)=O(nlogn)

我们将用不同的方法来证明这个结论

开始我们先简化证明

假设n是2的指数形式

并且把不等号用等号来代替

对于这样的递归关系

我们可以画出递归树的形式

要解决一个规模为n的问题

我们把它分为两个规模为n/2的问题

对应的合并操作是n次

我们继续分解

直到把问题分为平凡的情况

到T(2)

也就是说这个队列中只有两个元素

排序需要O(1)的时间

总共是n/2次排序

我们可以看到分解共有logn层

每一层对应的合并操作

分别为n,2×n/2,4×n/4等等

每一层对应的合并操作次数都是n

所以总共合并所需要的操作次数是nlogn

加上最后一层“治”的操作

总共比较的次数是O(nlogn)

所以总的运行时间也是O(nlogn)的

我们还可以用归纳法来证明

还是假设n是2的指数形式

我们证明满足递归表达式的T(n)=nlogn

对于n=1是显然的

我们假设T(n)= nlog n

往证T(2n)= 2n log 2n

根据T(n)的递归表达式

我们可以看到T(2n)=2 T(n)+2n

根据归纳假设它等于2nlogn+2n=2nlog2n

最后我们来证明一般的情况

在并归排序算法中

如果n=1 则不需要进行比较

对于一般情况

比较操作的次数不超过

对它两部分分别调用算法

所用的比较操作次数

及把它们合并所用的n次比较操作之和

因此并归排序算法的比较次数T(n)

满足下面的表达式

我们的结论是

T(n)≤n乘以logn取上整

也就是说T(n)=O(nlogn)

我们对于n进行归纳证明

对于n=1的情况

结论是平凡的

我们令n_1等于n/2取下整

n_2等于n/2取上整

对于1,2…n-1的情况 我们假设结论成立

根据T(n)的表达式我们有

T(n)≤T(n_1)+T(n_2)+n

根据归纳假设

T(n)≤n_1×logn_1取上整+n_2×logn_2取上整+n

因为n_1≤n_2

所以上式≤n_1×logn_2取上整+n_2×logn_2取上整+n

=n×logn_2取上整+n

≤n×(logn取上整-1)+n=n×logn取上整

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

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

Mergesort笔记与讨论

也许你还感兴趣的课程:

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