算法分析课程设计

发布 2022-10-01 22:03:28 阅读 6494

算法分析与设计实验报告书评分。

题目:(例如)基于矩阵变换算法的图同构识别。

设计人:李文森。

班级:网络工程2班学号:1214080613213

一、 实验环境:

1、硬件环境:个人机,cpu主频:2.3ghz内存:4gb

2、软件环境:操作系统:windows

编程语言:c++

二、 实验任务解决方案:

实验思路:设两个无向图g=(v,e),g’=(v’,e’),g,g’同构当且仅当两图的邻接矩阵、行间同或矩阵、行间异或矩阵具有相同的行行置换。

1. 矩阵算法步骤。

a. 根据定义,求出同型矩阵aag、aag’.

b. 计算出行间同或矩阵rag、rag’,行间异或矩阵rxg、rxg’.

c. 以图g=(v,e)的行间异或矩阵为参照,对rxg的每一行,从rxg’搜索所有行,找到一个匹配。若不存在相应匹配,则两图不同构;若匹配,转步骤(4).

d. 判断邻接矩阵ag、ag’,行间同或矩阵中是否存在同样的匹配,若匹配存在,调整邻接矩阵ag’、行间异或矩阵rxg’、行间同或矩阵rag’对应的行和列;若不匹配,则不同构。

2、基于矩阵变换算法的流程图。

3、基于矩阵变换算法实现的关键**。

冒泡排序。void wensen_mp(int mp,int n)

int t;

for(int i=0;i

核心**。/异或矩阵行转换。

void wensen_hx(int **p1,int **p13,int **p14,int **p2,int **p23,int **p24,int n)

int *p77=new int[n];/用于替换的临时一维数组,存放p13

int *p88=new int[n];/用于替换的临时一维数组,存放p23

int *p33=new int[n];/用于替换的临时一维数组,存放p1

int *p44=new int[n];/用于替换的临时一维数组,存放p14

int *p55=new int[n];/用于替换的临时一维数组,存放p2

int *p66=new int[n];/用于替换的临时一维数组,存放p24

int *p99=new int[n];/用于行行替换的临时数组。

int t;

int tt;//进行跳转判断。

int ttt=0;//进行跳转判断。

//行行替换。

for( int i=0;i

首先进行行赋值给另外一个数组p1

for(int i33=0;i33

首先进行行赋值给另外一个数组。

for(int i44=0;i44

p77,p33,p44冒泡排序。

wensen_mp(p77,n);

wensen_mp(p33,n);

wensen_mp(p44,n);

开始进行比较,p12的每一行与p23的每一行进行比较。

for(int y=i;y

三、 基于矩阵变换算法的计算复杂度分析(最好、最差、平均情况复杂度):

1.同构最好情况是:每一行都互相对应,所以复杂度为:3n^2+3n^3+8n^2

时间复杂度为o(n^3)。

2.同构最坏情况是:每一行都与最后一行对应,所以复杂度为:3n^2+3n^3+8n*n!

时间复杂度为o(n*n!)

3.所以平均时间复杂度为o(n*n!)

四、 总结综合实验心得体会:

1.实例演示。

邻接矩阵:2. 实验体会。

本课程设计是为了判断无向图是否同构,采用了较为容易实现的邻接矩阵,同时用到了同型矩阵、行间异或矩阵、行间同或矩阵等知识。知道了同构当且仅当两图的邻接矩阵、行间同或矩阵、行间异或矩阵具有相同的行行置换。通过他们之间对应的关系,我写出了这个算法,并已经初步测试过,能正确判断图是否同构。

通过本次的课程设计,让我更好的了解了算法的重要性,一个优异的算法能极大的减少运行时间。在本课程设计上,在异或矩阵的比对上,为了更好的实现元素比对,我采用了了冒泡排序法,可以让它实现有序的比对,这样就减少了比对的次数,减少运算时间。本算法还有挺多改进的地方,例如,算法复杂度太大,所以算法还有待进一步改善,以达到更优。

/完全**。

#include

using namespace std;

/定义函数。

/22222222222222222222222同型矩阵。

void wensen_tx(int **p1,int **p2,int n)

for(int i=0;i

/3333333333333333333333异或矩阵。

void wensen_yh(int **p1,int **p2,int **p3,int n)

for( int i=0;i

///44444444444444444同或矩阵。

void wensen_th(int **p1,int **p2,int **p4,int n)

for(int i=0;i

输出函数。void wensen_out(int **p,char *s,int n)

cout< cout<<"n";

for(int i=0;i {

for(int j=0;j

算法分析课程设计

姓名挑战游戏。学习算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。课程设计要求同学独立完成一个较为完整的应用需求分析,在完成设计和编程大型作业的过程中,深化对算法课程中基本概念 理论和方法的理解 训练综合运用所学知识处理实际问题的能力,强化面向对象的程序设计理念 使同学的程序设计...

算法设计与分析课程设计

一 课程题目。零钱问题贪心算法实现。二 课程摘要。1 题目描述。使用贪心算法设计思想设计算法实现找零钱问题。例题13 4一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为25美分 10美分 5美分 及1美分的硬币。售货员分步骤组成...

算法设计与分析课程设计

一 课程题目。零钱问题贪心算法实现。二 课程摘要。1 题目描述。使用贪心算法设计思想设计算法实现找零钱问题。例题13 4 一个小孩买了价值少于1美元的糖,并将1美元的钱交给售货员。售货员希望用数目最少的硬币找给小孩。假设提供了数目不限的面值为2 5美分 1 0美分 5美分 及1美分的硬币。售货员分步...