当前课程知识点:计算思维导论 >  第八单元 >  8.5 算法设计方法——分治 >  Video

返回《计算思维导论》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《计算思维导论》慕课在线视频列表

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

大家好

这一节我们讲算法设计方法之分治

所谓分治法

就是分而治之

如果待求解的问题比较复杂

就可以把它分割为若干个

较小的子问题来各个击破

以降低问题的复杂性

这就是分治的思想

比如

汽车的设计与制造

就可以分成发动机

车架 底盘 变速箱

悬挂系统

然后分别单独设计制造

最后组装起来

分治法解题一般分为三步

一 分解

也就是将要解决的问题

划分成若干个规模较小的子问题

二 求解

当子问题划分得足够小时

选用恰当的方法解决它

三 合并

按原问题的要求

将子问题的解逐层合并

构成原问题的解

分治法在设计搜索引擎

解决巨量数据的排序等问题中

得到了广泛的应用

在科学计算领域

有时候会面对非常巨大的计算任务

又希望在很短很短的时间内完成计算

在这种情况下

靠一台计算机来计算

显然满足不了要求

这个时候分治法就可以派上用场了

比如

两个非常巨大的矩阵相乘

可以先对矩阵进行分解

然后把子任务分解到

若干台计算机上进行计算

最后再把计算结果收集合并起来

比如

假定俩个巨大的矩阵A和B

他们都是N阶方阵

所谓N阶方阵

也就是由N行跟N列组成的矩阵

在这里

N是一个非常大的整数

大到一台计算机存放不下矩阵A或者B

现在要计算它们的乘积C=A×B

我们知道

两个矩阵相乘

结果也是一个矩阵

现在要求矩阵C

就要计算出矩阵C中的

每一个元素Cnm

这就是Cnm的计算式

如果我们把它展开

就得到这么一个式子

也就是说

做上面的计算要扫描矩阵A中

第n行的所有元素

以及矩阵B中第m列的所有元素

如果一台计算机存不下这么一个矩阵

事情就变得很麻烦

好了

让我们看看用分治法怎么做

首先

假定我们用10台计算机来计算

可把矩阵A

按行拆成10个小的矩阵

分别是A1 A2一直到A10

每一个有N除以10行这么大

就像这样

然后

分别计算每个小矩阵

A1 A2一直到A10

和B的乘积

为了不失一般性

以A1为例来说明

对应的C1中的每一个元素

可按这个式子来计算

这样

就在第一台计算机上

计算出C矩阵中前十分之一的元素

同样道理

可以在第二台

第三台

一直到第十台计算机上

计算出其他元素

当然

细心的读者应该发现了

矩阵B也和矩阵A一样大

一台计算机同样存不下

不过没有关系

我们同样可以按列切分矩阵B

使得每台计算机

只存放矩阵B的十分之一

上述公式可以直接使用

只是这一回只完成了C1的十分之一

这样一来

就需要100台计算机

而不是原来的10台了

这个图

就是第一台计算机的工作

被分配到10台计算机中

这是其中的第五台

要完成的计算任务

于是

在单机上无法求解的大问题

就被分解成多个小问题来解决

我们再看一个简单的例子

给你一个装有16个硬币的袋子

这16个硬币中有一个是假币

并且这个假币比真币要轻一些

请你找出这个假币

为了完成这么一个任务

可以提供一台

用来比较两组硬币重量的仪器

利用这台仪器

可以知道两组硬币的重量是否相同

我们用分治法来求解这个问题

假如把16个硬币看成一个大的问题

要做的第一步

就是随机选择8个硬币作为第一组

不妨称为A组

剩下的8个硬币作为第二组

不妨称之为B组

这样

就把1 6个硬币的问题分解成

两个8个硬币的问题来解决

第二步

假如两组硬币重量相等

则可以判断假币不存在

假如两组硬币重量不相等

则肯定存在假币

并且可以判断它位于

