
算法设计与分析基础
文章平均质量分 80
BKSW.
化被动为主动,收获成功!
展开
-
算法设计与分析基础(十六)
算法设计与分析基础(十六):P和NP问题P问题 (Polynominal - problem)在多项式时间内可以求解的 (存在多项式时间的 算法能够解算的)问题,称为多项式时间可解的问题NP问题 (Non-deterministic Polynominal -problem)有这样一类问题,如果你得到了问题的解,我要验证你的解是否正确,我验证所花的时间是多项式,不在意求解该问题本身所花的时间是否是多项式(可能有多项式算法,可能没有,也可能是不知道),这类问题称为NP问题。定义:一原创 2021-12-15 01:37:28 · 1325 阅读 · 0 评论 -
算法设计与分析基础(十五)
算法设计与分析基础(十五):回溯法与分支界限法要求了解即可!它对于求解问题的全部解或某些优化问题,往往是比较有效,其基本策略不同于穷举法的搜索。这种方法适用于解一些组合数相当大的问题。回溯法八皇后问题在一个 88 的国际象棋棋盘上放八个皇后,要求没有两个皇后被放在同一行,同一列,或同一对角线上。第一级顶点(1, X,X, X ),(2, X,X, X),(3,X,X, X ),(4, X,X, X)分别表示第一个皇后放在第一列、第二列、第三列、第四列,他们都表示棋盘上已有了一个皇后原创 2021-12-15 01:22:34 · 525 阅读 · 0 评论 -
算法设计与分析基础(十四)
算法设计与分析基础(十四)练习题习题一给出选择排序算法的递归描述,并分析算法的计算复杂度。解:算法思想1.在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。2.从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。3.重复第二步,直到所有元素均排序完毕。算法形式化描述:Algorithm SelectionSort(A[0 ... n-1], n, index)//输入:序列A[0 ... n-1],序列规模n,未排序序列的起始位置indexbegin if原创 2021-12-15 00:54:55 · 1153 阅读 · 0 评论 -
算法设计与分析基础(十三)
算法设计与分析基础(十三):贪心法逐步给出解的各部分,在每一步“贪婪地” 选择最好的部分解,但不顾及这样选择对整体的影响,因此一般得到的不是最优解。但对许多问题它能产生整体最优解。如单源最短路经问题,最小生成树问题等。在一些情况下,即使贪心算法不能得到整体最优解,其最终结果却是最优解的很好近似。最小生成树的唯一性:如果加权连通图的每一个权重都是唯一的,它的最小生成树也是唯一的。Prim算法算法思想:以图上的顶点为出发点,逐次选择最小生成树的顶点,策略为每次总是选择 距离最小生成树顶点集最近的顶原创 2021-12-14 22:12:46 · 1139 阅读 · 0 评论 -
算法设计与分析基础(十二)
算法设计与分析基础(十二):动态规划目录算法设计与分析基础(十二):动态规划适用条件计算二项式系数背包问题数学模型贪心法动态规划Warshall算法 与 Floyd算法Warshall算法Floyd算法最优二叉查找树思考题动态规划比较难掌握,所以不做深入学习,只讲部分内容!重点必须掌握的是:Warshall算法 与 Floyd算法!!!!!适用条件最优化原理(最优子结构性质)一个最优化策略的子策略总是最优的。一个问题满足最优化原理又称其具有最优子结构性质,使我们可以自底向上的方式从子问题原创 2021-12-14 20:48:06 · 1402 阅读 · 0 评论 -
算法设计与分析基础(十一)
算法设计与分析基础(十一)练习题习题一假定集合{9, 8, 5, 7, 6, 10}的元素依次存放在数组A[1…6]中,试用图示给出线性建堆的执行过程,其中堆中任一结点均小于其子节点。解答:最小堆构建图示习题二利用堆排序的算法思想,设计一个算法从n个元素的集合中选出第k个最小元素。a) 给出算法思想的自然语言描述;b) 已知线性建堆过程与堆顶元素的删除过程,给出算法的形式化描述;c) 分析算法的计算复杂度,并找出算法复杂度为线性时变量k应满足的条件。解法一a. 1)利用堆排原创 2021-12-14 17:55:24 · 1017 阅读 · 0 评论 -
算法设计与分析基础(十)
算法设计与分析基础(十):变治法首先是“变”, 将问题变形, 转换成另一个问题,变得更容易求解;然后是“治”,对问题的实例进行求解。变治法有三个变形:(1)实例化简——同样问题(2)改变表现——同样实例(3)问题化简——另一问题实例化简——同样问题预排序列表若有序,列表上的部分问题更容易求解。因此很多问题需要先排序,则该问题的时间效率依赖于排序算法的效率。回忆前面所学的排序算法:例子:检验数组中元素的唯一性Algorithm PEU (A[0..n-1]) // Presor原创 2021-12-14 17:32:33 · 1709 阅读 · 0 评论 -
算法设计与分析基础(九)
算法设计与分析基础(九)练习题习题一a. 为一个分治算法编写伪代码,该算法同时求出一个n元素数组的最大元素 和最小元素的值。b. 假设n = 2k,为该算法的键值比较次数建立递推关系式并求解。c. 请将该算法与同样问题的蛮力算法做一个比较。解答:a. 算法思想将数组A划分为大小大致相等的两个子数组;递归地对这两个子数组求最大元素和最小元素;将两个子数组的最大元素进行比较,返回数组A的最大元素,将其最小元素进行比较,返回数组A的最小元素;当n不超过2时,递归终止,此时最多通过一次比较就可得原创 2021-12-14 16:10:37 · 2871 阅读 · 1 评论 -
算法设计与分析基础(八)
算法设计与分析基础(八):分治法(二)二叉树遍历及其相关特性二叉树的定义:二叉树是 n (n>=0) 个结点的有限集,它或者是空集 (n=0), 或者由一个根结点,及两颗互不相交的分别称为 这个根的左子树和右子树的二叉树组成 。二叉树的遍历:所谓二叉树的遍历指的是遵循某一种次序来访问二叉树上的所有结点,使得树中每一个结点被访问了一次且只访问一次。中序遍历(Inorder Traversal)在遍历以前首先确定遍历的树是否为空,如果为空,则直接返回;否则中序遍历的算法步骤如下原创 2021-12-14 09:36:37 · 540 阅读 · 0 评论 -
算法设计与分析基础(七)
算法设计与分析(七):分治法目录算法设计与分析(七):分治法预备知识合并排序快速排序分区的例子(双向扫描)伪代码快速排序总结基本思想将规模为 N 的问题分解为 k 个规模较小的子问题,使得这些子问题相互独立并可分别求解, 再将 k 个子问题的解“合并”成原问题的解. 如子问题的规模仍很大, 则反复分解直到问题小到可直接求解为止。在分治法中, 子问题的解法通常与原问题相同,自然导致递归过程。特点算法适宜并行计算算法的计算复杂度对应如下递归方程预备知识T(n)=aT(n/b)原创 2021-12-13 22:09:11 · 890 阅读 · 0 评论 -
算法设计与分析基础(六)
算法设计与分析基础(六)练习题练习一对 f(n)=n, 并且 a = b 的情况,证明递归方程T(n)=aT(n/b)+f(n)的解为O(nlogn).证明:练习二设计求解n个数字之和的分治算法,给出伪代码描述并分析算法的计算复杂度(每次分为2个子问题)。算法思想:将n个待相加的元素分割成2个大致相等的子集合A、B;对每一个子集合分别递归求和;再将每个子集的和相加。当n等于1时递归终止,此时所求之和为该元素自身。伪代码:Algorithm Sum (A[0 ... n-原创 2021-12-13 01:16:50 · 1858 阅读 · 0 评论 -
算法设计与分析基础(五)
算法设计与分析基础(五) 减治法目录算法设计与分析基础(五) 减治法减常量插入排序直接插入排序折半插入排序(属于减常因子部分,放在次数便于比较)拓扑排序减常因子假币问题折半查找基本思想:将规模为n的问题递减为规模为n-1或n/2的子问题, 反复递减后对子问题求解, 再建立子问题的解与原问题的解的关系。减常数(如1):每次迭代规模减小:n → n-1减因子(如1/2):每此迭代规模减半:n → n/2减常量插入排序常用的插入排序有:直接插入排序、折半插入排序,它们划原创 2021-12-12 21:18:01 · 1103 阅读 · 0 评论 -
算法设计与分析基础(四)
算法设计与分析基础(四):蛮力法蛮力法是一种简单直接处理问题但是不一定高效的方法。蛮力法具有以下的特点:应用范围广,不受到实例规模的限制当要解决的问题低频率出现,并且高效算法很难设计的时候可以选用蛮力法对解决一些小规模的问题实例仍然有效可以作为衡量其他算法的参照物选择排序和冒泡排序选择排序原理扫描整个列表,找出n个元素中的最小元素;扫描最小元素以外的其他n-1个元素,找出它们中的最小元素;重复上述操作,直到所剩元素个数为1。算法的形式化描述Algori原创 2021-12-12 18:46:15 · 1151 阅读 · 0 评论 -
算法设计与分析基础(三)
算法设计与分析基础(三)练习题根据下列函数的增长次数按照从低到高的顺序对他们进行排序。解答:解答:即,该多项式的始终值为ak*n^k,则结论成立。考虑下面的算法:算法Mystery(m)//输入:非负整数nS←0for i←1 to n do S←S+i* ireturn Sa.该算法求的是什么?求的是1到n的平方和b.它的基本操作是什么?基本操作是:乘法 (或者,假定乘法和加法的时间相同,两者中的任何一个)c.该基本操作执行了多少次?n次原创 2021-12-11 14:18:48 · 5765 阅读 · 2 评论 -
算法设计与分析基础(二)
算法设计与分析基础(二):算法效率分析基础怎样评价一个算法:涉及的概念:问题的规模(大小)、基本操作、算法的最佳情况、算法的最坏情况、算法的计算复杂度、复杂度的量级、算法复杂度的下界算法效率的评定要素:应该独立于算法的描述(自然语言,框图,伪代码,高级语言)应该独立于实现算法的机器依赖算法中的基本操作和问题的大小举例分析问题:对给定的x,在n个元素互不相同的表中搜索x. 若x在表中,输出x所在的位置,否则输出-1.算法思想:将 x 依次与每个表元进行比较伪代码:Algorith原创 2021-12-11 09:50:35 · 1362 阅读 · 0 评论 -
算法设计与分析基础(一)
算法设计与分析基础(一)什么是算法?算法是有限条操作指令的集合,这些指令确定了解决问题的方法和步骤,能够对符合一定规范的输入,在有限的时间内获得所要求的输出。算法的特征确定性算法中的每一个步骤,必须有确定含义,无二义性的实现,算法所处理的输入值域必须仔细定义。多样性算法的描述形式有多种,可能存在解决同一个问题的多种解法。针对同一个问题的算法,可能基于完全不同的解题思路,而且解题速度会有显著不同。有穷性指令是有限的,每条指令的执行包含有限的工作量,算法的整个指令序列的执行会在原创 2021-12-10 21:26:10 · 956 阅读 · 1 评论