本科算法设计与分析第三章复习总结

本章主要讲解分治算法,有以下几个小结。
3.1 分治算法原理
3.2 最大值和最小值
3.3 大整数乘法
3.4 矩阵乘法
3.5 快速傅里叶变换
3.6 线性时间选择算法
3.7 最邻近点对
3.8 凸包算法
3.9 数据剪除方法

3.1 分治算法原理
设计过程分为三个阶段
–划分:整个问题划分为多个子问题
–求解:求解各子问题 •递归调用正设计的算法
–合并:合并子问题的解,形成原始问题的解

分析过程
–建立递归方程
–求解 • 递归方程的建立方法
–设输入大小为n,T(n)为时间复杂性
在这里插入图片描述
–划分阶段的时间复杂性
• 划分问题为a个子问题。
• 每个子问题大小为n/b。
• 划分时间可直接得到=D(n)
–递归求解阶段的时间复杂性
• 递归调用
• 求解时间=aT(n/b)
–合并阶段的时间复杂性
• 时间可以直接得到=C(n)
在这里插入图片描述

大整数乘法
中位数的线性时间选择算法
Input: 由n个数构成的多重集合X
在这里插入图片描述

–本节讨论如何在O(n)时间内从n个不同的数 中选取第i大的元素 –中位数问题也就解决了,因为选取中位数即 选择第n/2-大的元素

Input: n个(不同)数构成的集合X,整数i,其中1in Output: xX使得X中恰有i-1个元素小于x
3.7 最邻近点对
利用排序的算法 –算法 •把Q中的点排序 •通过排序集合的线性扫描找出最 近点对 –时间复杂性 •T(n)=O(nlogn)
一维空间算法
Divide-and-conquer算法

  1. 如果Q中仅包含2个点,则返回这个点对;
  2. 求Q中点的中位数m
    Divide: 1. 用Q中点坐标中位数m把Q划分为两 个大小相等的子集合
    Conquer: 1. 递归地在Q1和Q2中找出最接近点对

在这里插入图片描述
总共三种情况
二维空间算法
前置条件
Preprocessing: 1. 如果Q中仅包含一个点,则算法结束; 2. 把Q中点分别按x坐标 值和y坐标 值排序.
划分
Divide: 1. 计算Q中各点x-坐标的中位数m; 2. 用垂线L:x=m把Q划分成两个大小相等的子集 合QL 和 QR, QL中点在L左边, QR 中点在L右 边.

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
还可证明此定理正确性。

数据剪除方法(Prune and search

剪除与问题求解无关的数据 • 剪除输入规模的n个数据, 0<<1
数据剪枝方法实例

在这里插入图片描述
凸包问题

输入:平面上的n个点的集合Q 输出: CH(Q): Q的convex hull
凸多边形P是具有如下性质多边形: 连接P内任意两点的边都在P内
命题1:给定平面点集S,如果P,Pi,Pj,PkS是四个不同的 点,且P位于三角形PiPjPk的内部或边界上,则P不是S 的凸包顶点

•A是横坐标最小的点 •B是横坐标最大的点 •AB上方的点按横坐标递减排序得SU •AB下方的点按横坐标递增排序SL •顺序输出A,SL,B,SU
在这里插入图片描述

蛮力算法删除三角形内部的点

Graham-Scan算法
当沿着Convex hull逆时针漫游时,总是向 左转 –在极坐标系下按照极角大小排列,然后逆 时针 方向漫游点集,去除非Convex hull 顶点(非左转点)。

算法Graham-Scan(Q) /* 栈S从底到顶存储按逆时针方向排列的CH(Q)顶点*/ 1. 求Q中y-坐标值最小的点p0; 2. 按照与p0极角(逆时针方向)大小排序Q中其余点,结 果为<p1, p2, …, pm>; 3. Push(p0, S); Push(p1, S); Push(p2, S); 4. FOR i=3 TO m DO 5. While NextToTop(S),Top(S)和pi形成非左移动 Do 6. Pop(S); 7. Push(pi, S); 8. RerurnS.
以上为第三章内容,主要讲解了分支的思想
记住以下三个步骤:
划分:整个问题划分为多个子问题
–求解:求解各子问题 •递归调用正设计的算法
–合并:合并子问题的解,形成原始问题的解

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值