算法分析与设计实验报告一

时间:2026-01-20

算法分析与设计

华中科技大学 算法分析与设计实验报告

学生姓名:庞 亮 系别:软件学院 专业与班号:软件工程0805 学号:U200818042

实验时间:第 二 周,星期三 ,晚上 实验房间号:软件学院五楼机房

[实验名称]Strassen’s 矩阵乘法和最近点对算法

[实验目的]

1、理解“分治法”算法设计思想及其实现步骤

2、掌握分治算法效率递归分析方法

3、掌握主方式求解递归式方法

[实验条件]

硬件:计算机

软件:计算机程序语言开发平台,如C、C++、Java、Matlab。

学生:至少掌握一门计算机程序设计语言,如C、C++、Java、Matlab。

[实验内容及要求]

1、利用计算机程序设计语言,实现教材第28.2 章介绍的“Strassen’s 矩阵乘法算法”,自主生成两个8×8 的矩阵,检验算法的正确性并输出算法结果。

2、比较 Strassen’s 矩阵乘法算法和数学定义的矩阵乘法算法效率之间的区别,并用直观的表达方式把两种不同矩阵乘法的效率随矩阵维数的变化趋势。

3、利用计算机程序设计语言,实现教材第33.4 章介绍的“最近点对算法”,在拟定的二维空间点集上检验算法的正确性并输出算法结果。

[实验原理]

1. Strassen’s矩阵乘法简介

Strassen’s算法是将矩阵分成了如图所示的均等的四块。分后的每一块儿任然还是方阵。所以可以由大问题分解成若干子问题进行解决。为了能使子问题能够返回到原始问题。

Strassen‘s算法提出了如下的计算公

式,可以用矩阵的子矩阵计算出S1-S7,然后又由S1-S7合成原始矩阵。而S1-S7的计算又是方阵的乘法。由此使用分治算法便可以解决问题。

算法分析与设计

2. 最近点对问题(Closest Pair Problems)算法简介

首先这个问题也是采用了分治的思想,将空间内的距离分成三类,分界线左边的点之间的距离,分界线右边的点之间的距离,还有分界线两边距离为D的区域内的两点间距离。

[算法具体代码]

1.矩阵相乘问题

// Strassen.cpp : 定义控制台应用程序的入口点。

//

//******************************************************************************** #include "stdafx.h"

#include "stdlib.h"

#define AM Copy(A,0,0,A.v/2)

#define BM Copy(A,A.v/2,0,A.v/2)

#define CM Copy(A,0,A.v/2,A.v/2)

#define DM Copy(A,A.v/2,A.v/2,A.v/2)

#define EM Copy(B,0,0,B.v/2)

#define FM Copy(B,B.v/2,0,B.v/2)

#define GM Copy(B,0,B.v/2,B.v/2)

#define HM Copy(B,B.v/2,B.v/2,B.v/2)

#define V 2

//******************************************************************************** //矩阵结构

typedef struct matrix

{

int v; int x[16][16]; }Matrix;

算法分析与设计

//******************************************************************************** //输入输出文件

FILE *fout;

FILE *fin;

//******************************************************************************** //矩阵打印(文件)

void fPrint(Matrix A)

{

}

//******************************************************************************** //矩阵打印(屏幕)

void Print(Matrix A)

{

}

//******************************************************************************** //矩阵截取

Matrix Copy(Matrix X,int x,int y,int v)

{

Matrix temp; temp.v=v; for(int i=x;i<x+v;i++) { for(int j=y;j<y+v;j++) { for(int j=0;j<A.v;j++) { } for(int i=0;i<A.v;i++) { } printf("\n"); printf("%d ",A.x[i][j]); for(int j=0;j<A.v;j++) { } for(int i=0;i<A.v;i++) { } fprintf(fout,"\n"); fprintf(fout,"%d ",A.x[i][j]);

算法分析与设计

}

} } temp.x[i-x][j-y]=X.x[i][j]; return temp;

//******************************************************************************** //矩阵相减

Matrix Minus(Matrix A,Matrix B)

{

}

//******************************************************************************** //矩阵相加

Matrix Plus(Matrix A,Matrix B)

{

}

//A: Copy(A,0,0,A.v/2)

//B: Copy(A,A.v/2,0,A.v/2)

//C: Copy(A,0,A.v/2,A.v/2)

//D: Copy(A,A.v/2,A.v/2,A.v/2);

//E: Copy(B,0,0,B.v/2) Matrix temp; temp.v=A.v; for(int j=0;j<A.v;j++) { } return temp; for(int i=0;i<A.v;i++) { } temp.x[i][j]=A.x[i][j]+B.x[i][j]; Matrix temp; temp.v=A.v; for(int j=0;j<A.v;j++) { } return temp; for(int i=0;i<A.v;i++) { } temp.x[i][j]=A.x[i][j]-B.x[i][j];

算法分析与设计

//F: Copy(B,B.v/2,0,B.v/2)

//G: Copy(B,0,B.v/2,B.v/2)

//H: Copy(B,B.v/2,B.v/2,B.v/2);

//******************************************************************************** //矩阵合并

Matrix Merge4(Matrix A,Matrix B,Matrix C,Matrix D)

{

}

//******************************************************************************** //矩阵相乘

Matrix Mutiply(Matrix A,Matrix B)

{ Matrix temp; temp.v=A.v*2; for(int i=0;i<A.v;i++) { } for(int i=0;i<B.v;i++) { } for(int i=0;i<C.v;i++) { } for(int i=0;i<D.v;i++) { } return temp; for(int j=0;j<D.v;j++) { } temp.x[i+D.v][j+D.v]=D.x[i][j]; for(int j=0;j<C.v;j++) { } temp.x[i][j+C.v]=C.x[i][j]; for(int j=0;j<B.v;j++) { } temp.x[i+B.v][j]=B.x[i][j]; for(int j=0;j<A.v;j++) { } temp.x[i][j]=A.x[i][j];

算法分析与设计

…… 此处隐藏:5195字,全部文档内容请下载后查看。喜欢就下载吧 ……

算法分析与设计实验报告一.doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:4.9 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:19元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219