- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
2009-2010-2《算法》ppt-4减治法解读
减治法 Email: genfangchen@163.com 基本思想 利用大规模状态和小规模状态的解之间的某种关系,先建立这种关系,然后再利用这个关系从顶向下,或从底至上进行求解。 递归或归纳。 三种情况: 1、减去一个常量 2、减去一个常量因子 3、减去的规模是可变的 例子 求an ? f (n)*a if n1 f (n)= a else n=1 f (n)= a*a*…*a 插入排序 基本思想: (1)第一个元素已经排好序。 (2)从第二个元素开始,在已经排好序的元素中查找到插入位置,插入此元素。 插入排序 查找方法: 1、从左到右 2、从右到左 3、二分查找 P122 插入排序 InsertionSort(a[],int n) { int v,j,k; for k=1 to n-1 { v=a[k] j=k-1 while j=0 and a[j]v do a[j+1]=a[j] j=j-1 a[j+1]=v } } 插入排序的时间复杂度 O(n2) 图问题和遍历 术语 图论,离散数学 图:G=(V,E),Euler(1707-1783),bridegs of konigsberg 有向图,无向图,有权(负权)图,连通图,环路,完全图(团),二分图 网络 |E|=(|V|*|V-1|/2) 图问题应用 地图 超文本 电路 规划 交易 匹配 网络 程序结构 等等 图的表示 邻接矩阵:空间|V|2,适用于稠密图 邻接表:链表形式,空间|V|+2*|E|,适用于稀疏图 边数组:用数组表示每条边 经典图处理问题的难度 25个经典图问题 容易解决的:11个 连通性,欧拉环游,二分匹配,2色性,最短路径,传递闭包,强连通性,奇长度环,最小生成树,网络最短路径,最大流 可处理的:6个 一般连通性,最大匹配,平面性,偶长度环,网络赋值,最小开销流 不可处理的:7个 哈密顿环游,最大团,3色性,最长路径,顶点覆盖,旅行商问题,负权的最短路径 未知:1个,同构 基本的图程序 建立图,插入/删除边,查找边/顶点等 Int max 100; Typedef Graph{ int vexnum; int edgenum; int adjedge[Max][Max] ; } G; void CreateGraph() { // 采用邻接矩阵存储表示,构造无向图G。 int v,e,j,k; G G; scanf(“%d %d”,v,e); G.vexnum=v; G.edgenum =e; while(scanf(“%d %d”,j,k)) { if(j=0 and jv and k=0 and kv) G.adjedge[j][k]=1; else break; } } 图的遍历 图的遍历是解决大多数图问题的基础。 图的遍历有2种:深度优先和广度优先 void DFS(Graph G, int v) { // 从第v个顶点出发递归地深度优先遍历图G。 int visited[Max],j,k; visited[v] = 1; printf(“%d -”,v); // 访问第v个顶点 for ( j=0; jG.vexnum;j++) if (!visited[j]) DFS(G, j); // 对v的尚未访问的邻接顶点w递归调用DFS }//DFS 深度优先搜索 1.predfn =0 ;postdfn=0 2.for 每个顶点 v ? V 3. 标记v未访问 4.end for 5.for每个顶点 v ? V 6. If v 未访问 then dfs (v) 7.end for 深度优先搜索 dfs(v) 1.标记 v 已访问 2.predfn=predfn+1 3.for 每条边(v,w) ? E 4. If w 标记为未访问 then dfs(w) 5.end for 6.postdfn=postdfn+1 深度优先搜索 对遍历的时候,经过的每条边进行分类: 1、无
文档评论(0)