《算法导论》复习大纲.doc
《《算法导论》复习大纲.doc》由会员分享,可在线阅读,更多相关《《算法导论》复习大纲.doc(39页珍藏版)》请在沃文网上搜索。
1、算法设计与分析复习提纲 2014.7.51 引言(ch1)1. 什么是算法及其特征算法(Algorithm)是通过一个有限的指令序列集合对特定问题进行求解的一种计算执行描述。算法特征:(1)输入:一个算法具有零个或多个取自指定集合的输入值;(2)输出:对每一次输入,算法具有一个或多个与输入值相联系的输出值;(3)确定性:算法的每一个指令步骤都是明确的;(4)有限性:对每一次输入,算法都必须在有限步骤(即有限时间)内结束;(5)正确性:对每一次输入,算法应产生出正确的输出值;(6)通用性:算法的执行过程可用于所有同类求解问题,而不仅适用于特殊输入。2.问题实例和问题规模问题实例是指需要计算同一个
2、结果的问题的所有输入。问题规模是指输入实例的大小,而输入实例是指问题的具体计算例子2 算法初步(ch2)1. 插入排序算法1)算法步骤:从左到右扫描数据A,扫描到一个元素,将Aj与其左边的元素从右到左依次比较,若比之小,则将其之前元素后移,插入A【j】,直至A【j】比他前面的元素大,扫描A中的下一个元素2)伪代码:InsertSort(A)for j=2 to A.length /第一层循环Key=Aji=j-1While i0 and aikey /第二层循环Ai+1=Aii=i-1Ai+1=key 2.算法复杂性及其度量 (1)时间复杂性和空间复杂性; (2)最坏、最好和平均情形复杂性;顺
3、序情况下B(n)=O(n)、倒序情况下W(n)=O(n2)、A(n)=O(n2)W(n)空间复杂性:需要常数个额外的临时空间存储临时数据2. 插入排序的最坏、最好和平均时间最坏O(n2)、最好O(n)和平均时间O(n2),空间复杂度是O(1),稳定排序3. 归并排序算法及其时间复杂性时间(n log n)1)算法步骤分解:分解待排序的n个元素的序列为各具n/2个元素的两个子序列解决:适用归并排序递归的排序2个子序列合并:从左到有遍历2个子序列,比较最前面的元素,将较小的元素移出子序列 合并到上级序列的末尾,循环进行上2步,直接所有元素都被合并到上级序列,公进行r-p+1次;2)伪代码:MERG
4、E-SORT(A,p,r) if prq=向下取整(p+r)/2MERGE-SORT(A,p,q);MERGE-SORT(A,q+1,r)MERGE(A,p,q,r)MERGE(A,p,q,r)N1=q-p+1N2=r-q将A拆成长度分别为N1、n2的2个子数组L,RL,R的末尾元素的后一个元素取值无穷大,作为哨兵;i=1,j=1for k=p to r if Li=RjAk=Lii=i+1elseAk=Rjj=j+1 3函数增长率(ch3)1. 渐近记号O、的定义及其使用1) O渐进上界:0=f(n), f(n)的阶小与g(n)的阶2)渐进下界:0=C(g(n) , f(n)的阶大与g(n)
5、的阶3)渐紧界:0=C1(g(n) =f(n) , f(n)的阶与g(n)的阶相等2. 标准复杂性函数及其大小关系(1) 多项式时间阶的大小O(1) O(log n) O(n) O(n*log n) O(n) O(n3)(2) 指数时间阶的大小O(2n) O(n!) 证明2)对象限界最大最小项限界;几何级数限界;3)和式分解简单的一分为二;更复杂的划分;积分近似;4)Knuth求和:使用数学归纳法;使用摄动法;使用递归;使用积分;使用二重求和;使用有限演算;使用母函数。4 递归关系式(ch4)1.替换法(1)猜测解数学归纳法证明;T(n)=2T(n/2)+n 猜:T(n)= O(nlogn)证
6、: 2T(n/2)+n=Cnlogn 带入计算(2)变量变换法;T(n)=2T(n1/2)+log n令m= logn,则,n=2mT(2m)=2T(2m -1/2)+m ,令S(m)=T(2m)则:S(m)=2Sm/2+m类似T(n)=2T(n/2)+n=O(m log m)=O(logn log log n)2.迭代法(1)展开法;T(1)=O(1)T(n)=3T(n/4)+n=n+3n/4+32n/42+3KT(n/4K)总有K,使得1=n/4K=2,即K=1,b=1整数Case1 f(n)= O(n logba-) = C n logba- 则:T(n)= (n log b a)Cas
7、e2 f(n)= C n logba+ 且:af(n/b)=cf(n),对于常数C=1和足够大的n成立,则T(n)= (f(n))5 堆排序(ch6)1堆的概念和存储结构堆是一种数据结构,堆是一个数组,近似完全二叉树,除最底层外,全部从左到右填充满,对于序号为i的结点,其父结点的序号为i/2,其左孩子的序号为2i,其右孩子序号为2i+1;0=A.heap-size=A.length n个元素的序列k1,k2,ki,kn当且仅当满足下关系时,称之为堆。(ki= k2i,ki= k2i,ki= k2i+1), (i = 1,2,3,4.n/2)l 堆的性质和种类大根堆:除根结点外,所有结点小于其父
8、结点;用于堆排序、收益问题。小根堆:除根结点外,父结点小于其所有结点;用于优先队列;成本问题;l 堆的操作:建堆;整堆;1)整堆算法:假设i的左右子树已经是大根堆,对i结点进行整堆,使其也是大根堆对调整的子树结点循环进行上2步骤,将小元素逐级下沉,直至满足堆特性;整堆时间复杂度 O(log n)2)整堆伪代码Max-heapify(A,i) l=left(i)r=right(i)if lAilargest=lelse largest=iif rAilargest=rif largestiexchange ai with largestmax-heapify(A,largest)3)建堆算法因为
9、从A.heap-size/2+1起到A.heapsize,都是叶子结点,故建堆可从A.heap-size/2起到1整堆实现;算法复杂度O(n)4)建堆伪代码Bulid_max_heap(A)heap-size=A.lengthfor i= A.heap-size /2 to 1Max-heapify(A,i)l 堆排序算法和时间复杂性算法思想:1)将数组建堆2)将根元素与结点n交换并缩减堆的长度13)对首元素整堆4)重复上述3个步骤,直至堆大小为1(i=2时进行最后一次重复操作)时间复杂度O(n lg n)伪代码Heapsize(A) build_max_heap(A) For i=A.len
10、gth to 2 Exchange A1 to Ai A.heap-size=A.heap-size-1 max-heapfly(A,1)l 优先队列及其维护操作优先队列是维护集合S的数据结构,每个元素具有一个关键字key;用于分支限界、搜索算法。支持如下操作:a) 插入 insert(S,x) 算法思想:1)将元素插入末尾Size+1的位置2)从插入位置自底而上调整,使之满足堆性质算法复杂度 O(log n)b) 取最大关键字Maximum(S)算法思想,输出优先级最大的,也就是堆的根元素;c)删除并返回最大键值的元素 Extract-max(S)算法思想:1) 取堆根2) A1-Aheap
11、-sizeA3) heap-sizeA4) 对A1整堆时间复杂度O(log n)d) 增值 元素x的关键字增加到k Increase-Key(S,x,k)算法思想:1)如果Ai的关键字大于K,则对i进行整堆;2)否则,若i不是根结点且K大于Ai的父结点,则交换Ai与其父结点的关键字,并将K值赋予其父结点。时间复杂度O(log n)6 快速排序(ch7)1. 快速排序算法及其最好、最坏时间和平均时间快排采用分治法的思想,最好O(nlogn),最坏O(n2),平均O(nlogn)(1)分治法的基本思想 分治法的基本思想是:将原问题分解为若干个规模更小但结构与原问题相似的子问题。递归地解这些子问题,
12、然后将这些子问题的解组合为原问题的解。(2)快速排序的基本思想 设当前待排序的无序区为Rlow.high,利用分治法可将快速排序的基本思想描述为:分解: 在Rlow.high中任选一个记录作为基准(Pivot),以此基准将当前无序区划分为左、右两个较小的子区间Rlow.pivotpos-1)和Rpivotpos+1.high,并使左边子区间中所有记录的关键字均小于等于基准记录(不妨记为pivot)的关键字pivot.key,右边的子区间中所有记录的关键字均大于等于pivot.key,而基准记录pivot则位于正确的位置(pivotpos)上,它无须参加后续的排序。Ap.r被划分为俩个(可能空)
13、的子数组Ap .q-1和Aq+1 .r,使得Ap .q-1 = Aq = Aq+1 .r求解:通过递归调用快速排序对左、右子区间Rlow.pivotpos-1和Rpivotpos+1.high快速排序。3合并/快速排序void quick_sort(int s, int l, int r) if (l r) int i = l, j = r, x = sl; while (i j) while(i = x) / 从右向左找第一个小于x的数 j-; if(i j) si+ = sj; while(i j & si x) / 从左向右找第一个大于等于x的数 i+; if(i j) sj- = si
14、; si = x; quick_sort(s, l, i - 1); / 递归调用 quick_sort(s, i + 1, r); 2.随机快速排序算法及其期望时间期望时间负责度O(nlogn)算法描述:分解:以ap为基准元素将ap:r划分为3段ap:q-1,aq和aq+1:r,使 ap:q-1中任何一个元素小于等于aq,而aq+1:r中任何一个元素大于等于aq。下标q在划分过程中确定。递归求解:通过递归调用快速排序算法分别对ap:q-1和aq+1:r进行排序。合并:由于对ap:q-1和aq+1:r的排序是就地进行的,所以在ap:q-1和aq+1:r都已排好的序后,不需要执行任何计算,ap:
15、r就已排好void RandomizedQuickSort(double *a,int begin,int end) /随机化快速排序 if(beginend) int p = RandomizedPartition(a,begin,end); RandomizedQuickSort(a,begin,p-1); RandomizedQuickSort(a,p+1,end); intRandomizedPartition(double*a,intbegin,intend) inti=Random(begin,end);doubletemp=aend;aend=ai;ai=temp; return
16、Partition(a,begin,end);int Random(int m,int n) /产生一个随机下表,用其对应的数组元素作为比较标准srand(unsigned)time(NULL);return m+(rand()%(n-m+1);int Partition(double *a,intbegin,int end) int i = begin-1,j=begin; double x = aend; while(jend) if(ajB小于或等于Ai的元素数目主要要解决的问题: 计数:统计小于或等于 统计小于或等于Ai的元素数目 值相同元素的处理一种特殊情形的计数排序:问题:n个互不
17、相同的整数A1.n,1Ain,i=1n排序算法:SpecialCountingSort(A,B)/B1.n为排序结果for i1 to n do BAiAi; /如Ai=5,就放到B5中时间:O(n) ,无比较一般情形的计数排序:问题:n个可以相同的整数A1.n,1Aik,i=1n,这里k是Ai的取值范围,不一定为n。基本思想:步骤:A1.n计数器C1.kB1.n Step 1(值相同元素的计数 值相同元素的计数):将A中的值为i的元素个数记入Ci中; Step 2(累计计数):对C1.k进行修改,使得Ci的值表示为i的元素个数; Step 3(放置):将Aj依据C Aj,放入正确位置BCAj
18、上,并修改CAj CAj-1;算法:CountingSort(A,B,k)/ B1.n为排序结果,C1.k为计数数组for i1 to k do Ci0;for j1 to lengthA do / 扫描A,值相同元素计数 值相同元素计数CAj+; for i2 to k do / Ci修改,累计计数CiCi+Ci-1; for jlengthA downto 1 do BCAjAj; CAj-; 时间:T(n k)=(n+k)=(n) 如果k=(n)时3. 基数排序适应的排序对象、算法和时间假定A1.n是非负整数,用k进制表示为不超过d位数。l算法:RadixSort(A d) RadixS
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
5 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 算法导论 算法 导论 复习 大纲