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

本章主要讲解分治算法,有以下几个小结。
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)
本科算法设计与分析第三章复习总结_第1张图片

大整数乘法
中位数的线性时间选择算法
Input: 由n个数构成的多重集合X
本科算法设计与分析第三章复习总结_第2张图片

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

本科算法设计与分析第三章复习总结_第3张图片
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中找出最接近点对

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

本科算法设计与分析第三章复习总结_第5张图片

本科算法设计与分析第三章复习总结_第6张图片

本科算法设计与分析第三章复习总结_第7张图片
本科算法设计与分析第三章复习总结_第8张图片
还可证明此定理正确性。

数据剪除方法(Prune and search

本科算法设计与分析第三章复习总结_第9张图片
数据剪枝方法实例

本科算法设计与分析第三章复习总结_第10张图片
凸包问题

输入:平面上的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
本科算法设计与分析第三章复习总结_第11张图片

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

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

算法Graham-Scan(Q) /* 栈S从底到顶存储按逆时针方向排列的CH(Q)顶点*/ 1. 求Q中y-坐标值最小的点p0; 2. 按照与p0极角(逆时针方向)大小排序Q中其余点,结 果为; 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.
以上为第三章内容,主要讲解了分支的思想
记住以下三个步骤:
划分:整个问题划分为多个子问题
–求解:求解各子问题 •递归调用正设计的算法
–合并:合并子问题的解,形成原始问题的解

你可能感兴趣的:(算法,复习总结)