算法分析课程设计报告

上传人:大米 文档编号:464441379 上传时间:2022-12-04 格式:DOC 页数:19 大小:58KB
返回 下载 相关 举报
算法分析课程设计报告_第1页
第1页 / 共19页
算法分析课程设计报告_第2页
第2页 / 共19页
算法分析课程设计报告_第3页
第3页 / 共19页
算法分析课程设计报告_第4页
第4页 / 共19页
算法分析课程设计报告_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《算法分析课程设计报告》由会员分享,可在线阅读,更多相关《算法分析课程设计报告(19页珍藏版)》请在金锄头文库上搜索。

1、-算法分析与设计实验报告书 评分:_题目:例如基于矩阵变换算法的图同构识别设计人:文森班级:网络工程2班 *:13一、 实验环境:1、硬件环境:个人机,CPU主频:2.3GHZ 存:4GB2、软件环境:操作系统:windows编程语言:C+二、 实验任务解决方案:实验思路:设两个无向图G=(V,E),G=(V,E),G,G同构当且仅当两图的邻接矩阵、行间同或矩阵、行间异或矩阵具有一样的行行置换。1. 矩阵算法步骤a. 根据定义,求出同型矩阵AAG、AAG.b. 计算出行间同或矩阵RAG、RAG,行间异或矩阵R*G、R*G.c. 以图G=(V,E)的行间异或矩阵为参照,对R*G的每一行,从R*G

2、搜索所有行,找到一个匹配。假设不存在相应匹配,则两图不同构;假设匹配,转步骤4.d. 判断邻接矩阵AG、AG,行间同或矩阵中是否存在同样的匹配,假设匹配存在,调整邻接矩阵AG、行间异或矩阵R*G、行间同或矩阵RAG对应的行和列;假设不匹配,则不同构.2、基于矩阵变换算法的流程图。3、基于矩阵变换算法实现的关键代码。/*冒泡排序void wensen_mp(int mp,int n)int t;for(int i=0;in-1;i+)for(int j=0;jmpj+1)t=mpj;mpj=mpj+1;mpj+1=t;/核心代码/异或矩阵行转换void wensen_h*(int *p1,int

3、 *p13,int *p14,int *p2,int *p23,int *p24,int n)int *p77=new intn;/用于替换的临时一维数组,存放p13int *p88=new intn;/用于替换的临时一维数组,存放p23int *p33=new intn;/用于替换的临时一维数组,存放p1int *p44=new intn;/用于替换的临时一维数组,存放p14int *p55=new intn;/用于替换的临时一维数组,存放p2int *p66=new intn;/用于替换的临时一维数组,存放p24int *p99=new intn;/用于行行替换的临时数组int t;int

4、 tt;/进展跳转判断int ttt=0;/进展跳转判断/行行替换for( int i=0;in;i+)/首先进展行赋值给另外一个数组p13for(int i77=0;i77n;i77+)p77i77=p13ii77;/首先进展行赋值给另外一个数组p1for(int i33=0;i33n;i33+)p33i33=p1ii33;/首先进展行赋值给另外一个数组for(int i44=0;i44n;i44+)p44i44=p14ii44;/p77,p33,p44冒泡排序wensen_mp(p77,n);wensen_mp(p33,n);wensen_mp(p44,n);/开场进展比较,p12的每一行

5、与p23的每一行进展比较for(int y=i;yn;y+)tt=0;/首先进展行赋值给另外一个数组for(int i88=0;i88n;i88+)p88i88=p23yi88;/首先进展行赋值给另外一个数组for(int i55=0;i55n;i55+)p55i55=p2yi55;/首先进展行赋值给另外一个数组for(int i66=0;i66n;i66+)p66i66=p24yi66;/p88,p55,p66冒泡排序wensen_mp(p88,n);wensen_mp(p55,n);wensen_mp(p66,n);/开场比较for(int a=0;an;a+)if(p77a=p88a)t

6、t=a;if(a=n-1)/也就是各个都相等,找到匹配/开场进展邻接矩阵对应位置比较for(int b=0;bn;b+)if(p33b=p55b)continue;else if(bn-1)cout不同构n;return;/开场进展同或矩阵for(int c=0;cn;c+)if(p44c=p66c)continue;else if(cn-1)cout不同构n;return;ttt+;/表示成功匹配一行/进展行行转换p2for(int u1=0;u1n;u1+)t=p2iu1;p2iu1=p2yu1;p2yu1=t;for(int u11=0;u11n;u11+)t=p2u11i;p2u11i

7、=p2u11y;p2u11y=t;/进展行行转换p23for(int u2=0;u2n;u2+)t=p23iu2;p23iu2=p23yu2;p23yu2=t;for(int u22=0;u22n;u22+)t=p23u22i;p23u22i=p23u22y;p23u22y=t;/进展行行转换p24for(int u3=0;u3n;u3+)t=p24iu3;p24iu3=p24yu3;p24yu3=t;for(int u33=0;u33n;u33+)t=p24u33i;p24u33i=p24u33y;p24u33y=t;break;elsecontinue;else if(y=n-1)/一直循

8、环到最后都未找到匹配cout不同构n;return;elsebreak;/上面的匹配没有问题,则进展行替换if(tt=n-1)if(ttt=n)cout同构n;return;else break;/成功跳出循环判断下一行三、 基于矩阵变换算法的计算复杂度分析最好、最差、平均情况复杂度:1.同构最好情况是:每一行都互相对应,所以复杂度为:3n2+3n3+8n2时间复杂度为O(n3)。2.同构最坏情况是:每一行都与最后一行对应,所以复杂度为:3n2+3n3+8n*n!时间复杂度为O(n*n!)3.所以平均时间复杂度为O(n*n!)四、 总结综合实验心得体会:1.实例演示邻接矩阵:2. 实验体会本课

9、程设计是为了判断无向图是否同构,采用了较为容易实现的邻接矩阵,同时用到了同型矩阵、行间异或矩阵、行间同或矩阵等知识。知道了同构当且仅当两图的邻接矩阵、行间同或矩阵、行间异或矩阵具有一样的行行置换。通过他们之间对应的关系,我写出了这个算法,并已经初步测试过,能正确判断图是否同构。通过本次的课程设计,让我更好的了解了算法的重要性,一个优异的算法能极大的减少运行时间。在本课程设计上,在异或矩阵的比对上,为了更好的实现元素比对,我采用了了冒泡排序法,可以让它实现有序的比对,这样就减少了比对的次数,减少运算时间。本算法还有挺多改进的地方,例如,算法复杂度太大,所以算法还有待进一步改善,以到达更优。/完全

10、代码*includeusing namespace std;/定义函数/222222同型矩阵void wensen_t*(int *p1,int *p2,int n)for(int i=0;in;i+)for(int j=0;j0)p2ij=1;elsep2ij=0;/33333异或矩阵void wensen_yh(int *p1,int *p2,int *p3,int n)for( int i=0;in;i+)for(int j=0;jn;j+)if(i=j)p3ij=p1ii;elseint sum1,sum12;sum1=0;for(int k=0;kn;k+)if(p2ik=p2jk)sum12=0;elsesum12=1;sum1=sum1+(p1ik+p1jk)*s

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号