算法导论
MyLinChi
这个作者很懒,什么都没留下…
展开
-
2.2分析算法(随手笔记)
目的:选出一种最有效的算法。描述所用资源和代价的模型:随机访问机(RAM)对INSERTION-SORT的分析:1.重要概念:输入规模,运行时间。2.对于给定规模的输入,插入排序的运行时间依赖于具体的输入。 最佳情况的运行时间为an+b,最坏情况的运行时间为an2+bn+c。3.出于对运行时间的保证,往往只求最坏情况运行时间。4.一种简化的抽象:我们真正感兴趣的是运原创 2017-09-13 21:48:26 · 308 阅读 · 0 评论 -
算法导论20.2-1
问题描述 写出PROTO-vEB-MAXIMUM和PROTO-vEB-PREDECESSOR过程的伪代码问题求解PROTO-vEB-MAXIMUM(V) 注:返回V中的最大元素,或NILif V.u == 2 if V.A[1] == 1 return 1 elseif V.A[0] == 1 return 0 else return原创 2017-11-20 14:28:50 · 664 阅读 · 0 评论 -
算法导论18.1-4
问题描述 一棵高度为h的B树中,可以存储最多多少个关键字?用最小度数t的函数表示。问题求解 当所有节点的度都是2t2t时,此时有最多的结点。结点数为: 1+2t+(2t)2+...+(2t)h=1−(2t)h+11−2t1+2t+(2t)^2+...+(2t)^h=\frac{1-(2t)^{h+1}}{1-2t} 此时,每个结点包含2t−12t-1个关键字,所以所有的关键字数为: (原创 2017-11-15 14:55:35 · 429 阅读 · 0 评论 -
算法导论20.2-2
问题描述 写出PROTO-vEB-DELETE的伪代码。通过扫描簇内的相关位,来更新相应的summary位。并且你实现的伪代码的最坏情况运行时间是多少?问题求解PROTO-vEB-DELETE(V,x) 注:删除V中的xif V.u == 2 V.A[x]=0else PROTO-vEB-DELETE(V.cluster[high(x)],low(x)) isEmpty =原创 2017-11-20 16:06:21 · 531 阅读 · 0 评论 -
算法导论20.2-6
问题描述 写出一个创建proto-vEB(u)结构的伪代码问题求解 proto-vEB(u)结构分为两种情况讨论: ①如果u=2,那么该结构只包含一个u和一个两位的位向量A; ②如果u>2,那么该结构的除了底层结点外都包含一个u、一个proto-vEB(u√\sqrt u)结构和一个位向量cluster(其每个元素指向一个proto-vEB(u√\sqrt u))。 因此,可以得到pro原创 2017-11-20 17:03:10 · 286 阅读 · 0 评论 -
算法导论21.1-1,21.1-2,21.1-3
21.1-1问题描述 假设CNNECTED-COMPONENTS作用于一个无向图G=(V,E),这里V={a,b,c,d,e,f,g,h,i,j,k}V=\{a,b,c,d,e,f,g,h,i,j,k\},且E中的边以如下的顺序处理:(d,i),(f,k),(g,i),(b,g),(a,h),(i,j),(d,k),(b,j),(d,f),(g,j),(a,e)(d,i),(f,k),(g,i)原创 2017-11-21 15:25:29 · 1206 阅读 · 0 评论 -
算法导论18.2-4
问题描述 假设关键字{1,2,…,n}被插入一棵最小度数为2的空B树中,那么最终的B树有多少个结点?问题求解 把关键字{1,2,…,11}一次插入B树中的变化如下所示: 可以发现,由于每次插入的树都比前面的大,因此新关键字永远是放到了最右边的结点中。除了最右边一直往下的路径上的结点(记为R)中的关键字数有可能大于1外,其他所有结点的关键字数量都是1.当所有原创 2017-11-16 11:55:55 · 723 阅读 · 1 评论 -
算法导论22.1-7
假设A=BBTA=BB^T,对于AA中的元素aija_{ij}分两类讨论。 ①当i=ji=j时,用BB的第ii行乘以BTB^T的第jj列(也就是BB的第jj行) aij=∑k=1|E|b2ika_{ij}=\sum_{k=1}^{|E|}b_{ik}^2 也就是说对BB的第ii行元素求平方和。b2ik∈{0,1}b_{ik}^2\in\{0,1\}且只有结点ii与第kk条边相连时才取1,因此a原创 2017-11-22 15:35:17 · 561 阅读 · 0 评论 -
算法导论22.3-1
问题描述 画出一个3*3的网格,行列的抬头分别标记为白色、灰色和黑色。对于每个表格单元(i,j),请指出在对有向图进行深度优先搜索的过程中,是否可能存在一条边,连接一个颜色为i的结点和一个颜色为j的结点。对于每种可能的边,指明该种边的类型。另外,请针对无向图的深度优先搜索在制作一张这样的网格。问题求解 深度优先搜索可以对输入图的边进行分类: 树边:在深度优先森林GπG_\pi中的边。 后向原创 2017-11-25 16:51:03 · 816 阅读 · 0 评论 -
松弛操作的性质
在单源最短路径的求解算法中,往往涉及松弛操作,而松弛操作是证明单源最短路径算法的基石。相关概念 最短路径:假设从结点u到结点v的最短路径权重为δ(u,v)\delta(u,v),那么从结点u到结点v的最短路径定义为任何一条权重ω(p)=δ(u,v)\omega(p)=\delta(u,v)的从u到v的路径p。原创 2017-12-05 20:25:08 · 3545 阅读 · 1 评论 -
算法导论24.1-2,24.1-3,24.1-4
24.1-2 证明推论24.3: 设G=(V,E)G=(V,E)是一带权重的源结点为s的有向图,其权重函数为w:E→Rw:E\rightarrow R。假定图G不包含从源节点s可以到达的权重为负值的环路,则对于所有结点v∈Vv\in V,存在一条从源结点到结点v的路径当且仅当BELLMAN-FORD算法终止时有v.d<∞v.d<\infty。 证明: 1。1^。充分性 如果存在一条从源结点原创 2017-12-06 14:44:44 · 4481 阅读 · 2 评论 -
算法导论22.4-2
问题描述 请给出一个线性时间的算法,算法的输入为一个有向无环图G=(V,E)G=(V,E)以及两个结点s和t,算法的输出是从结点s到结点t之前的简单路径的数量。问题解答 由于除了s与t相等的情况外,每一条从u到v的路径必定经过u的邻接结点,所以∑Pu−>v\sum P_{u->v}就是u的每个邻接结点到v的路径数的和。可以用如下伪代码表示: int SIMPLE-PATH-NUM(u,v)原创 2017-11-27 20:15:04 · 1930 阅读 · 2 评论 -
算法导论26.1-4
26.1-4问题描述 设ff为网络的一个流,设α\alpha为一个实数,则αf\alpha f称为标量流积,该标量流积是一个从V×VV\times V到R的一个函数,其定义如下: (αf)(u,v)=α⋅f(u,v)(\alpha f)(u,v)=\alpha \cdot f(u,v) 证明:网络中的流形成一个凸集。也就是说,证明:如果f1f_1和f2f_2为两个流,则αf1+(1−α原创 2018-01-09 10:37:50 · 1491 阅读 · 0 评论 -
算法导论-证明强连通分量算法
概念 强连通分量:有向图G=(V,E)G=(V,E)的强连通分量是一个最大结点集合C⊆VC\subseteq V,∀u,v∈C\forall u,v\in C,u和v是可以相互到达的。算法伪代码 STRONGLY-CONNECTED-COMPONENTS(G)call DFS(G) to compute finishing times u.f for each vertex ucomput原创 2017-11-28 11:21:10 · 1598 阅读 · 0 评论 -
算法导论17.1-3
问题描述 假定我们对一个数据结构执行一个由nn个操作组合成的操作序列,当ii严格为2的幂时,第ii个操作的代价为ii,否则代价为1。使用聚合分析确定每个操作的摊还代价。问题求解 假设cic_i是第ii个操作的代价,则 ci={ii是2的幂1其他\begin{equation}c_i=\left\{\begin{aligned}i \quad\quad i是2的幂 \\1\quad\q原创 2017-11-14 09:43:31 · 2418 阅读 · 0 评论 -
算法导论16.3-5
问题描述 证明:如果我们将字母表中字符按频率单调递减排序,那么存在一个最优编码,其码字长度是单调递增的。问题分析 任务是证明存在一个码字长度单调递增的最优编码,那么如果可以从它的反例推出码字长度单调递增的编码是最优编码,则问题可以求证。问题求解 ①假设字母表为:{c1,c2,...cn}\{c_1,c_2,...c_n\},字母出现的频率用ff表示,字母对应的码字长度用dd表示。则用数学的原创 2017-11-13 10:42:41 · 1701 阅读 · 1 评论 -
算法导论------渐近记号Θ、Ο、o、Ω、ω详解
目录:1.渐近精确界记号:Θ(big-theta)2.渐近上界记号 :O(big-oh)3.渐近下界记号 :Ω(big-omege)4.非渐近紧确上界:o(小-oh)5.非渐近紧确下界:ω(小-omege)6.渐近记号Θ、Ο、o、Ω、ω关系7.参考资料1.渐近精确界记号:Θ(big-theta) 假设算法A的运行时间表达式T1(n)为:T1(n)=30n4+2转载 2017-09-18 22:18:52 · 2216 阅读 · 0 评论 -
常用排序算法的分类
(由算法导论2.1中的原址排序引出)1、按照待排得记录是否全部被放置到内存中,可以分为内排序与外排序;2、按照是否需要辅助空间,可以分为原址排序与非原址排序3、按照两个相等的数排序后相对位置是否发生变化,可以分为稳定排序和不稳定排序4、按照是否有比较的排序,可以分为基于比较的排序与非基于比较的排序,其中基于比较的排序又可以分为:(1)交换排序:冒泡排序、快速排序(2)插转载 2017-09-12 23:08:45 · 427 阅读 · 0 评论 -
取整函数的性质
1、定义:取整函数是一类将实数映射到相近的整数的函数。2、分类:常用的取整函数有两个,分别是下取整函数和上取整函数。3、形式:下取整函数在数学中一般记作,在计算机科学中一般记作 floor(x);上取整函数在数学中一般记作,在计算机科学中一般记作ceil(x)。4、性质:(仅列举计算机学习中经常用到的性质) a) ,转载 2017-10-21 14:12:28 · 5993 阅读 · 0 评论 -
算法导论15.5-1的答案及C++实现
①设计的伪代码CONSTRUCT-OPTIMAL-BST(root)如下CONSTRUCT-OPTIMAL-BST(root,i,j,flag) if i<=j if flag == 1 print k root[i,j]为根 elseif flag == 0 print k root[i,j]为k j+原创 2017-11-08 13:33:59 · 1764 阅读 · 0 评论 -
关于算法导论15.4的步骤2中为什么可以通过求两者的最大值来合并定理15.1
在算法导论(第三版)15.4的步骤2中的第一段有语句“如果xm != yn,我们必须求解两个子问题:求Xm-1和Y的一个LCS与X和Yn-1的一个LCS。两个LCS较长者即为X与Y的一个LCS。” 读到这里,不知读者是否也存在疑惑:为什么两个的较大值可以代替对定理15.1中的2、3点呢?就是说如何由定理15.1中的2、3点推出两个LCS较长者即为X与Y的一个LCS呢?原创 2017-11-08 15:51:11 · 309 阅读 · 0 评论 -
算法导论中LCS的C++实现程序
LCS即最长公共子序列,输入为两个串X、Y,输出为X与Y的最长公共子序列。其求解方法是动态规划,即原序列的最长公共子序列依赖于前缀的最长公共子序列。具体的实现原理参考算法导论(第三版)222页-226页,本文给出它的C++实现程序:#include#include#define NUM 20using namespace std;int c[NUM][NUM];char b[NUM]原创 2017-11-08 16:54:15 · 1758 阅读 · 0 评论 -
算法导论思考题15.2(最长回文子序列)
最长回文子序列的求解可以转化为LCS的求解。如:对于输入的串X,对其反转后得到串Y,则X与Y的LCS即为X的最长回文子序列。因此只需要对LCS的程序稍作修改便可以得到求解最长回文子序列的程序:#include#include#include#define NUM 50using namespace std;int c[NUM][NUM];char b[NUM][NUM];void原创 2017-11-08 17:14:37 · 761 阅读 · 0 评论 -
算法导论16.1-1
算法导论16.1-1题目要求为活动选择设计一个动态规划算法。1. 问题描述 假定有一个n个活动的集合S={a1,a2,...,an}S=\{a_1,a_2,...,a_n\},这些活动使用同一个资源,而这个资源在某个时刻只能供一个活动使用。如果任务aia_i 被选中,那么发生在[si,fi)[s_i,f_i)期间。如果两个活动aia_i和aja_j不重叠,即si≥fjs_i\geq f_j或sj原创 2017-11-10 10:11:23 · 1614 阅读 · 1 评论 -
算法导论16.1-2
16.1-2问题描述 不再一直选择最早结束的活动,而是选择最晚开始的活动,前提仍然是与之前选出的所有活动均兼容。描述利用该方法设计的贪心算法,并证明算法会产生最优解。贪心选择 令Sk={ai∈S:fi≤sk}S_k=\{a_i\in S:f_i \leq s_k\}即aka_k开始前结束的任务集合。当我们做出贪心选择ala_l,那么剩下的SlS_l是唯一需要求解的子问题。我们先证明“如果am原创 2017-11-10 15:46:34 · 4926 阅读 · 0 评论 -
算法导论16.2-1
问题描述 证明:分数背包问题具有贪心选择性质。问题求解 (本求解过程来源于对英文答案的翻译) ①贪心选择性质: 全局最优解可由局部最优(贪心)选择实现。换句话说,当我们考虑如何做出当前问题看起来最好的选择,而不考虑子问题的结果。 ②证明: 假设II为分数背包问题的一个实例,nn是商品的数量,viv_i是ithi^{th}商品的价值,wiw_i是ithi^{th}商品的重量,WW是背包的翻译 2017-11-11 11:33:38 · 1243 阅读 · 0 评论 -
算法导论16.2-2
问题描述 设计动态规划算法求解0-1背包问题,要求运行时间为O(nW)O(nW),nn为商品数,WW是小偷能放进背包的最大商品总重量。0-1背包问题用公式表示为: maximize∑i=1nvixisubjectto∑i=1nwixi≤Wxi∈{0,1}maximize \sum_{i=1}^nv_ix_i\quad subject\quad to \sum_{i=1}^nw_ix_i\leq原创 2017-11-11 16:11:42 · 1774 阅读 · 0 评论 -
算法导论16.2-5
问题描述 设计一个高效算法,对实数线上给定的一个点集{x1,x2,...,xn}\{x_1,x_2,...,x_n\},求一个单位长度闭区间的集合,包含所有给定的点,并要求次集合最小。证明你的算法是正确的。问题分析 ①求解单位长度闭区间集合问题的最优子结构 首先对点集{x1,x2,...,xn}\{x_1,x_2,...,x_n\}按递增顺序排列,得到点集{y1,y2,...,yn}\{y_原创 2017-11-12 16:42:03 · 4259 阅读 · 0 评论 -
算法导论16.3-3
问题描述 如下所示,8个字符对应的出现频率是斐波那契数的前8个数,次频率集合的赫夫曼编码是怎么样的? a:1b:1c:2d:3e:5f:8g:13h:21a:1\quad b:1\quad c:2\quad d:3\quad e:5\quad f:8\quad g:13\quad h:21 你能否推广你的结论,求频率为前n个斐波那契数的最优前缀码?问题求解 ① h:0g:10f:110e原创 2017-11-13 09:31:55 · 5512 阅读 · 0 评论 -
矩阵运算
矩阵的基本性质 1.逆:n×nn\times n矩阵AA的逆A−1A^{-1}(如果存在)定义为满足AA−1=In=A−1AAA^{-1}=I_n=A^{-1}A的n×nn\times n的矩阵。若矩阵AA有逆,则称AA为可逆矩阵或者非奇异矩阵;否则称AA为不可逆矩阵或者奇异矩阵。 2.线性相关:若存在不全为0的相关系数c1,c2,...,cnc_1,c_2,...,c_n使得c1x1+c2x原创 2018-01-30 15:55:33 · 869 阅读 · 0 评论