算法复习整理(呕心之作)
《算法设计与分析》复习提纲2011.06.121 引言(ch1)1.什么是算法及其特征算法是通过一系列有限的指令集构成的对特定问题进行求解的计算机执行描述。
算法特征:输入、输出、有限性、确定性、通用性2.问题实例和问题规模问题实例:解决一个问题所需要的所有输入问题规模:算法输入实例的大小2 算法初步(ch2)1.插入排序算法INSERT_SORT(A)for j<-2 to length[A]Do key<-A[j]//将A[j]插入到已排序的数列A[1..j-1]i<-j-1while i>0 and A[i]>keydo A[i+1]<-A[i]//给A[j]腾出位置i<-i-1A[i+1]<-key//找到位置插入key2.算法复杂性及其度量(1)时间复杂性和空间复杂性;一个算法所需要的时间通常和输入的规模成同步增长,所以我们通常把算法运行的时间写成输入规模的某种形式,称为时间复杂度。
算法的空间复杂度通常是指算法所需要的内存存储空间的大小的量级,通常也写成输入规模的某种形式。
(2)最坏、最好和平均情形复杂性;算法的最坏运行时间是指在任何输入情况下运行时间的一个上界。
最好的复杂度是指在任何输入情况下运行时间的一个下界。
平均时间复杂度是指算法运行时间的数学期望。
3.插入排序的最坏、最好和平均时间插入排序的最坏时间复杂度是O(n2)发生在输入是逆序的情况下,最好时间复杂度是O(n)发生输入是顺序的情况下。
平均时间复杂度同O(n2)。
3.归并排序算法及其时间复杂性MERGE(A,p,q,r)//将两个排好序的数组合并n1 <-q-p+1n2<-r-q//r-(q+1)+1create arrays L[1..n1+1] and R[1..n2+1]//建立两个数组for i<-1 to n1do L[i]<-A[p+i-1]for j<-1 to n2do R[j]<-A[q+j]//A[(q+1)+j-1]L[n1+1]<-max//Max表示无穷大L[n2+1]<-max//用作哨兵i<-1j<-1for k<-p to rdo if L[i]<=R[j]then A[k]<-L[i]i<-i+1else A[k]<-R[j]j<-j+1MERGE-SORT(A,p,r)//归并排序采用分治发,分解+解决+合并if p<rthen q<-(p+r)/2//下取整,分解MERGE-SORT(A,p,q)//解决一半MERGE-SORT(A,q+1,r)//解决另一半MERGE(A,p,q,r)//合并时间复杂度为O(nlogn)3函数增长率(ch3)1.渐近记号O、Ω、θ的定义及其使用θ:渐紧界,即存在n0,c1,c2,当n>n0时有c1g(n)=<f(n)<=c2g(n)(注:证明的时候找出n0,c1,c2即可)O:渐进上界,即存在n0,c当n>n0时有0=<f(n)<=cg(n)(注:证明的时候找出n0和c即可,千万不要忘记还要证明0=<f(n)的情况,会影响n0的取值)Ω:渐进下界,即存在n0,c,当n>n0的时候有f(n)>=cg(n)成立((注:证明的时候找出符合条件的n0和c即可)2.标准复杂性函数及其大小关系(1)多项式时间阶的大小O(1)<O(logn)<O(n)<O(nlogn)<O(n2)<O(n3)……(2)指数时间阶的大小O(2n)<O(n!)<O(n n)3.和式界的证明方法(1)数学归纳法,先猜,后用数学归纳法按照界的证明方法证明(求c和n0)(2)对项进行限界:利用最大、最小值进行放缩,以及利用和式的前后两项比值小于1进行几何级数的限界。
(3)和式分解a.简单的分解b.忽略和式初始几项c.更复杂的划分,要充分考虑和式的规律性d.积分近似(分为f(k)单调递增和递减两种情况)可用于求紧致界e.Knuth求和的七种方法4 递归关系式(ch4)1.替换法(1)猜测解 数学归纳法证明;注:a.出现T(n/2)的情况下要假设T(n/2)符合条件,继而得到T(n)符合条件b.不要忘记证明归纳基础(n=1、n=2直到找到一个n0,使得对n>n0时候一切都符合猜测的结论)c.有时候得到T(n)<=cn+1的时候需要在猜测解中减去一个低阶项,凑成T(n)<=cn(2)变量变换法;替换使式子变形为已知的熟悉的形式。
如T(n)=2T(n/2)+n2.迭代法(1)展开法;关键是处理通项等于1的情况,也就是递归结束的情况。
(2)递归树法;主要关注Runing time(同一层上所有节点的时间和)和size(原来的几分之几)两个指标,选取size最慢到1的分支为标准(分支最长的)。
3.主定理Case 3 的时候不要忘记证明af(b/n)<=cf(n)对某个c<1且足够大的n成立。
5 概率分析(ch5)1.雇佣问题及其随机算法(略)2.序列随机排列的两种方法及其复杂性方法1:为每个A[i]指定一个优先级p[i]然后按p[i]对A排序PermuteBySort(){n<-length[A];for(i=1;i<=n;i++)p[i]<-Random(1~n3);用p作为关键字对A 排序;Return A;}时间复杂度:θ(nlogn)//主要用在排序上,归并排序的时间复杂度是O(nlogn)方法2:就地枚举RandomInPlace(A){n<-length[A];for(i=1;i<=n;i++)A[i]<->A[Random(1,n)];//直接就地生成优先级后就交换位置}时间复杂度:θ(n)3.online雇佣问题及其概率分析(略)6 堆排序(ch6)1堆的概念和存储结构堆是一种数据结构它是一种数组对象,可以视为一棵完全二叉树。
每一层都是满的,最后一层可能除外。
2.堆的性质和种类(1)子节点和父节点下标之间的关系某节点的下标是i,则left(i)=2i,right(i)=2i+1Parent(i)=(i/2)的下取整。
(2)n个节点的堆其叶子节点为(n/2)+1,(n/2)+2……n3.堆的操作:建堆;整堆;建堆操作是建立在整堆基础上的,整堆的原理是:假设i的以左孩子为根的子树和以右孩子为根的子树均为整好堆的大根堆,需要将i节点的值与left(i)和right(i)节点的值做比较,如果i节点值最大则无需整堆已经是大顶堆,如果不是则找出左右孩子的最大值并交换i节点和子孩子节点的值,由于交换的过程中可能破坏了该子树的大顶堆的性质,则需要从该子节点开始继续整堆,是个递归的过程。
MAX-HEAPIFY(A,i){l<-left(i)r<-right(i)if l<=heap-size[A] and A[l]>A[i]then largest<-lelse largest<-iif r<=heap-size[A] and A[r]>A[largest]then largest<-rif lares t≠i thendo exchange A[i]<->A[largest]MAX-HEAPIFY(A,largest)}时间复杂度:O(logn)建堆:从length[A]/2处开始整堆,直至树根。
BUILD-MAX-HEAPIFY(A)heap-size[A]<-length[A]for i<-length[A]/2 downto 1do MAX-HEAPIFY(A,i)时间复杂度:O(n)//O(nlogn)为其非紧致界4.堆排序算法和时间复杂性堆排序算法的思想是:先交换、再整堆、再交换、在执行的过程中,始终保持该堆为大顶堆。
HEAPSORT(A)BUILD-MAX-HEAP(A);//建堆O(n)for i<-length[A] downto 2//循环整堆+断裂O(nlogn) doexchange A[1]<->A[i]heap-size[A]<-heap-size[A]-1MAX-HEAPIFY(A,1)时间复杂度为:O(n+nlogn)5.优先队列及其维护操作(1)插入操作MAX-HEAP-INSERT(A,key){heap-size[A]++;i<-heap-size[A];while(i>1 and A[i].parent<key) do{A[i]<-A[parent[i]];i<-parent[i];}A[i]<-key;}时间复杂度为O(logn)(2)取最大关键字Return A[1];//时间O(1)(3)删除堆顶元素(出队)HEAP-EXTRACT-MAX(A){if heap-size[A]<1 thenreturn “Over Flow”;MAX<-A[1];A[1]<->A[heap-size[A]];heap-size[A]--;MAX-HEAPIFY(A,1)//O(logn)}//显然时间复杂度为O(logn)(4)增值HEAP-INCRESE-KEY(A,i,key){//将A[i]增至keyif(A[i]>=key)//往下调整then A[i]<-keyMAX-HEAPIFY(A,i)else//往上调整while(i>1 and A[parent[i]]<key) doA[i]<-A[parent[i]]i<-parent[i]A[i]<-key}时间复杂度为O(logn)总结:所有的优先队列的维护操作均可以在O(logn)时间内完成。
7 快速排序(ch7)1.快速排序算法及其最好、最坏时间和平均时间快速排序采用分治法,把问题分为更小的规模,每次划分都调用一个算法生成一个划分源q将数组A[p..r]分成A[p..q-1] 、A[q]、A[q+1..r]三部分QuickSort(A,p,r){//对A[p..r]快排序if(p<r) then//递归到p=r时结束{q<-Partition(A,p,r);//生成划分源QuickSort(A,p,q-1);//子问题1QuickSort(A,q+1,r);//子问题2}}Partition(A,p,r)//划分源生成算法1,选取A[r]为划分源,使其左边元素小于它,右边元素大于它{x<-A[r];i<-p-1;for(j=p;j<=r-1;j++){//始终保持A[p..i]中的元素小于A[r]if(x<A[r]){i<-i+1;A[i]<->A[j];}}A[i+1]<->A[r];//A[r]就位return i+1;//返回q}快速排序实际上是一个就地(Inplace)排序。
高一数学必修三算法初步复习提纲+习题
高一数学必修三算法初步复习提纲+习题第十一章算法初步与框图(理)一、知识网络算法概念算法与程序框图框图的逻辑结构输入语句顺序结构循环结构条件结构算法初步循环语句算法语句条件语句输出语句赋值语句算法案例二、大纲要求1.算法的含义、程序框图(1)理解算法的含义和算法的思想(2)理解程序框图的三种基本逻辑结构:顺序、条件分支、循环.2.基本算法语句理解几种基本算法语句dd输入语句、输出语句、赋值语句、条件语句、循环语句的含义.三、复习指南本章是新增内容,多以选择题或填空题形式考查,常与数列、函数等知识联系密切.考查的重点是算法语句与程序框图,以基础知识为主,如给出程序框图或算法语句,求输出结果或说明算法的功能;或写出程序框图的算法语句,判断框内的填空等考查题型.难度层次属中偏低.※知识回顾1.算法的概念:算法通常是指按一定规则解决某一类问题的明确和有限的步骤.2.程序框图又称流程图,是一种用程序框、流程线及文字说明来表示算法的图形.3.程序框图的三种基本逻辑结构是顺序结构、条件结构和循环结构。
4算法的描述方法包括:自然语言、程序框图和程序语言。
5.算法的基本特征:① 清晰性:算法的每一步都清晰;② 排序:算法的“前一步”是“下一步”的前提,“下一步”是“前一步”的延续;③ 有限性:算法必须在有限的步骤内完成任务,不能无限期地继续;④ 通用性:算法应该能够解决某类问题第一节算法与程序框图※典型案例分析例1.如图所示是一个算法的程序框图,则该程序框图所表示的功能是分析:首先理解每个程序框的含义,输入数字a、B和C,然后判断a和B的大小。
如果B小,则将B分配给a,否则执行下一步,即判断a和C的大小。
如果C小,则将C分配给a,否则执行下一步,使输出a为a的最小值,因此,程序框图的功能是找出a、B和C的最小值评注:求a,b,c三个数中的最小值的算法设计也可以用下面程序框图来表示.例2以下程序框图所示的算法函数是()(1)计算奇数小于100的连续乘积;(2)从1开始计算连续奇数的连续积;(3)计算从1开始的连续奇数的连续积。
大学计算机科学算法知识点归纳总结
大学计算机科学算法知识点归纳总结计算机科学的一个重要分支就是算法,它是解决问题的具体步骤和方法的集合。
通过学习和掌握算法知识,我们可以更加高效地解决各种问题。
本文将对大学计算机科学中常见的算法知识点进行归纳总结。
一、排序算法排序算法是计算机科学中最基本也是最常用的算法之一。
它将一组元素按照特定的规则进行重新排列。
以下是几种常见的排序算法:1. 冒泡排序(Bubble Sort)冒泡排序通过相邻元素的比较和交换来实现排序,每一轮将最大的元素冒泡到末尾。
2. 插入排序(Insertion Sort)插入排序通过将元素逐个插入已经有序的部分来实现排序。
3. 快速排序(Quick Sort)快速排序是一种基于分治法的排序算法,通过选择一个基准元素和其它元素进行比较和交换来实现排序。
4. 归并排序(Merge Sort)归并排序是一种基于分治法的排序算法,将待排序序列分为若干个子序列,分别进行排序后再合并。
二、查找算法查找算法是在给定的数据集合中找到指定元素的算法。
以下是几种常见的查找算法:1. 顺序查找(Sequential Search)顺序查找是一种逐个比较的查找算法,从列表的开头依次比较每个元素,直到找到目标元素或遍历完整个列表。
2. 二分查找(Binary Search)二分查找是一种基于分治法的查找算法,通过将待查找的区间不断缩小,最终找到目标元素。
三、图算法图是由节点和边组成的一种数据结构,图算法是解决图相关问题的一种算法。
以下是几种常见的图算法:1. 深度优先搜索(Depth First Search)深度优先搜索是一种遍历和搜索图的算法,它以深度优先的方式访问节点。
2. 广度优先搜索(Breadth First Search)广度优先搜索是一种遍历和搜索图的算法,它以广度优先的方式访问节点。
3. 最小生成树(Minimum Spanning Tree)最小生成树是一个无环连通子图,它是图中边的一种子集,使得树上所有边的权值之和最小。
算法期末复习总结
算法知识点总结第二章1.算法定义2.算法五个特性及五个步骤3.大O、Ω、 证明第四章分治法1.分治法的步骤及其抽象化控制2.知道检索算法和分类排序算法最坏时间复杂度,并知道原因3.SELECT算法最坏和平均复杂度和SELECTS的平均时间复杂度4.二次取中值规则5.特斯拉矩阵乘法算法复杂度6.递推关系式的推导第五章贪心法本章重点是四个定理的证明,以及背包问题求解过程和两个作业排序问题。
1.定理5.1,5.2,5.3,5.4的证明注:定理5.2证明要点:I.贪心解J和最优解I是不包含关系II. a是属于J但不属于I的最大效益作业,b是属于I但不属于J的作业,则Pa>PbIII.J和I相同作业可以安排在同一时间处理IV.考虑I-{b}U{a}效益增加。
连续替换,同一法。
2.背包问题的算例,注意先排序再求解。
3.一台处理机的作业排序问题算例和算法实现。
注意先排序再求解。
4.两台处理机的作业排序问题。
了解其原理:在两台设备上处理的任务若不按相同作业排列次序处理,则所需时间不比按相同次序处理少。
会算F(S)和MTF(S)。
第六章动态规划本章重点是六个算例1.最优性原理以及不能用此原理的一些问题举例2.多段图问题3.0/1背包问题4.任意两点的最短路,会算A,P矩阵5.最优二分检索,同时知道其算法复杂度,以及高德纳采用何种方式降低算法复杂度的6.货郎担问题7.可靠性设计第八章回溯法本章重点掌握黑体字概念,皇后问题,以及状态空间树生成过程,注意不同方法结点编号不一样----深度优先,D-检索,宽度优先。
注意:六、七、八皇后的状态空间树结点总数分别是1957、13700、109601个(书本给的8皇后结果不对)以及教程P203页图8.8第四个样例(8,6,4,2,1,1,1) = 1 + 8 + 48 + 192 + 384 * 4 = 1785第九章分支-界限法1.黑体字的概念2.结点成本函数定义3.15-谜问题可达判断以及搜索过程图4.分枝法失效(不能找到最小成本的结点)的原因及其改进方法5.带罚款的作业排序问题注:重点是概念、15-谜问题和带罚款的作业排序问题第十章NP问题本章掌握定义,能判断某个特定问题是哪类问题1.不确定性算法定义2.P问题和NP问题的定义3.可满足问题(SAT问题)的定义4.COOK定理:SAT在P内当且仅当P=NP5.约化定义6.NP-Hard问题和NP-完全问题定义,会画P、NP、NP-C和NP-Hard问题的维恩图结语:复习时,书本上的算例一定要仔细看!算例占了一半左右的分数。
算法知识点归纳总结
算法知识点归纳总结什么是算法?算法是解决问题的一系列步骤或规则。
在计算机科学中,算法是指计算机程序解决问题的方法。
算法可以用来解决各种问题,比如搜索、排序、数据压缩等。
算法的特点算法具有以下几个特点:1. 有穷性:算法必须在有限的步骤内结束。
2. 确定性:对于给定的输入,算法必须在每一步都有确定的行为。
3. 输入:算法必须有零个或多个输入。
4. 输出:算法必须有一个或多个输出。
5. 可行性:算法的每一步都必须是可行的。
常见的算法分类1. 搜索算法搜索算法主要用于在给定的数据集中查找特定的元素。
常见的搜索算法包括线性搜索、二分搜索、深度优先搜索和广度优先搜索。
2. 排序算法排序算法用于将给定的数据集按照特定的顺序排列。
常见的排序算法包括冒泡排序、插入排序、选择排序、快速排序和归并排序。
3. 图算法图算法主要用于解决与图相关的问题,比如最短路径、最小生成树等。
常见的图算法包括Dijkstra算法、Prim算法、Kruskal算法等。
4. 字符串匹配算法字符串匹配算法用于在一个文本中寻找特定的字符串。
常见的字符串匹配算法包括朴素字符串匹配算法、KMP算法、Boyer-Moore算法等。
5. 动态规划算法动态规划算法用于解决具有重叠子问题和最优子结构的问题。
常见的动态规划算法包括背包问题、最长公共子序列问题等。
6. 贪心算法贪心算法是一种使用贪心策略来求解问题的算法。
常见的贪心算法包括最小生成树算法、最短路径算法等。
常见算法的具体内容1. 线性搜索算法线性搜索算法是一种简单的搜索算法,它通过逐个比较给定的元素和目标元素来查找目标元素的位置。
线性搜索算法的时间复杂度为O(n)。
2. 二分搜索算法二分搜索算法是一种高效的搜索算法,它通过逐步缩小搜索范围来查找目标元素的位置。
二分搜索算法的时间复杂度为O(logn)。
3. 冒泡排序算法冒泡排序算法是一种简单的排序算法,它通过多次比较和交换来将给定的数据集排序。
算法初步复习总结共26页文档
1、战鼓一响,法律无声。——英国 2、任何法律的根本;不,不成文法本 身就是 讲道理 ……法 律,也 ----即 明示道 理。— —爱·科 克
3、法律是最保险的头盔。——爱·科 克 4、一个国家如果纲纪不正,其国风一 定颓败 。—— 塞内加 5、法律不能使人人平等,但是在法律 面前人 人是平 等的。 ——波 洛克
▪
30、意志是一个强壮的盲人,倚靠在明眼的跛子、要使整个人生都过得舒适、愉快,这是不可能的,因为人类必须具备一种能应付逆境的态度。——卢梭
▪
27、只有把抱怨环境的心情,化为上进的力量,才是成功的保证。——罗曼·罗兰
▪
28、知之者不如好之者,好之者不如乐之者。——孔子
▪
29、勇猛、大胆和坚定的决心能够抵得上武器的精良。——达·芬奇
算法设计复习
算法设计复习在计算机科学领域,算法是一组解决问题的有限步骤。
算法设计的目的是利用计算机执行特定任务或解决特定问题。
本文将回顾一些常见的算法设计技巧,并提供相应的答案和解析。
一、贪心算法(Greedy Algorithm)贪心算法是一种通过每一步的最优选择来达到整体最优解的方法。
它通常适用于问题具有最优子结构(即局部最优解能导致全局最优解)和贪心选择性质(即做出当前最优选择不会影响后续步骤的选择)的情况。
例题1:找零问题题目描述:假设有 1 元、5 元、10 元、20 元、50 元和 100 元面值的货币,现需要找零 n 元。
请设计一个贪心算法,使得找零的纸币数量最少。
答案:首先,我们将面值从大到小排序。
然后,从最大面值开始,尽量找零。
具体步骤如下:1. 初始化一个空数组 result,用于存储找零的纸币数量;2. 对于面值数组中的每个面值 money:a. 若 n 大于等于 money,则将 n 除以 money 的整数部分作为找零的数量,并将 money 加入 result 数组;b. 更新 n 为 n 与 money 的差值;3. 如果 n 不等于 0,则无法完全找零;4. 返回 result 数组作为最终的找零结果。
解析:贪心算法的核心是每一步的最优选择。
在这个问题中,最优选择是尽量使用大面值的纸币,以减少纸币数量。
因此,我们首先选择最大面值的纸币进行找零,直到找零金额为 0 或无法继续找零。
二、动态规划(Dynamic Programming)动态规划是一种通过将问题划分成更小的子问题并缓存其解决方案来解决复杂问题的方法。
它通常适用于问题具有重叠子问题(即问题可以被划分为相同的子问题)和最优子结构的情况。
例题2:最长公共子序列(Longest Common Subsequence)题目描述:给定两个字符串 s1 和 s2,找到它们的最长公共子序列的长度。
答案:可以使用动态规划来解决最长公共子序列的问题。
算法初步复习
算法初步复习一、算法1、算法的含义在数学中,算法通常是指。
现在,算法通常可以。
2、算法的特征①;②;③;④;⑤。
二,程序框图1、程序框图又称,是一种用。
2、基本的程序框与它们所表示的功能三,算法的基本逻辑结构1、顺序结构程序框图:程序语句:(1)输入语句(2)输出语句(3)赋值语句2、条件结构程序框图: 程序语句:IF -THEN 格式IF -THEN -ELSE 格式3、循环语句程序框图: 程序语句:① 直到型循环结构 UNTIL 语句② 当型循环结构 WHILE 语句注:常用的运算符号在程序语句中的表示方法:a +b;a -b ;a ⅹb ;a b;a 2 ∣a a 除以b 的余数 ;a 除以b < ;> ;≤ ;≠3 < a < 10 ;a ≤-4或a ≥2四,经典算法案例案例1 绘制计算函数3238257y x x x =-++函数值的程序框图,并编写程序。
案例2 绘制计算函数函数值的程序框图,并编写程序。
案例3 绘制使任意输入的3个正整数按从小到大的顺序输出的程序框图,并编写程序。
案例4绘制计算数列{}3n 的前n 项和S 的程序框图,并编写程序。
2(2)(0)x x +<4(0)x =2(2)(0)x x ->y =案例5 绘制用“二分法”求方程01043=-+x x 的近似解的程序框图,并编写程序。
案例6 绘制判定一个大于2的正整数是否为质数的程序框图,并编写程序。
案例7 利用辗转相除法或更相减损术求下列两数的最大公约数(1)228,1995; (2)5280,12155;案例8 利用秦九韶算法求多项式 765432()765432f x x x x x x x x =++++++当3x =时的值;并指出共进行了多少次乘法与加法运算案例9 完成下列进位制之间的转化(1)10212(3)= (10); (2)2376(8)= (10);(3)119(10)= (6); (4)412(5)= (7);。
算法复习提纲
算法复习提纲题型及分数分布:1.填空题15分2.简答题、证明题25分左右3.计算题2-3题30分左右4.算法设计题2-3题30分左右复习提纲一、算法基础1. 什么是算法?2. 算法的五个重要特性3. 运算的分类:时间囿界于常数的运算、时间非囿界于常数的运算,为什么要定义时间囿界于常数的运算?怎么分析时间非囿界于常数的运算?4.什么是事前分析和事后测试?各阶段的目标和特点是什么?5.什么是函数表达式的数量级?数量级的大小怎么反应了算法复杂度的高低?6.什么是限界函数?怎么得来的?7.限界函数:上界函数、下界函数、“均值”函数的定义和性质8.理解定理1.2,P76定理9.掌握数学归纳法、反证法、反例法等证明方法二、递归与递归式1.什么是递归和递归程序设计?2.递归的结构是什么?3.什么是直接递归和间接递归?4.递归程序有哪些效率问题?各自的原因是什么?5.怎么消去递归(不要求)6.什么是代换法、递归树法、主方法?(例题、习题)三、分治法1.简述分治法的基本思想?分治法分解问题的基本要求是什么?为什么说分治与递归像一对孪生兄弟?2.可用分治法求解的问题应具有的特征?(了解)3.分治法求解的三个步骤。
4.二分检索(3.2节)1)了解算法2)重点掌握算法复杂度的分析技术(1)对成功和不成功检索情况的讨论(2)什么是二元比较树?内结点、外结点分别代表了什么?比较次数和结点在树中的级数(或根到结点的路径长度)之间的关系。
3)定理3.1及其证明过程和结论4)什么叫做以比较为基础的检索?其下界是什么?(了解)5)为什么说二分检索是解决检索问题的最优的最坏情况算法?5.找最大和最小元素(3.3节):一般了解,理解递归程序的效率问题6.基于分治的分类算法(3.4节):回顾数据结构相关知识,知道每种分类算法的基本思想、算法复杂度、适用性等方面的性质(不考算法,考应用)1)P46:以关键字比较为基础的分类算法的时间下界是什么?怎么证明的?(了解)2)P60:一个改进了的快速分类迭代算法模型,其空间复杂度为O(logn)是怎么得来的?7.选择问题(3.5节)1)了解基于partition 的选择算法设计思想、最坏、平均时间复杂度的结论和证明。
算法复习1(最新整理)
重要概念关于算法与复杂度1.算法就是一组有穷的 规则 ,它们规定了解决某一特定类型问题的 一系列运算 。
算法是解决某类问题的一系列运算的集合,算法是指解决问题的一种方法或一种过程。
程序是算法用程序设计语言的具体实现。
2.算法重要特性是什么?确定性、可行性、输入、输出、有穷性(输入、输出、确定性、有限性)3.算法分析的目的是什么?分析算法占用计算机资源的情况,对算法做出比较和评价,设计出更好的算法。
4.算法的复杂性是 算法效率 的度量,是评价算法优劣的重要依据。
算法的时间复杂性指算法中 元数据 的执行次数。
通常可以通过计算循环次数、基本操作频率、计算步。
5.计算机的资源最重要的是 时间 和 空间 资源。
因而,算法的复杂性有 时间复杂度和 空间复杂度 之分。
6.设D n 表示大小为n 的输入集合,t(I)表示输入为I 时算法的运算时间, p(I)表示输入I出现的概率,则算法的平均情况下时间复杂性A(n)=∑∈n D I I t I p )()( 。
7.分治算法的时间复杂性常常满足如下形式的递归方程: ⎩⎨⎧>+===00n n ,g(n)af(n/c)f(n)n n ,d )n (f 其中,g(n)表示将规模为n 的问题分解为子问题以及组合相应的子问题的解所需的时间 。
7、算法的时间复杂性与问题的什么因素相关?算法的时间复杂性与问题的规模相关,是问题大小n 的函数。
8、算法的渐进时间复杂性的含义?当问题的规模n 趋向无穷大时,影响算法效率的重要因素是T(n)的数量级,而其他因素仅是使时间复杂度相差常数倍,因此可以用T(n)的数量级(阶)评价算法。
时间复杂度T(n)的数量级(阶)称为渐进时间复杂性。
9、最坏情况下的时间复杂性和平均时间复杂性有什么不同?最坏情况下的时间复杂性和平均时间复杂性考察的是n 固定时,不同输入实例下的算法所耗时间。
最坏情况下的时间复杂性取的输入实例中最大的时间复杂度:W(n) = max{ T(n ,I) } , I ∈Dn平均时间复杂性是所有输入实例的处理时间与各自概率的乘积和:A(n) =∑P(I)T(n ,I) I ∈Dn10、记号O 表示(渐进上界), 记号表示(渐进下界), 记号表示(紧渐进界)ΩΘ记号O 的定义正确的是O(g(n)) = { f(n) | 存在正常数c 和n0使得对所有n n 0有:0 f(n) cg(n) };≥≤≤记号的定义正确的是Ω (g(n)) = { f(n) | 存在正常数c 和n0使得对所有n n 0有:0 cg(n) f(n) };Ω≥≤≤a) 以下关于渐进记号的性质是正确的有:(A )A.f (n)(g(n)),g(n)(h(n))f (n)(h(n))=Θ=Θ⇒=ΘB. f (n)O(g(n)),g(n)O(h(n))h(n)O(f (n))==⇒=C. O(f(n))+O(g(n)) = O(min{f(n),g(n)})D. f (n)O(g(n))g(n)O(f (n))=⇔=b)对于下列各组函数f(n)和g(n),确定f(n)=O(g(n))或或))(()(n g n f Ω=,并简述理由。
算法概论复习总结
②递归算法 int BinSearch2(int r[],int low,int high,int k) { if(low>high) return 0; else{ mid(low+high)/2; if (k<r[mid]) return BinSearch2(r,low,mid-1,k); else if(k>r[mid]) return BinSearch2(r,mid+1,high,k); else return mid; } }
3、归并排序算法 void Merge(int r[],int r1[],int s,int m,int t) { i=s;j=m+1;k=s; while(i<=m && j<=t) { if(r[i]<=r[j]) } if(i<=m) while(i<=m) r1[k++]=r[i++]; else while(j<=t) r1[k++]=r[j++]; } r1[k++]=r[i++]; else r1[k++]=r[j++];
1
第 2 章 分治算法
1、核心思想:分,治,和。 2、主定理:对于常数 a>0,b>1,d>=0,有 T(n)=aT(n/b)+O(n^d),则:
(nd ) T ( n ) ( n d log n ) log b a ( n )
3、合并排序(归并排序)
a bd a bd a bd
2
2、深度优先搜索(无向图,有向图深度优先搜索) 其中有向图注意拓扑排序(默认降序),排序时注意每个顶点的 pre 和 post 值,如果遇到需要在多个顶点间进行选择的情况,按照顶点的字母序进行。 (其中 pre 是读取顶点时候的值,post 是离开顶点时候的值。) 3、有向无环图(Directed Acyclic Graph) 性质:① 有向图含有一个环当且仅当深度优先搜索过程中探测到一条回边; ② 每个有向无环图至少还有一个源点和一个汇点。 4、强连通性:一个有向图是强连通的,当且仅当图中有一个回路,它至少包含 每个节点一次。