较轻的那一组硬币之中

不妨假定B组是较轻的那一组

我们再把它分成两组

每组就有4个硬币

称其中一组为B1

另一组为B2

比较这两组

肯定有一组轻一些

如果B1轻

则假币肯定在B1之中

再将B1又分成两组

每组就只剩两个硬币了

不妨称其中一组为B11

另一组为B12

比较这两组

可以得到一个较轻的组

由于这个组只剩两个硬币

因此不必再细分

比较这两个硬币的重量

可以立即知道哪一个硬币轻一些

较轻的硬币就是我们要找的假币

这就是算法设计

里面经常用到的分治法

大家应该不难理解

这一节就到这

谢谢大家

计算思维导论课程列表:

第一单元

-1.1 计算思维及其教育

--Video

第二单元

-2.1 计算是什么

--Video

-2.2 计算与自动计算

--Video

-2.3 计算机及其计算本质特征(I)

--Video

-2.4 计算机及计算的本质特征(II)

--Video

第三单元

-3.1 数的表示与模拟计算

--Video

-3.2 数的表示与数字计算

--Video

-3.3 二进制加法运算的机器化

--Video

-3.4 “九九归一”的加法运算

--Video

-3.5 二进制之优越性及问题与代价

--Video

第四单元

-4.1 从数学危机到图灵机

--Video

-4.2 图灵机的计算能力

--Video

-4.3 什么问题都能计算吗?

--Video

-4.4 冯•诺依曼机及其发展与演化

--Video

-4.5 从算盘到图灵机——机械计算的本质

--Video

-4.6 电子计算机——透过现象看本质

--Video

第五单元

-5.1 思维可机械计算吗(I)

--Video

-5.2 思维可机械计算吗(II)

--Video

第六单元

-6.1 量子理论

--Video

-6.2 量子计算机

--Video

第七单元

-7.1 人类求解问题之过程

--Video

-7.2 基于计算(机)的问题求解过程

--Video

-7.3 面向过程的结构化设计方法学

--Video

-7.4 面向对象之方法学

--Video

-7.5 面向对象技术

--Video

-7.6 抽象

--Video

-7.7 计算学科中的抽象

--Video

-7.8 时间与空间及其相互转换

--Video

-7.9 技术层面的其他方法学

--Video

-7.10 认知层面的其他方法学

--Video

第八单元

-8.1 算法与程序

--Video

-8.2 算法设计方法——枚举

--Video

-8.3 算法设计方法——递推

--Video

-8.4 算法设计方法——递归

--Video

-8.5 算法设计方法——分治

--Video

-8.6 算法设计方法——仿生

--Video

第九单元

-9.1 机器间的通信方式

--Video

-9.2 数据转发方法

--Video

-9.3 网络分层体系结构

--Video

-9.4 有趣的对称加密技术

--Video

-9.5 难解的非对称加密技术

--Video

-9.6 数字签名及其应用

--Video

-9.7 从自然智能到人工智能

--Video

-9.8 符号主义的基本思想

--Video

-9.9 连接主义Ⅰ

--Video

-9.10 连接主义Ⅱ

--Video

-9.11 行为主义的基本思想

--Video

-9.12 机器翻译的愿景与困难

--Video

-9.13 峰回路转的自然语言处理

--Video

-9.14 信息传输中的问题与挑战

--Video

-9.15 重复传输与冗余编码

--Video

-9.16 校验与校验和

--Video

-9.18 自纠错技术及应用

--Video

-9.19 两种简单的数据压缩方法

--Video

-9.20 哈夫曼编码

--Video

-9.21 数据压缩极限与LZ压缩方法

--Video

-9.22 大海捞针的搜索引擎

--Video

-9.23 网页排序方法(PageRank)

--Video

第十单元

-10.1 计算文化

--Video

期末考试

-期末考试--作业

Video笔记与讨论

也许你还感兴趣的课程:

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