- 1、本文档共6页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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)