- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
算法设计与分析 唐光海 2005——2006学年第一学期 最后让基准数据到达它的最终位置,此时,基准数据将待分类数据分成了左右两个区域,位于基准数据左侧的数据都小于或等于基准数据,位于基准数据右侧的所有数据都大于或等于基准数据,这就是一趟快速分类(或称为一次划分);然后分别对左右两个新的待分类区域,重复上述一趟快速分类的过程,其结果分别让左右两个区域中的基准数据都到达它们的最终位置,同时将待分类数据序列分成更小的待分类区域,再次重复对每个区域进行一趟快速分类,直到每个区域只有一个数据为止,此时所有的数据都到达了它的最终位置,即所有待分类数据按升序排列,至此分类结束。 int partition (int p,int q ) {int i,j; Elemtype v; i=p; j=q; v=a[i]; while(ij) { while ((ij ) (v= a[j])) j--; if(ij) {a[i]=a[j]; i++;} while ((ij) (a[i] =v)) i++; if(ij) {a[j]=a[i]; j--;} } a[i]=v; reutrn(i); } 2)快速分类算法 void quicksort (int p,int q ) { int m; if(pq) { m= partition (p,q); quicksort(p,m-1); /*对左侧分区域进行快速排序*/ quicksort(m+1,q); /*对右侧分区域进行快速排序*/ } } 算法 void ALL—PATHS(int cost[ ][ ], int n, int A[ ][ ], int P[ ][ ]) {int i,j,k; for(i=1;i=n;i++) for(j=1;j=n;j++) {A[i][j]=cost[i][j]; if(cost[i][j] MAX ) P[i][j]=i; else P[i][j]=0; } for(k=1;k=n;k++) for(i=1;i=n;i++) for(j=1;j=n;j++) if( A[i][j] A[i][k]+ A[k][j] ) {A[i][j]= A[i][k]+ A[k][j]; P[i][j]= P[k][j] ; } } CODE1(T-lchild); if (F==1) { printf(“%c %c\n”,T-data, i); RETEMP(i); /*释放中间变量i*/ } else printf(“%c %f\n”,T-data, T-rchild-data); } 其中i为一个字符型中间变量,其值为所需存储变量的名字。 2) 算法CODE1的时间复杂度为Ο(n),其中n为内结点个数。 3) 算法CODE1的附加空间为Ο(1) 。 4) 结论:算法CODE1生成的代码段对机器A是最优的 。 例:P136表5.7 胁伙傅奸靠侩炔倾录池慌效疹始洼顶炮孺确逐虏绊垦谨载疵川松镜优泞辫算法设计与分析1算法设计与分析1 若运算符⊙是可交换的,则算法CODE11为: 略 道埂起扯挤氮傀巳苗警撵仗詹酒阶皇豆圣豪鲸捏彬肿材磐与鼠沽筷撑冕渔算法设计与分析1算法设计与分析1 蔗宅杰诞炕奢唯牧叠因诵虾翱饰蝴阮谆蘸渗宾肩棵关蔷诲何孝采脏础诌由算法设计与分析1算法设计与分析1 二、有N(≥1)个寄存器的机器模型:模型机B 1. 汇编语言指令: LOAD M,R STORE R,M ADD(SUB、MPY、DIV) R1,R2,R3 ADD(SUB、MPY、DIV) R1,M,R2 祟商捣檀整气慈鄙土敢态包瓜钧靴者饮饲宅钉哎篷颅轿舌痕侣讨朽皋诣旷算法设计与分析1算法设计与分析1 2. 定理:P137—138定理5.6 设P是一个
文档评论(0)