
算法导论
文章平均质量分 93
在这个专栏中,我们将一起探索计算机科学中最重要、最经典的一门课程——算法导论。算法导论是一门研究高效解决计算问题的理论基础课程,它涵盖了从基本的数据结构到高级的搜索、排序、图论等算法的设计和分析。通过学习算法导论,您将掌握一系列强大的算法工具,提高解决问题的能力,并为求职和实际工作打下坚实的基础。
gengduc
Keep Coding!
展开
-
《算法设计与分析》复习提纲
文章目录《算法设计与分析》复习提纲1 引言(ch1)1.1 什么是算法及其特征1.2 问题实例和问题规模2 算法初步(ch2)2.1 插入排序算法2.2 算法复杂度及其度量3 函数增长率(ch3)3.1 O\OmicronO符号,Ω\OmegaΩ符号,Θ\ThetaΘ符号O\OmicronO符号Ω\OmegaΩ符号Θ\ThetaΘ符号3.2 标准复杂性函数及其大小关系3.3 和式界的证明方法4 递归关系式(ch4,Sch1)4.1 代入法4.2 迭代法4.3 主定理4.4 补充:递归与分治法4.4.1 Fi原创 2023-07-02 22:17:03 · 1258 阅读 · 0 评论 -
多段图规划
的最短路径相矛盾,所以原问题满足最优性原理。多段图问题满足最优性原理。的最短路径,但其子路径。,显然,该路径长度小于。原创 2023-07-05 16:47:15 · 102 阅读 · 0 评论 -
【补充】回溯法
上世纪70年代中期开始,国外一些学者致力于研究随机搜索求解困难的组合问题,将随机过程引入搜索;这种以深度优先的方式系统地搜索问题的解的算法称为回溯法,它适用于解一些组合数较大的问题。随机搜索的一个成功例子:判定一个很大的数是不是素数,获得了第一个多项式时间的算法。提高搜索效率的思考:随机搜索。原创 2023-07-02 22:04:02 · 98 阅读 · 0 评论 -
【补充】二项树与二项堆
二项树Bk是一种递归定义的有序树。如下图所示,二项树B0只包含一个结点,二项树Bk由两棵二项树Bk−1连接而成:其中一棵树的根是另一棵树的根的最左孩子。Bk2kkiCkii012⋯kkk−1k−2⋯0iBi:在一棵包含n个结点的二项树中,任意结点的最大度数为logn。原创 2023-06-30 20:16:02 · 203 阅读 · 0 评论 -
算法导论-第34章-计算模型与NP完全性
非形式地说,算法是为实现某个任务而构造的简单指令集。这是一个非严格的算法定义。1900年,Hilbert在巴黎举行的世界数学家大会上提出了23个数学问题,其中第10个问题是要设计一个算法来测试多项式是否有整数根,他没有用算法这个术语,而用这样一句短语: “通过有限多次运算就可以决定的过程”。现在严格地讲,一个问题算法可解的等于该问题在图灵机上可解(可判断)。原创 2023-06-30 23:43:29 · 319 阅读 · 0 评论 -
算法导论-第33章-计算几何学(最近点对问题)
在n≥2个点的集合Q中寻找最近点对的问题,“最近”指的是欧几里得距离最小,即点p1x1y1和p2x2y2之间的欧几里得距离dx1−x22y1−y22最小。集合Q中的两个点可能会重合,这种情况下,它们之间的距离为0。:最近点对问题可以应用于交通控制系统中。为检测出潜在的碰撞事故,在空中或海洋交通控制系统中,需要识别出两个距离最近的交通工具。求平面上n个顶点的最近点对问题,对文件data.txt。原创 2023-05-16 10:59:06 · 600 阅读 · 0 评论 -
算法导论-第32章-字符串匹配
字符串匹配算法在文本文件中查找模式、DNA序列搜寻、网络引擎搜索中都有应用。字符串匹配问题的形式化定义:假设文本是一个长为 nnn 的数组 T[1..n]T[1..n]T[1..n],而模式是一个长度为 mmm 的数组 P[1..m]P[1..m]P[1..m],其中 m≤nm \le nm≤n。字符数组 PPP 和 TTT 通常称为字符串。如果 0≤s≤n−m0 \le s \le n-m0≤s≤n−m,并且 T[s+1..s+m]=P[1..m]T[s+1..s+m]=P[1..m]T[s+1..原创 2023-07-02 21:59:02 · 488 阅读 · 0 评论 -
算法导论-第31章-数论算法
本章将处理大整数。“大输入”通常指包含“大整数”的输入,而不是包含“很多整数“的输入。因此,我们利用输入所需的位数来度量输入的大小,而不仅仅是输入中整数的数目。给定k个整数输入a1a2⋯an,如果算法可以在关于loga1loga2⋯logan的多项式时间内完成,即算法在关于二进制编码后的输入长度的多项式时间内完成,则称该算法为。(不是很懂🤣)原创 2023-07-01 21:36:38 · 516 阅读 · 0 评论 -
算法导论-第23章-最小生成树
对于无向图GVE,存在一个能够连接所有顶点的无环子集T⊆E,由于T无环且连接所有顶点,因此T一定为一棵树,被称为。无向图GVE的所有生成树都恰有∣V∣−1条边。设uv∈E的权重为wuv,生成树的权重为wT∑uv∈Ewuv,所有生成树中权重最小的生成树称为。和。原创 2023-06-30 21:53:27 · 258 阅读 · 0 评论 -
算法导论-第22章-BFS和DFS
本章将介绍图的表示和图的搜索。图的搜索指的是跟随图中的边来访问图中的每个结点。图搜索是整个图算法领域的核心。22.1介绍图的两种表示方法:邻接链表和邻接矩阵。22.2介绍广度优先搜索(BFS)。22.3介绍深度优搜索(DFS)。原创 2023-06-28 13:45:17 · 184 阅读 · 0 评论 -
算法导论-第21章-用于不相交集合的数据结构
21.1节描述不相交集合数据结构支持的各种操作,并给出一个简单的应用。21.2节使用一种简单链表结构来实现不相交集合。21.3节使用有根树来实现,使用树表示的运行时间理论上好于线性时间,然而对于所有的实际应用它确是线性的。一个不相交集合数据结构(disjoint-set data structure)维护了一组不相交动态集的集合 sets={S1,S2,⋯ ,Sk}sets = \{S_1, S_2, \cdots, S_k\}sets={S1,S2,⋯,Sk}。用集合中的某个成员作为代表(repre原创 2023-06-13 21:48:09 · 392 阅读 · 0 评论 -
算法导论-第17章-摊还分析
本章主要设计理论分析,感觉第3版讲的不是很好(也有可能是翻译的语句不通顺),这里搬运了知乎上的文章。本章前三节将介绍三种在摊还分析中最常用的方法。16.1 节将介绍聚合分析(aggregate analysis)。16.2 节将介绍核算法(accounting method)。16.3 节将介绍势能法(potential method)。每个方法都将用两个例子进行测试,一个例子是具有 MULTIPOP 操作的栈,另一个例子是具有 INCREMENT 操作的二进制计数器。原创 2023-06-27 21:46:54 · 591 阅读 · 0 评论 -
算法导论-第16章-贪心算法
求解最优化问题时候通常要经过一串步骤,每一步都有多种选择。对于很多问题来说,用动态规划求最优解就是杀鸡用牛刀,可以使用更简单的算法。(greedy algorithm)在每一步都做出当时看起来是最佳的选择。也就是说,它综述做出局部最优的选择,希望通过局部最优解得到全局最优解。。16.1节将介绍。16.2节将介绍贪心算法的基本原理。16.3节将介绍贪心算法的应用:设计一种数据压缩编码,即**哈夫曼(Huffman)**编码。原创 2023-06-07 15:32:20 · 548 阅读 · 0 评论 -
算法导论-第15章-动态规划
(dynamic programming)的思想是和。动态规划方法通常用来求解这类问题可以有很多可行的解,每个解都有一个值,我们希望寻找具有最优值(最小值或最大值)的解。我们称这样的解为问题的(an optimal solution),而不是(the optimal solution),因为可能有多个解都是最优值。步骤1~3是动态规划求解问题的基础。如果我们仅仅需要最优解的一个值,而不是最优解本身,可以忽略步骤4。如果要构造最优解,则必须执行步骤4,步骤3中维护的一些额外信息是构造最优解的基础。原创 2023-07-05 21:37:32 · 722 阅读 · 0 评论 -
算法导论-第14章-数据结构的扩张
OS树,又称顺序统计树(Order-Statistic tree),是一棵红黑树在每个结点上扩充一个sizesizesize属性而得到的,如下图所示。在红黑树的结点xxx中,除了xkeyxcolorxleftxrightxpxkeyxcolorxleftxrightxp之外,还包括xsizex.sizexsize属性,这个属性包含了以xxx为根的子树(包括xxx。原创 2023-05-30 17:13:46 · 196 阅读 · 0 评论 -
算法导论-第13章-红黑树
第12章介绍了一棵高度为h的二叉搜索树,它可以支持任何一种基本动态集合操作,如SEARCHSUCCESSORMINIMUMMAXIMUMINSERT和DELETE等,其时间复杂度均为Oh。因此,如果搜素树的高度较低时,这些操作会执行的较快。然而,如果树的高度较高时,这些操作可能不比在链表上执行得快。(red-black tree)是“平衡”搜索树的一种,可以保证在最坏情况下基本动态集合操作得时间复杂度为Ologn。原创 2023-05-21 23:49:59 · 371 阅读 · 0 评论 -
算法导论-第9章-中位数和顺序统计量
一个包含n个元素的集合中的第i个指集合中的第i小的元素。是第1个顺序统计量(i1),是第n个顺序统计量(in9.1节将讨论从集合中找出最小值和最大值的问题。9.2节将分析一个实用的算法,它在元素互异的条件下可以达到On的期望运行时间。9.3节将给出一个更具有理论意义的算法,最坏情况下的运行时间为On。原创 2023-06-29 20:47:34 · 247 阅读 · 0 评论 -
算法导论-第8章-线性时间排序
此前我们已经学习了几种Onlogn的排序算法,这些排序算法都有一个有趣性质,在排序的最终结果中,各元素的次序依赖于它们之间的比较,我们将这类排序称为。8.1节将要证明nΩnlogn。(radix sort)、和这些排序通过其它方法来确定排序顺序。原创 2023-05-07 20:19:01 · 274 阅读 · 0 评论 -
算法导论-第7章-快速排序
读取data.txt文件,文件格式如下:第一行为数组长度,第二行为数组(int类型)的内容,将结果数组的数据写在一行内,每个数组中间以空格隔开,输出为sorted.txt。作为枢轴(pivot)(不一定非要选择数组最后一个元素作为枢轴,也可以选择其他元素),并围绕它来划分子数组。思想:在一次分割结束后,将与本次基准相等的元素聚集在一起,再分割时,不再对聚集过的元素进行分割。在最好的情况下,每次划分所取的基准都恰好是中值,即每次划分都产生两个大小为。:取数组的最后一个元素为枢轴,使用指针。原创 2023-05-04 21:32:22 · 238 阅读 · 0 评论 -
算法导论-第6章-堆排序
可以看作完全二叉树,其存储结构通常是Alength表示数组元素的个数;Aheap−size表示有多少个堆元素在数组中,0≤Aheap−size≤Alength。假设树的根结点为A1,给定一个结点的下标i和iAPARENTi)]≥AiiAPARENTi)]≤Ai本章中的堆排序以大根堆为例,优先队列以小根堆为例。原创 2023-04-27 23:37:22 · 237 阅读 · 0 评论 -
算法导论-第4章-分治法
回忆在2.3.1中,归并排序使用了分治法。在分治法中,当递归地求解一个问题,在每层递归中执行如下三步骤:分解(Divide):将问题划分为子问题,子问题的形式与原问题一样,只是规模更小。解决(Conquer):递归地求解出子问题。如果子问题的规模足够小,则停止递归,直接求解。合并(Combine):将子问题的解组合成原问题的解。递归情况(recursive case):子问题足够大,需要递归求解。基本情况(base case):子问题足够小,可以直接求解,不再需要递归。前言本章中介绍三个原创 2023-04-27 23:34:50 · 441 阅读 · 0 评论 -
算法导论-第3章-描述运行时间
O\OmicronO。原创 2023-04-18 18:49:59 · 203 阅读 · 1 评论 -
算法导论-第2章-算法基础
文章目录第2章 算法基础2.1 插入排序(Insertion sort)循环不变式与插入排序的正确性2.2 分析算法(Analyzing algorithms)插入排序算法时间分析最坏情况与平均情况分析2.3 设计算法2.3.1 分治法2.3.2 分析分治算法第2章 算法基础2.1 插入排序(Insertion sort)输入:nnn个数的序列<a1,a2,⋯ ,an><a_1,a_2,\cdots,a_n><a1,a2,⋯,an>输出:输入序列的一个排列&原创 2023-04-18 18:47:20 · 211 阅读 · 0 评论 -
算法导论-第1章-算法在计算中的作用
并产生某个值或某个值的集合作为。原创 2023-04-18 18:45:29 · 322 阅读 · 0 评论