算法分析知识整理.doc

  1. 1、本文档共6页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Chapter 0 1. Big O O() 即 = 洛必达法则 一边有分母,一边无分母的,可以两边都先乘分母再比较,或再用洛必达法则 例:log n! =Θ(lognn) 因为(n/2)log(n/2)=log(n/2)n/2=logn!=lognn=nlogn 任何指数形式 任何多项式形式 任何多项式形式 任何对数形式 Chapter1 1.复杂度计算 Mod运算等于一个除法运算的复杂度 一般,计算复杂度,先看循环次数(注意以比特位n计算时,logN=n),再看循环内复杂度最高的那个运算 n位长数作加减运算,为O(n),作乘除法运算为O(n2) 乘2,除2,相当于移位,是常数时间运算 2.计算mod mod和加减乘除运算规则相同,也有交换律、结合律、分配率、替换率 例如,21390 mod 31 = (25)x mod 31 = (32)x mod 31 = (1)x mod 31 = 1 若ax=1 mod N,则 a和x互为mod N下的模倒数,有模倒数的充要条件是a和N互质 例:求20 mod 79的模倒数 用辗转相除法,每个式子标记3个数(除系数外都标记) gcd(20,79) 79=3*20+19 gcd(19,20) 20=1*19+1 gcd(1,19) 19=1*19+0 gcd(0,1) 1=1-0 再逆代回去(逆代的每一步都找对应gcd时作标记的数,用余数代换,用被除数合并) 1=1-(19-1*19) 代换0然后合并1 =20*1-19 =20*(20-1*19)-19 代换1然后合并19 =20*20-21*19 =20*20-21*(79-3*20)代换19然后合并20 =83*20-21*79 故模倒数为83,又因模倒数必须在1至N之间,则为83-79=4 Chapter2 1.分而治之 Divide and conquer: T(n)=aT(n/b)+O(nd) 在递归中的每一层,将处理问题分为a个子问题(即子问题个数是上一级的a倍),而每个子问题处理时的对象(函数的输入)被分为b份(即对象大小为上一级的1/b),而每一步的复杂度为O(nd) 2.Master theorem: T(n)= O(nd) dlogba T(n)= O(ndlogn) d= logba T(n)= O(nlogba) dlogba Merge算法处理n个元素merge的复杂度为O(n) T(n/2)是执行了logn层递归,T(n/b)是执行了logbn层递归 Chapter3 1.DFS(有向图无向图都适用) Explore算法只对起始点可达的点visit,包括previsit和postvisit标记 Explore(v)会生成以v为根的子搜索树 DFS算法是对G中所有的点用explore for all v in V: if not visited(v) then explore(G ,v) DFS算法复杂度为O(|E|+|V|) 因为DFS中,previsit(v)时,对v为根的子搜索树为陌生的,而postvisit(v)时则对子树已完全熟悉,所以若u和v是祖先--孩子关系,则必有[pre(u),post(u)]包含[pre(v),post(v)],否则u,v完全不相交,不可能出现部分相交的关系,如pre(u) pre(v)post(u)post(v) 2.DAG有向无环图 对有向图用DFS算法,若其生成的搜索树中有回边=该图存在环 DAG必有至少一个源(入度为0),和至少一个汇(出度为0),必可以线性化 凡DAG图问题,必先线性化 DAG图线性化方法一:用DFS算法后,对post number降序排序,post number越小越靠后 DAG图线性化方法二:从图中找一个源,删除它,不断重复该过程直至图为空 3.SCC强连通子图 u和v连通指从u-v有路径,同时从v-u也有路径可达 对无向图,连通子图个数就是其DFS算法中的搜索树的棵树 无向图作出连通子图的方法:在DFS算法中加个数组ccnum[v]赋初值为cc(cc=0),DFS过程中每调用一次explore则cc++,最后cc值为连通子图个数,有相同ccnum值的v即为一个连通子图 对有向图中所有互相连通的节点归为一个个强连通子图后(一个子图视为一个节点),有向图成为一个DAG图,该DAG图中的源称为源强连通子图,其汇称为汇强连通子图 Lemma1:对一个汇SCC内任意一节点用explore算法,可以刚好visit该子图内所有点(因为互相连通,且因为是汇,故不会visit该SCC以外的点) Lemma2:有向图的post number最大值必存在于其源强连通子图中 Lemma3:若有一条边是

文档评论(0)

ktj823 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档