赞
踩
复习参考:
《算法设计与分析基础》潘彦译
【北大公开课】 算法设计与分析
【算法设计与分析】期末考试知识总结(知识超浓缩版)
《算法分析与设计》复习笔记
【期末知识点整理】算法设计与分析
算法设计与分析——算法复杂性分析
算法是一系列解决问题的明确指令。换言之,对于符合一定规范的输入,能够在有效时间内获得要求的输出。
算法:具有输入、输出、确定性、有限性。
程序(算法+数据结构=程序):具有输入、输出、确定性(注意:程序可以不满足有限性,如操作系统是在无限循环中执行的程序)。
衡量算法好坏的方法:正确性(有限时间正确结果)、简明性、效率(时间、空间)、最优性
算法的基本特征
背包问题
渐进意义下的符号:
Ο,表示渐进上界(tightness unknown),小于等于的意思,近似复杂度。
Ω,表示渐进下界(tightness unknown),大于等于的意思,近似复杂度。
Θ,表示确界,既是上界也是下界(tight),就是相等,准确的复杂度。
常见的时间复杂度大小关系:O(1) < O(logn) < O(n) < O(nlogn) < O(n2) < O(n3) < O(2n) < O(n!) < O(nn)
分析非递归算法效率的通用方案
分析递归算法时间效率的通用方案
对于递归式T(n) = aT(n/b) + f(n),比较根节点代价之和f(n)和叶子节点代价之和的大小
也就是在比较合并成本和叶子成本,究竟谁更大。粗略的理解如下:
① f(n)多项式意义大于 ,不止渐进大于且相差n^ε,所以总体代价以f(n)为主;(这里忽略了对正则条件的理解,感觉不影响使用,想了解深层原理可以看一下课本)
② f(n)与 等阶,最后的结果要再乘以logn
③ f(n)多项式意义小于,不止渐进小于且相差n^ε,所以总体代价为
这三种情况画在线段上如下图所示,所以中间哪些无法覆盖的部分就是这个定理无法涵盖的情况。具体的讲解还是可以看看那个北航老师的视频。
注意:要使用第三种情况,需要满足条件验证,其中c<1
【概述】蛮力法是一种简单、暴力、直接解决问题的方法,通常直接基于问题的描述和所涉及的概念定义,依赖计算机的计算速度直接求解。
【步骤】搜索所有的解空间、搜索所有的路径、直接计算、模拟和仿真。
【理解】有的暴力枚举即可,有的直接模拟即可。
时间复杂度为O(nm),其中n是主字符串的长度,m是模式字符串的长度
空复O(1)
暴力法 时复Θ(n2)
最近对问题的一个最重要的应用是统计学中的聚类分析。(填空)
找出一条n个给定城市间的最短路径,其中要求回到出发的城市&每个城市都只访问一次。则该问题可以理解为求一个图的最短哈密顿回路问题。
哈密顿图(哈密尔顿图)(英语:Hamiltonian graph,或Traceable graph)是一个无向图,由天文学家哈密顿提出,由指定的起点前往指定的终点,途中经过所有其他节点且只经过一次。在图论中是指含有哈密顿回路的图,闭合的哈密顿路径称作哈密顿回路(Hamiltonian cycle),含有图中所有顶点的路径称作哈密顿路径(Hamiltonian path)
时复 O(2n)
有n个任务分配给n个人执行,一个任务对应一个人。给出对于每个任务,这n个人完成分别的成本。求总成本最小的分配方案。
邻接矩阵O(n2)
邻接表O(n+e)
空间复杂度相同,都是O(n)
使问题变成与原问题相同的但是规模更小的子问题,解决这个子问题,延伸子问题的解决方法,从而得到原问题的解决方案
减一
删去入度为0的点
在n枚外观相同的硬币中,有一枚是假币。在一架天平上,可以比较任意两组硬币,即通过观察天平是向右倾还是左倾或中间,课判断哪组更重。假设假币较轻。
进一步优化:增加堆数
折半的优化
where:有序表
【概述】对于一个规模为n的问题,若该问题可以容易的解决(比如n的规模较小)则直接解决,否则将其分解为k个规模较小的子问题(即具有最优子结构性质),这些子问题互相独立且与原问题形式相同,递归地解决这些子问题,然后将各子问题的解合并得到原问题的解。
优点:稳定性
缺点:需要线性的额外空间
平均性能O(nlogn)
四次变三次,减少乘法次数
=》通过代数变换,减少a(规约后的子问题个数)
1、问题描述
求空间内,最近的两个点(最简单的就是一维问题,然后可以上升为二维的)
2、一维的最近点对的解题思路
同理,先分析是否满足分治法的适用条件:可以把空间分成两部分,求每个小空间的最近距离,但是在合并的时候,交界处比较难处理,但是也算是满足条件
合并策略:如果说两个点集的交界处有更近的点,那找到这俩个点,需要扫描的范围其实不会超过,两边的最近距离d的二倍,画个图如下所示,这2d的范围中,最多只可能会有4个点,如果说p1和p2之间还有其他的的点,那就会构成比d更近的距离了
所以,合并的时候,我们需要在从分割点 出发 分别往左右扫描扫描到d的距离,看看是否会出现更近的情况就可以啦
3、二维最近点对问题的解题思路
有了一维的基础,再考虑二维的问题就好理解多了,直接来分治法求解过程:
(1)预处理:将点集P中的点,按照X Y坐标从小到大顺序排列
(2)分解:计算x坐标中位数m,选择一条垂线L:x=m,将点集P分成左右两部分PL和PR,分解到最后的递归出口,剩1~3个点时,就可以直接计算了
(3)解决:递归调用该算法,分别找PL和PR中的最近点对及距离,距离分别记为δL, δR,置δ = min(δL, δR)
(4)合并:考察带状区域中的点
① 找出以L为中心线,宽度为2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。