叶志伟数据挖掘实验指导书(算法编程部分)

叶志伟数据挖掘实验指导书(算法编程部分)
叶志伟数据挖掘实验指导书(算法编程部分)

《数据挖掘与数据仓库》实验指导书

2013年

计算机学院计算应用

实验1 Apriori算法实现

一、实验目的

1、掌握Apriori算法对于关联规则挖掘中频繁集的产生以及关联规则集合的产生过程;

2、根据算法描述编程实现算法,调试运行。并结合相关实验数据进行应用,得到分析结果。数据和删除数据的操作。

实验类型:综合

计划课间:2学时

二、实验内容

1、频繁项集的生成与Apriori算法实现;

2、关联规则的生成过程与Rule-generate算法实现;

3、结合样例对算法进行分析;

三、实验步骤

编写程序完成下列算法:

1、Apriori算法

输入:数据集D;最小支持数minsup_count;

输出:频繁项目集L

L1={large 1-itemsets}

For (k=2; Lk-1≠Φ; k++)

Ck=apriori-gen (Lk-1); // Ck是k个元素的候选集

For all transactions t∈D do

begin Ct=subset(Ck,t); //Ct是所有t包含的候选集元素

for all candidates c ∈Ct do c.count++;

end

Lk={c ∈Ck| c.count ≧ minsup_count }

End

L=∪Lk;

2、apriori-gen (Lk-1) 候选集产生算法

输入: (k-1)-频繁项目集Lk-1

输出: k-频繁项目集Ck

For all itemset p∈Lk-1 do

For all itemset q∈Lk-1 do

If p.item1=q.item1, p.item2=q.item2, …,p.itemk-2=q.itemk-2, p.itemk-1

begin c=p∞q

if has_infrequent_subset(c, Lk-1)

then delete c

else add c to Ck

End

Return Ck

3、has_infrequent_subset(c, Lk-1)

功能:判断候选集的元素

输入:一个k-频繁项目集Lk-1 ,(k-1)-频繁项目集Lk-1

输出:c是否从候选集中删除的布尔判断

For all (k-1)-subsets of c do

If Not(S∈Lk-1) THEN return TRUE;

Return FALSE;

4、Rule-generate(L,minconf)

输入:频繁项目集;最小信任度

输出:强关联规则

算法:

FOR each frequent itemset lk in L

generules(lk,lk);

5、Genrules递归算法:

Genrules(lk:frequent k-itemset, xm:frequent m-itemset)

X={(m-1)-itemsets xm-1 | xm-1 in xm};

For each xm-1 in X

BEGIN conf=support(lk)/support(xm-1);

IF (conf≧minconf) THEN

BEGIN

输出规则:xm-1->(lk-xm-1),support,confidence;

IF (m-1)>1) THEN genrules(lk,xm-1);

END;

END;

结合相关样例数据对算法进行调试,并根据相关实验结果对数据进行分析,

四、实验报告要求

1、用C语言或者其他语言实现上述相关算法。

2、实验操作步骤和实验结果,实验中出现的问题和解决方法。

五、注意事项

1、集合的表示及相关操作的实现;

2、项目集的数据结构描述;

参考核心代码如下:(相关的测试main函数可以自己书写。根据频繁k项集生成关联规则相对简单,只需要计算最小置信度即可从频繁K项集中找到所有的满足条件的关联规则。)

//对事物进行第一次扫描,生成频繁一项集,并返回一项集中个数

int init_pass(char *item,char tran[len_t][len],int len,char

res_item[len_t][len],float min_sup)

{

float t_sup;

int number=0;

for(int i=0;i

{

int count=0;

for(int j=0;j

{

for(int k=0;k

if(item[i]==tran[j][k])

{

count++;

break;

}

break;

}

t_sup=count*1.0/len;

if(t_sup>=min_sup)

res_item[number++][0]=item[i];

}

return number-1;

}

//生成候选K项集,返回k项集中事物的个数

int candidate_gen(char ktran[len][k],char kktran[len][k+1]) {

char temp[k],temp1[k],ktemp[k+1];

int number=0;

for(int i=0;i

{

strcpy(temp,ktran[i]);

bool flag;

for(j=i+1;j

{

strcpy(temp1,ktran[i]);

for(int m=0;m

{

if((m

continue;

flag=true;

}

else {

flag=false;

break;

}

}

if(flag)

{

if(temp[k-1]>temp1[k-1])

{

strcpy(ktemp,temp1);

ktemp[k]=temp[k-1];

}

else

{

strcpy(ktemp,temp);

ktemp[k]=temp1[k-1]

}

break;

}

}

flag=judge(kemp,ktran[len][k]);

if(flag==true)

strcpy(kktran[number++],ktemp);

}

return number-1;

}

//判断子集是否在k项集中

bool judge(char *srcstr,char desstr[len][k]) {

char temp[k];

int count=0;

for(int i=0;i

{

for(int j=0;j

temp[j]=srcstr[j];

for(int j=i+1;j

temp[j]=srcstr[j];

for(int p=0;p

if(strcmp(temp,desstr[i])==0)

{

count++;

break;

}

}

if(count==k-1)

return true;

return false;

}

//apriori算法

int apriori(char item[len],char tran[length][len],char res_tran[length][len],float min_sup)

{

char ttran[length][len];

int number,count,t_num;

for(int i=0;i

for(int j=0;j

ttran[i][j]='0';

number=init_pass(item,tran[length][len],len,ttran[length][len],min_sup);

for(int i=0i

res_tran[i][0]=ttran[i][0];

for(int k=2;number!=0;k++)

{

t_num=number;

number=candidate_gen(res_item[number][k-1],ttran[number][k]);

if(k==2)

continue;

else

{

count=0;

for(int i=0;i

{

char temp[k];

strcpy(temp,ttran[i]);

bool t_flag=false;

for(int j=0;j

{//求出候选K项集中每个事物的支持计数

int t_k=0;

for(int n=0;n

bool m_flag=false

for(int g=t_k;g

{

if(temp[k]==tran[j][g])

{

m_flag=true;

t_k=g;

break;

}

}

if(m_flag==true && n==k-1)

t_flag=true;

}

if(t_flag==true)

count++;

flag = false;

}

if(count/length > min_sup)

strcpy(res_item[i],temp);

count=0;

}

}

}

return t_num; }

实验2-1 ID3算法实现

一、实验目的

通过编程实现决策树算法,信息增益的计算、数据子集划分、决策树的构建过程。加深对相关算法的理解过程。

实验类型:综合

计划课间:4学时

二、实验内容

1、分析决策树算法的实现流程;

2、分析信息增益的计算、数据子集划分、决策树的构建过程;

3、根据算法描述编程实现算法,调试运行;

三、实验方法

算法描述:

以代表训练样本的单个结点开始建树;

若样本都在同一个类,则该结点成为树叶,并用该类标记;

否则,算法使用信息增益作为启发信息,选择能够最好地将样本分类的属性;

对测试属性的每个已知值,创建一个分支,并据此划分样本;

算法使用同样的过程,递归形成每个划分上的样本决策树

递归划分步骤,当下列条件之一成立时停止:

给定结点的所有样本属于同一类;

没有剩余属性可以进一步划分样本,在此情况下,采用多数表决进行

四、实验步骤

1、算法实现过程中需要使用的数据结构描述:

Struct

{int Attrib_Col; // 当前节点对应属性

int Value; // 对应边值

Tree_Node* Left_Node; // 子树

Tree_Node* Right_Node // 同层其他节点

Boolean IsLeaf; // 是否叶子节点

int ClassNo; // 对应分类标号

}Tree_Node;

2、整体算法流程

主程序:

InputData();

T=Build_ID3(Data,Record_No, Num_Attrib);

OutputRule(T);

释放内存;

3、相关子函数:

3.1、 InputData()

{

输入属性集大小Num_Attrib;

输入样本数Num_Record;

分配内存Data[Num_Record][Num_Attrib];

输入样本数据Data[Num_Record][Num_Attrib];

获取类别数C(从最后一列中得到);

}

3.2、Build_ID3(Data,Record_No, Num_Attrib)

{

Int Class_Distribute[C];

If (Record_No==0) { return Null }

N=new tree_node();

计算Data中各类的分布情况存入Class_Distribute Temp_Num_Attrib=0;

For (i=0;i

If (Data[0][i]>=0) Temp_Num_Attrib++;

If Temp_Num_Attrib==0

{

N->ClassNo=最多的类;

N->IsLeaf=TRUE;

N->Left_Node=NULL;N->Right_Node=NULL;

Return N;

}

If Class_Distribute中仅一类的分布大于0

{

N->ClassNo=该类;

N->IsLeaf=TRUE;

N->Left_Node=NULL;N->Right_Node=NULL;

Return N;

}

InforGain=0;CurrentCol=-1;

For i=0;i

{

TempGain=Compute_InforGain(Data,Record_No,I,Num_Attrib); If (InforGain

{ InforGain=TempGain; CurrentCol=I;}

}

N->Attrib_Col=CurrentCol;

//记录CurrentCol所对应的不同值放入DiferentValue[];

I=0;Value_No=-1;

While i

Flag=false;

For (k=0;k

if (DiferentValu[k]=Data[i][CurrentCol]) flag=true;

if (flag==false)

{Value_No++;DiferentValue[Value_No]=Data[i][CurrentCol] }

I++;

}

SubData=以Data大小申请内存空间;

For (i=0;i

{

k=-1;

for (j=0;j

if (Data[j][CurrentCol]==DiferentValu[i])

{k=k++;

For(int i1=0;i1

If (i1<>CurrentCol)SubData[k][i1]=Data[j][i1];

Else SubData[k][i1]=-1;

}

N->Attrib_Col=CurrentCol;

N->Value=DiferentValu[i];

N->Isleaf=false;

N->ClassNo=0;

N->Left_Node=Build_ID3(SubData,k+1, Num_Attrib);

N->Right_Node=new Tree_Node;

N=N->Right_Node;

}

}

3.3、计算信息增益

Compute_InforGain(Data,Record_No, Col_No, Num_Attrib)

Int DifferentValue[MaxDifferentValue];

Int Total_DifferentValue;

Int s[ClassNo][MaxDifferentValue];

s=0;// 数组清0;

Total_DifferentValue=-1;

For (i=0;i

{

J=GetPosition(DifferentValue,

Total_DifferentValue,Data[i][Col_no]);

If (j<0) {Total_DifferentValue++;

DifferentValue[Total_DifferentValue]=Data[i][Col_no];

J=Total_DifferentValue;}

S[Data[i][Num_Attrib-1]][j]++;

}

Total_I=0;

For (i=0;i

{

Sum=0;

For(j=0;j

}

EA=0;

For (i=0;i

{ temp=0;sj=0; //sj是数据子集中属于类j的样本个数;

For (j=0;j

sj+=s[j][i];

For (j=0;j

EA+=sj/Record_No*Compute_PI(s[j][i]/sj);

}

Return total_I-EA;

}

3.4、得到某数字在数组中的位置

GetPosition(Data, DataSize,Value)

{

For (i=0;i

Return -1;

}

3.5、计算Pi*LogPi

Float Compute_PI(float pi)

{

If pi<=0 then return 0;

If pi>=1 then return 0;

Return 0-pi*log2(pi);

}

五、实验报告要求

1、用C语言或者其他语言实现上述相关算法。

2、实验操作步骤和实验结果,实验中出现的问题和解决方法。

六、注意事项

1、信息增益的计算;

2、选择相关字段后根据相关字段的取值对数据集合进行划分。

3、决策树构建的终止条件

实验2-2 贝叶斯算法实现

一、实验目的

通过对贝叶斯算法的编程实现,加深对贝叶斯算法的理解,同时利用贝叶斯算法对简单应用实现预测分类

实验类型:综合

计划课间:2学时

二、实验内容

1、分析贝叶斯算法;

2、计算条件概率;

3、预测精度的计算与评估;

4、编程实现贝叶斯分类算法,并对简单应用样本数据实现预测分类

5. 参考实验数据https://www.360docs.net/doc/469222334.html,/ml/machine-learning-databases/wine/

三、实验方法

1、实现贝叶斯算法

2、利用实验数据对贝叶斯算法进行检测

3、求解精确度计算

4、调试程序

5、完成整个分类与评估的过程

四、实验步骤

4.1 算法过程描述:

1)输入训练数据,将数据保存在DataBase二维数组中(数组的最后一个属性对应类别标号)

2)设定训练数据集与测试数据集大小(指定从数组下标0开始到TrainSetSize-1所对应的

数据为训练数据,其余为测试数据);

3)计算训练数据集数据中各属性在各类中的概率分布情况;

4)利用测试数据计算贝叶斯算法的分类精度;

5)输出分类结果;

4.2 数据处理

B、对数据中的枚举类型数据进行转换以便于数据处理:

4.3 计算训练数据集数据中各属性在各类中的概率分布情况如图3-1所示4.4 利用测试数据计算贝叶斯算法的分类精度如图3-2所示

图3-1 训练数据集各属性的概率分布计算

图3-2 贝叶斯算法的分类精度计算

4.5 输出分类结果

For (i=0;i

{printf(“\n”);

For (j=0;j

}

printf(“\n\nTotal Correct is%d”,TotalCorrect);

五、注意事项

注意单个样例数据的概率计算与各字段的概率计算的关系

参考代码 (对参考数据的代码)

BayesianClassifier.h

#include

#include

#include

#include

#include

#include

#include

using namespace std;

// 1) Alcohol

// 2) Malic acid

// 3) Ash

// 4) Alcalinity of ash

// 5) Magnesium

// 6) Total phenols

// 7) Flavanoids

// 8) Nonflavanoid phenols

// 9) Proanthocyanins

// 10)Color intensity

// 11)Hue

// 12)OD280/OD315 of diluted wines

// 13)Proline

int TrainNum = 130; //所有训练数据的范围

int TestNum = 48;

struct OriginalData

{

double A1;

double A2;

double A3;

double A4;

double A5;

double A6;

double A7;

double A8;

double A9;

double A10;

double A11;

double A12;

double A13;

double A14;

};

BayesianClassifier.cpp

#include

#include

#include

#include"BayesianClassifier.h"

using namespace std;

const int Shuxing=13;//属性总数

ifstream f;

vector trainData; //存放训练数据

vector testData; //存放测试数据

double A[3]; //先验概率

int m;

//存放每一类型,每种属性中某数值的概率

map C1_map[Shuxing];

map C2_map[Shuxing];

map C3_map[Shuxing];

//从文件中读取数值

void DataRead(vector &data, const char* fileName)

{

f.open(fileName);

int ZHjiang;

if (fileName[0] == 'w')

ZHjiang = TrainNum;

else

ZHjiang = TestNum;

string line;

OriginalData wine;

for (int i = 0; i < ZHjiang; i++)

{

f >> line;

while (line.find(',') > 0 && line.find(',') < line.length())

{

line[line.find(',')] = ' ';

}

istringstream stream(line);

stream >> wine.A1 >> wine.A2 >> wine.A3 >> wine.A4 >> wine.A5 >> wine.A6 >> wine.A7 >> wine.A8 >>

wine.A9 >> wine.A10 >> wine.A11 >> wine.A12 >> wine.A13 >> wine.A14;

data.push_back(wine);

}

f.close();

}

void bayes()

{

int count1 = 0, count2 = 0, count3 = 0;

int i;

for(i = 0; i < TrainNum; i++)

{

if(trainData[i].A1 == 1)

{

count1 ++;

}

if(trainData[i].A1 == 2)

{

count2 ++;

}

if(trainData[i].A1 == 3)

{

count3 ++;

}//统计三类数据,各自求和

}

A[0] = (double)count1/(double)TrainNum; //求先验概率

A[1] = (double)count2/(double)TrainNum;

A[2] = (double)count3/(double)TrainNum;

map::iterator pipei;

for(i = 0 ; i < TrainNum; i++)

{

if(trainData[i].A1 == 1) //求P(Xk|C1) 中Xk的个数

{

int j=0;

for(;j< 13 ;j++)

{

double temp = *(&trainData[i].A2+j);

pipei = C1_map[j].find(temp);

if(pipei == C1_map[j].end())

{

C1_map[j].insert(map::value_type(temp,1));

}

else

{

double j = pipei->second;

pipei->second = j + 1;

}

}

}

if(trainData[i].A1 == 2) //求P(Xk|C2) 中Xk的个数

{

int j = 0;

for(;j< 13 ;j++)

{

double temp = *(&trainData[i].A2+j);

pipei = C2_map[j].find(temp);

if(pipei == C2_map[j].end())

{

C2_map[j].insert(map::value_type(temp,1));

}

else

{

double j = pipei->second;

pipei->second = j + 1;

}

}

}

if(trainData[i].A1 == 3) //求P(Xk|C3) 中Xk的个数

{

int j = 0;

for(;j< 13 ;j++)

{

double temp = *(&trainData[i].A2+j);

pipei = C3_map[j].find(temp);

if(pipei == C3_map[j].end())

{

C3_map[j].insert(map::value_type(temp,1));

算法分析与设计实验指导书

《算法分析与设计》实验指导书本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深对讲授容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。 上机实验一般应包括以下几个步骤: (1)、准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机。(2)、上机输入和调试自己所编的程序。一人一组,独立上机调试,上机时出现的问题,最好独立解决。 (3)、上机结束后,整理出实验报告。 实验报告应包括: 1)问题分析 2)算法描述 3)运行结果、 4)算法性能分析。 实验一 实验名称:贪心算法应用及设计 实验学时:6学时 实验类型:验证 实验目的: 1.理解贪心算法的基本思想 2.掌握利用贪心算法求解问题的求解步骤 实验容 1.活动选择问题(2学时) 问题描述: 设有11个会议等待安排,用贪心法找出满足目标要求的会议集合,这些会议按结束时间的非减序排列如下表。 实验实现提示: 1)数据结构设计: 将会议开始时间存储在数组B中,结束时间存储在数组E中,数组下标为会议的代码。结果存储在数组A中,其元素A[i]==true,表示会议i被选中。 2)算法: void GreedySelect(int n, struct time B[], struct time E[], bool A[]) { int i,j;

A[1]=true; j=1; i=2; while( i<=n) if (B[i]>=E[j]) { A[i]=true; j=i;} else A[i]=false; } 思考题:证明所得的解是最优解? 2.单源点最短路径问题。(2学时) 问题描述 如图所示的有向带权图中,求源点0到其余顶点的最短路径及最短路径长度。并对算法进行性能分析。 实现提示 1)数据结构设计: 将图存储在邻接矩阵C中,结点个数为n,源点编号为u, 源点u到其余顶点的最短路径长度存储在dist[],最短路径存储在p[]。 2) 算法 void Dijkstra(int C[n][n], int n,int u,float dist[],int p[]) { bool s[n]; for( int i=1; i<=n; i++) { dist[i]=C[u][i]; s[i]=false; if (dist[i]=∞) p[i]=-1; else p[i]=u; } p[u]=-1; s[u]=true; for( i=1; i<=n; i++) { int temp= ∞; int t=u; for( int j=1;j<=n;j++)

算法设计与分析实验指导2014版

算法分析 设计与实验 王 源 二0一四年十月

实验一:分治算法及其应用 实验要求: 掌握分治算法的原理. 掌握递归算法及递归程序的设计. 能用程序设计语言设计求解典型问题的算法 实验题: 1、棋盘覆盖问题:在一个2k ×2k 个方格组成的棋盘中,恰有一个方格与其他方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。用图示的4种不同形态的L 型骨牌覆盖给定的特殊棋盘上除特殊方格以外的所有方格,且任何2个L 型骨牌不得重叠覆盖。 2、最近对问题:设p 1=(x 1,y 1), p 2=(x 2,y 2), …, p n =(x 1,y 1),是平面上n 个点构成的集合S ,最近对问题就是找出集合S 中距离最近的点对。 3、(选作)最大子段和问题:给定由n 个整数(可能有负整数)组成的序列(a 1, a 2, …, a n ), 最大子段和问题要求该序列形如 的最大值(1≤i ≤j ≤n ),当序列中所有整数均为负 整数时,其最大子段和为0。例如,序列(-20, 11, -4, 13, -5, -2)的最大子段和为 。 ∑=j i k k a ∑==4 220 k k a

实验要求: 基本动态规划法的原理方法; 能用程序设计语言实现求解背包问题的算法 实验题: 1、最长公共子序列问题:对给定序列X=(x1, x2,…, xm)和序列Z=(z1, z2,…, zk),Z是X的子序列当且仅当存在一个递增下标序列(i1, i2,…, ik),使得对于所有j=1, 2, …, k,有(1≤ij ≤m)。给定两个序列X和Y,当序列Z既是X的子序列又是Y的子序列时,称Z是序列X 和Y的公共子序列最长公共子序列问题就是在序列X和Y中查找最长的公共子序列。 2、(选作)多段图的最短路径问题:设图G=(V, E)是一个带权有向图,如果把顶点集合V 划分成k个互不相交的子集Vi (2≤k≤n, 1≤i≤k),使得E中的任何一条边(u, v),必有u∈Vi,v∈Vi+m (1≤i≤k, 1<i+m≤k),则称图G为多段图,称s∈V1为源点,t∈Vk为终点。多段图的最短路径问题求从源点到终点的最小代价路径。 3、

数据结构课程设计指导书

数据结构课程设计指导 一、课程设计要求 课程设计是数据结构课程的一个综合实践练习,是有别于课程实验的一个独立实践教学环节。课程设计一般在课程结束后进行,教学时数为1周。具体要求如下: 1、结合实际问题进一步理解和深化课程理论知识,做到理论与实际相结合。 2、能对实际问题进行分析和抽象,并进行数据结构设计和算法设计,具有初步的分析问题和解决问题的能力。 3、了解软件工程的理论与方法,初步掌握软件开发过程中的需求分析、系统设计、编码、测试等基本方法和技能。 4、进一步强化编程训练,提高程序设计能力。 5、设计内容要有一定的深度和难度,达到一定工作量,代码量不低于500行。 二、课程设计内容 课程设计的主要工作如下: 1、问题定义与需求分析:根据设计题目的要求,对问题进行分析,确定系统的功能需求和性能需求。 2、数据结构与算法设计:对问题描述中涉及的数据对象定义相应的数据结构,包括逻辑结构、存储定义和主要操作。对主要算法要进行时间和空间复杂度分析。 3、概要设计:采用面向对象方法设计软件结构,定义类及类之间的关系。要求系统结构合理、易于实现。 4、详细设计:对数据结构和基本操作做进一步的求精,写出数据存储定义,用程序流程图或伪码对算法进行描述。 5、编码与测试:用C++编程实现系统,并设计测试用例对系统进行测试,修改程序中的错误,形成格式和风格良好的源程序清单。 6、设计结果分析:对系统应用效果进行分析,评价系统的先进性、实际应用价值及在在的问题。 7、撰写课程设计报告。 三、课程设计考核 课程设计考核内容包括设计作品和设计报告两个部分。设计作品包括可运行的源程序(刻录成光盘),系统使用说明,主要程序代码(打印附在课程报告内)。课程设计报告主要报告系统分析、设计和实现过程,内容如下: 1、问题定义及设计要求; 2、主要设计内容:详细报告课程设计中所做的主要工作,包括系统分析、概要设计、数据结构设计、算法设计及模块设计和编程及测试等。 3、总结与体会:写出本次课程设计的主要创新点及存在的问题。 4、参考文献:列出所参考的主要文献。 5、小组成员及分工。 课程设计成绩分两部分,设计报告占50%,设计作品占50%。评价因素主要有:

《数学实验》实验指导书

《数学实验》实验指导书 2012-4-12

目录 实验一MATLAB基础 (1) 实验二曲线与曲面 (8) 实验三极限、导数和积分 (15) 实验四无穷级数 (22) 实验五微分方程 (25) 实验六线性代数 (27) 实验七概率论与数理统计 (31) 实验八代数方程与最优化问题 (32) 实验九数据拟合 (34) 实验十综合性实验 (36)

实验一MATLAB基础 【实验目的】 1. 熟悉启动和退出MATLAB的方法,及MATLAB工作窗口的组成; 2. 掌握建立矩阵的方法; 3. 掌握MATLAB的语言特点、基本功能; 4. 掌握MATLAB的文件创建、运行及保存方法; 5. 掌握MATLAB的符号运算; 6. 掌握MATLAB的平面绘图命令及辅助操作; 7. 掌握MATLAB的常用函数及命令; 8. 掌握MATLAB选择结构和循环结构程序设计。 【实验内容】 1. 熟悉MATLAB的工作界面及运行环境,熟悉MATLAB的基本操作。 2. 已知 ? ? ? ? ? ?? ? ? ? ? ? - - - -= 13 2 3 1 5 11 2 2 2 3 15 9 2 1 2 7 A (1)求矩阵A的秩(rank) (2)求矩阵A的行列式(determinant) (3)求矩阵A的逆(inverse) (4)求矩阵A的特征值及特征向量(eigenvalue and eigenvector)。 3. 在MATLAB计算生成的图形上标出图名和最大值点坐标。 4. 求近似极限,修补图形缺口。 5. 逐段解析函数的计算和表现。本例演示削顶整流正弦半波的计算和图形绘制。 6. 建立M文件,随机产生20个数,求其中最大数和最小数。要求分别用循环结构和调用MATLAB 的max和min函数来实现。 7. 建立M文件,分别用if语句和switch语句实现以下计算,其中, c b a, , 的值从键盘输入。

《算法分析与设计》实验指导书

《计算机算法设计与分析》实验指导书(第一版)

前言 计算机算法分析与设计是面向设计的,它是计算机科学的核心。无论是计算机系统、系统软件和解决计算机的各种应用问题都可归结为算法的设计。通过本课程的学习,使学生掌握计算机领域中许多常用的非数值的算法描述:分治法、贪心法、动态规划、回溯法、分枝限界等算法,并掌握算法分析的方法,从而把学生的分析问题和解决问题能力提高到理论的高度。 前期课程为程序设计语言、数据结构、高等数学,即学生应该具备一门高级语言程序设计编程基础,学习基本的数据结构知识,还要求学生掌握较好的数学基础。 开发环境不限,本书采用C/C++语言的集成开发环境等。 实验完成后书写实验报告,包含实验问题、基本思想、关键算法流程图、测试数据及运行结果(截图)、调试心得和源程序。 总实验学时为16学时。

目录 预备实验验证算法的方法 (4) 实验目的: (4) 实验课时: (4) 实验原理: (4) 实验题目: (6) 基本题: (6) 提高题: (6) 实验一递归与分治 (7) 实验目的: (7) 实验课时: (7) 实验原理: (7) 实验题目: (7) 基本题: (7) 提高题: (8) 思考问题: (8) 实验二动态规划算法 (9) 实验目的: (9) 实验课时: (9) 实验原理: (9) 实验题目: (9) 基本题: (9) 提高题: (10) 思考问题: (10) 实验三贪心选择算法 (11) 实验目的: (11) 实验课时: (11) 实验原理: (11) 实验题目: (11) 基本题: (11) 提高题: (12) 思考问题: (12) 实验四回溯算法 (13) 实验目的: (13) 实验课时: (13) 实验原理: (13) 实验题目: (14) 基本题: (14) 提高题: (14) 思考问题: (14)

《算法设计与分析》实验指导

《算法分析与设计》实验指导.

实验一锦标赛问题 [实验目的] 1.基本掌握分治算法的原理. 2.能用程序设计语言求解锦标赛等问题的算法; [预习要求] 1.认真阅读数据结构教材和算法设计教材,了解分治算法原理; 2.设计用分治算法求解背包问题的数据结构与程序代码. [实验题] 【问题描述】设有n=2k个运动员要进行网球循环赛。现要设计一个满足以下要求的比赛日程表: (1)每个选手必须与其他n-1个选手各赛一次; (2)每个选手一天只能参赛一次; (3)循环赛在n-1天内结束。 请按此要求将比赛日程表设计成有n行和n-1列的一个表。在表中的第i行,第j列处填入第i个选手在第j天所遇到的选手。其中1≤i≤n,1≤j≤n-1。 [实验提示] 我们可以按分治策略将所有的选手分为两半,则n个选手的比赛日程表可以通过n/2个选手的比赛日程表来决定。递归地用这种一分为二的策略对选手进行划分,直到只剩下两个选手时,比赛日程表的制定就变得很简单。这时只要让这两个选手进行比赛就可以了。 1 2 3 4 5 6 7 1 (1)(2)(3) 图1 2个、4个和8个选手的比赛日程表 图1所列出的正方形表(3)是8个选手的比赛日程表。其中左上角与左下角的两小块分别为选手1至选手4和选手5至选手8前3天的比赛日程。据此,将左上角小块中的所有数字按其相对位置抄到右下角,又将左下角小块中的所有数字按其相对位置抄到右上角,这

样我们就分别安排好了选手1至选手4和选手5至选手8在后4天的比赛日程。依此思想容易将这个比赛日程表推广到具有任意多个选手的情形。 [实验步骤] 1.设计并实现算法并准备测试用例,修改并调试程序,直至正确为止; 2.应用设计的算法和程序求锦标赛问题; 3.去掉测试程序,将你的程序整理成功能模块存盘备用. [实验报告要求] 1.阐述实验目的和实验内容; 2.阐述分治算法原理; 3.提交实验程序的功能模块; 4.记录最终测试数据和测试结果。 [思考与练习] 【金块问题】老板有一袋金块(共n块,n是2的幂(n>=2)),将有两名最优秀的雇员每人得到其中的一块,排名第一的得到最重的那块,排名第二的雇员得到袋子中最轻的金块。假设有一台比较重量的仪器,请用最少的比较次数找出最重和最轻的金块。

数据结构与算法实验指导书

数据结构与算法》实验指导书 实验1 顺序表 一、实验目的 ( 1)掌握顺序表的逻辑结构、存储结构及描述方式。 ( 2)掌握顺序表的定位、插入、删除等操作。 二、实验要求 ( 1)调试程序要记录调试过程中出现的问题及解决办法; ( 2)给出每个问题的算法或画出流程图; ( 3)编写程序要规范、正确,上机调试过程和结果要有记录,并注意调试程序集成环境的掌握及应用,不断积累编程及调试经验; ( 4)做完实验后给出本实验的实验报告。 三、实验设备、环境 奔腾以上计算机,装有 Turbo C 2.0 或 Visual C++ 软件 四、实验步骤及内容 实验步骤: 1.根据题目,编写程序。 2.上机调试通过。 3.按照金陵科技学院实验报告格式,撰写各实验报告。 实验内容: (1)编写一个函数 print_all_data ,该函数的作用是逐个输出顺序表中所有数据元素的值。编写主函数,从键盘输入顺序表,调用函数 print_all_data ,测试结果。 (2)编写顺序表定位操作函数 locata ,该函数的作用是在顺序表中查找是否存在数据元素的值与变量 x 的值相等。如果存在满足条件的数据元素,则返回顺序表中和 x 值相等的第 1 个数据元素在表中的下标;如果不存在,则返回- 1 。编写主函数,从键盘输入顺序表,以及变量 x 的值,调用函数 locate ,测试结果。 (3)编写一个函数 insert ,该函数的作用是在递增有序的顺序表中插入一个新结点x,要求保持顺序表的有序性,输出插入前后顺序表状态。编写主函数,从键盘输入顺序表以及变量 x 的值,调用函数 insert ,测试结果。 (4)编写一个函数 delete ,该函数的作用是删除顺序表中所有等于 X 的数据元素。若顺序表中没有满足条件的数据元素,则输出合适的信息。若有满足条件的数据元素,则输出删除前后顺序表状态。编写主函数,从键盘输入顺序表以及变量 x 的值,调用函数

计算方法上机实验指导书刘轶中

理学院 《计算方法》实验指导书 适合专业:信息与计算科学 数学与应用数学 XX大学 二OO七年八月

前言 《计算机数值计算方法》包括很多常用的近似计算的处理手段和算法,是计算科学与技术专业的必修课程,为了加强学生对该门课程的理解,使学生更好地掌握书中的计算方法、编制程序的能力,学习计算方法课程必须重视实验环节,即独立编写出程序,独立上机调试程序,必须保证有足够的上机实验时间。 在多年教学实践基础上编写了《计算机数值计算方法》上机实习指南,目的是通过上机实践,使学生能对教学内容加深理解,同时培养学生动手的能力.本实习指南,可与《计算机数值计算方法》课本配套使用,但是又有独立性,它不具体依赖哪本教科书,主要的计算方法在本指南中都有,因此,凡学习计算方法课的学生都可以参考本指南进行上机实习。 上机结束后,按要求整理出实验报告。实验报告的内容参阅《计算机数值计算方法》上机实验大纲。

目录 第一章解线性方程组的直接法 实验一Gauss列主元素消去法 实验二解三对角线性方程组的追赶法第二章插值法与最小二乘法 实验三lagrange插值法 实验四分段插值法 实验五曲线拟合的最小二乘法 第三章数值积分 实验六复合求积法 实验七变步长法 第四章常微分方程数值解法 实验八Euler方法 第五章解线性方程组和非线性方程的迭代法

实验九Jacobi 迭代法、Gauss-Seidel 迭代法 实验十 Newton 迭代法 实验一 : Gauss 列主元素消去法 实验学时:2 实验类型:验证 实验要求:必修 一、实验目的 用gauss 消去法求线性方程组AX=b. 其中 一、 实验内容 ??? ??? ? ??=??? ???? ??=?? ??? ???????? ?=b b b x x x a a a a a a a a a n n nn n n n n b X A 21221222 21112111....................................

算法设计与分析课程设计-实验指导书

算法设计与分析课程设计 实验指导书 上海第二工业大学 计算机与信息学院软件工程系

一、运动员比赛日程表 设有n=2k个运动员要进行网球比赛。设计一个满足以下要求的比赛日程表: ●每个选手必须与其它n-1个选手各赛一次 ●每个选手一天只能赛一次 ●循环赛一共进行n-1天 1、运用分治策略,该问题的递归算法描述如下,根据算法编制程序并上机 通过。 输入:运动员人数n(假定n恰好为2的i次方) 输出:比赛日程表A[1..n,1..n] 1. for i←1 to n //设置运动员编号 2. A[i,1]←i 3. end for 4. Calendar(0,n) //位移为0,运动员人数为n。 过程Calendar(v, k) //v表示位移(v=起始行-1),k表示运动员人数。 1. if k=2 then //运动员人数为2个 2. A[v+2,2]←A[v+1,1] //处理右下角 3. A[v+1,2]←A[v+2,1]//处理右上角 4. else 5. Calendar(v,k/2) //假设已制定了v+1至v+k/2运动员循环赛日程表 6. Calendar(v+k/2,k/2) //假设已制定了v+k/2+1至v+k运动员循环赛日程表 7. comment:将2个k/2人组的解,组合成1个k人组的解。 8. for i←1 to k/2 9. for j←1 to k/2 10. A[v+i+k/2,j+k/2]←A[v+i,j] //沿对角线处理右下角 11. end for 12. end for 13. for i←k/2+1 to k 14. for j←1 to k/2 15. A[v+i-k/2,j+k/2]←A[v+i,j] //沿对角线处理右上角 16. end for 17. end for 18. end if 2、编制该问题的非递归算法,上机通过。 将如上文件保存在命名为“学号+姓名+实验一”的文件夹中并上传到指定的服务器。

算法设计与分析实验指导书样本

算法设计与分析实验指导书

实验一 C/C++环境及递归算法( 4学时) 一、实验目的与要求 1、熟悉C/C++语言的集成开发环境; 2、经过本实验加深对递归过程的理解 二、实验内容: 掌握递归算法的概念和基本思想, 分析并掌握排列问题的递归算法和Hanoi塔问题的递归算法。 三、实验题 1、设计一个递归算法生成n个元素{r1,r2,…,rn}的全排列。任意输入一 串整数或字符, 输出结果能够用递归方法实现整数或字符的全排列。 2、设a,b,c是3个塔座。开始时, 在塔座a上有一叠共n个圆盘, 这些圆 盘自下而上, 由大到小地叠在一起。各圆盘从小到大编号为1,2,…,n,现要求将塔座a上的这一叠圆盘移到塔座b上, 并仍按同样顺序叠置。 四、实验步骤 1.理解算法思想和问题要求; 2.编程实现题目要求; 3.上机输入和调试自己所编的程序; 4.验证分析实验结果; 5.整理出实验报告。 实验提示 1、 #include inline void swap(int &a,int &b) { int temp=a; a=b;

b=temp; } void perm(int list[],int k,int m) { if(k==m) { for(int i=0;i<=m;i++) cout<

计算机组成原理虚拟实验指导书

计算机组成原理实验指导书 (虚拟实验系统)

实验1 1位全加器 ?实验目的 ?掌握全加器的原理及其设计方法。 ?熟悉组成原理虚拟教学平台的使用。 ?实验设备 与非门(3片)、异或门(2片)、开关若干、指示灯若干 ?实验原理 1位二进制加法器单元有三个输入量:两个二进制数Ai,Bi和低位传来的进位信号Ci,两个输出量:本位和输出Si以及向高位的进位输出C(i+1),这种考虑了全部三个输入量的加法单元称为全加器。来实验要求利用基本门搭建一个全加器,并完成全加器真值表。 ?实验步骤 各门电路芯片引脚显示于组件信息栏。 1. 测从组件信息栏中添加所需组件到实验流程面板中,按照图1.1所示搭建实验。 图1.1 组合逻辑电路实验流程图

2. 打开电源开关,按表1设置开关的值,完成表1-1。 表1-1 实验2 算术逻辑运算实验 ?实验目的 ?了解运算器的组成结构 ?掌握运算器的工作原理 ?掌握简单运算器的组成以及数据传送通路 ?验证运算功能发生器(74LS181)的组合功能 ?实验设备 74LS181(2片),74LS273(2片), 74LS245(2片),开关若干,灯泡若干,单脉冲一片 ?实验原理 实验中所用的运算器数据通路图如图2.1所示,实验中的运算器由两片74LS181以并/串形式构成8位字长的ALU。运算器的输出经过一个三态门(74LS245)和数据总线相连,运算器的两个数据输入端分别由两个锁存器(74LS373)锁存,锁存器的输入连至数据总线,数据开关用来给出参与运算的数据(A和B),并经过一个三态门(74LS245)和数据显示灯相连,显示结果。 ?74LS181:完成加法运算 ?74LS273:输入端接数据开关,输出端181。在收到上升沿的时钟信号前181和其 输出数据线之间是隔断的。在收到上升沿信号后,其将输出端的数据将传到181, 同时,作为触发器,其也将输入的数据进行保存。因此,通过增加该芯片,可以通 过顺序输入时钟信号,将不同寄存器中的数据通过同一组输出数据线传输到181 芯片的不同引脚之中 ?74LS245:相当于181的输出和数据显示灯泡组件之间的一个开关,在开始实验后

计算方法实验指导书

计算方法实验指导书 河北大学电子信息工程学院 2007年9月 目录 计算方法实验教学计划 (2) 实验一MATLAB基本操作 (3) 实验二插值法 (5) 实验三线性方程组的直接解法 (7) 实验四线性方程组的迭代方法 (10) 实验五函数逼近与曲线拟合.................................................... . (12) 计算方法实验教学计划 指导教师:李昆仑 学时数:10学时周4学时2次实验,共3周6次实验,第7—9教学周, 每次实验2学时 所用仪器设备:实验软件系统 实验指导书:Matlab实验指导书自编 实验参考书: 《计算方法》, 徐萃薇等编着,高等教育出版社, 《数值分析与实验》,薛毅编着,北京工业大学出版社, 实验项目: A, MATLAB基本操作 内容:矩阵操作,基本数学函数,逻辑函数操作等; 要求:完成一些基本练习题 B, 插值法 内容:Lagrange插值、分段线性插值、三次样条在计算机上用MATLAB软件实现 要求:完成一些基本练习题 C, 线性方程组的求解——直接解法 内容:高斯消元法,列主元素法及其误差分析等在计算机上用MATLAB软件实现。 要求:用实例在计算机上计算和作图。 D, 线性方程组的求解——迭代法 内容:向量和矩阵的范数,雅可比迭代法,高斯-赛德尔迭代法及其收敛性等在计算机上用MATLAB软件实现。 要求:用实例在计算机上计算。 E, 函数逼近与曲线拟合 内容:曲线拟和与最小二乘方法在计算机上用MATLAB软件实现,并用实例在计算机上计算和作图。 要求:用实例在计算机上计算。 实验一 MATLAB基本操作 实验目的 熟悉MATLAB的使用方法及特点;学会建立MATLAB搜索路径;熟悉MATLAB工作空间、MATLAB 集成环境、命令窗口;掌握MATLAB的通用命令、管理命令和函数、管理变量和工作空间的使用方法;

计算方法实验指导书.

计算方法 实 验 指 导 书 彭彬 计算机技术实验中心 2012年3月

· 实验环境: VC++ 6.0 · 实验要求:在机房做实验只是对准备好的实验方案进行验证,因此上机前要检查实验准备情况,通过 检查后方可上机。没有认真准备的学生不能上机,本次实验没有分数。实验中要注意考察和体会数值计算中出现的一些问题和现象:误差的估计,算法的稳定性、收敛性、收敛速度以及迭代初值对收敛的影响等。 · 关于计算精度:如果没有特别说明,在计算的过程中,小数点后保留5位数字,最后四舍五入到小数 点后四位数字。迭代运算的结束条件统一为 51 102 -?。在VC++ 6.0中,可使用setprecision 在流的输出中控制浮点数的显示(缺省显示6位)。演示如下: # include # include # include //输出6位精度,输出左对齐 cout<

《算法设计与分析》实验指导书 bfm(全)

《算法设计与分析》实验指导书 计算机学院信息安全系毕方明 本书是为配合《算法分析与设计实验教学大纲》而编写的上机指导,其目的是使学生消化理论知识,加深对讲授内容的理解,尤其是一些算法的实现及其应用,培养学生独立编程和调试程序的能力,使学生对算法的分析与设计有更深刻的认识。 上机实验一般应包括以下几个步骤: (1)、准备好上机所需的程序。手编程序应书写整齐,并经人工检查无误后才能上机。(2)、上机输入和调试自己所编的程序。一人一组,独立上机调试,上机时出现的问题,最好独立解决。 (3)、上机结束后,整理出实验报告。实验报告应包括:题目、程序清单、运行结果、对运行情况所作的分析。 本书共分阶段4个实验,每个实验有基本题和提高题。基本题必须完成,提高题根据自己实际情况进行取舍。题目不限定如下题目,可根据自己兴趣爱好做一些与实验内容相关的其他题目,如动态规划法中的图象压缩,回溯法中的人机对弈等。 其具体要求和步骤如下: 实验一分治与递归(4学时) 一、实验目的与要求 1、熟悉C/C++语言的集成开发环境; 2、通过本实验加深对递归过程的理解 二、实验内容: 掌握递归算法的概念和基本思想,分析并掌握“整数划分”问题的递归算法。 三、实验题 任意输入一个整数,输出结果能够用递归方法实现整数的划分。 四、实验步骤 1.理解算法思想和问题要求; 2.编程实现题目要求; 3.上机输入和调试自己所编的程序; 4.验证分析实验结果; 5.整理出实验报告。 一、实验目的与要求 1、掌握棋盘覆盖问题的算法; 2、初步掌握分治算法 二、实验题: 盘覆盖问题:在一个2k×2k个方格组成的棋盘中,恰有一个方格与其它方格不同,称该方格为一特殊方格,且称该棋盘为一特殊棋盘。在棋盘覆盖问题中,要用图示的4种不同形

数据结构-实验指导书

《数据结构》实验指导书 计算机专业实验中心编 2020年5月25日

目录 《数据结构》上机实验内容和要求 ................................................................... 错误!未定义书签。实验一、顺序表的实现及应用 ........................................................................... 错误!未定义书签。实验二、链表的实现及应用 ............................................................................... 错误!未定义书签。实验三、栈的实现及应用 ................................................................................... 错误!未定义书签。实验四、队列的实现及应用 ............................................................................... 错误!未定义书签。实验五、二叉树操作及应用 ............................................................................... 错误!未定义书签。实验六、图的遍历操作及应用 ........................................................................... 错误!未定义书签。实验七、查找算法的实现 ................................................................................... 错误!未定义书签。实验八、排序算法的实现 ................................................................................... 错误!未定义书签。

计算方法实验指导书.

计 算 方 法 实 验 指 导 书 彭彬 计算机技术实验中心 2012年3月 · 实验环境: VC++ 6.0 · 实验要求:在机房做实验只是对准备好的实验方案进行验证,因此上机前要检查实验准备情况,通过检查后 方可上机。没有认真准备的学生不能上机,本次实验没有分数。实验中要注意考察和体会数值计算中出现的一些问题和现象:误差的估计,算法的稳定性、收敛性、收敛速度以及迭代初值对收敛的影响等。 · 关于计算精度:如果没有特别说明,在计算的过程中,小数点后保留5位数字,最后四舍五入到小数点后四 位数字。迭代运算的结束条件统一为 51 102 -?。在VC++ 6.0中,可使用setprecision 在流的输出中控制浮点数的显示(缺省显示6位)。演示如下: # include # include # include //输出6位精度,输出左对齐 cout<

算法设计与分析实验报告 统计数字问题

算法设计与分析实验报告 实验名称统计数字问题评分 实验日期年月日指导教师 姓名专业班级学号 一.实验要求 1、掌握算法的计算复杂性概念。 2、掌握算法渐近复杂性的数学表述。 3、掌握用C++语言描述算法的方法。 4.实现具体的编程与上机实验,验证算法的时间复杂性函数。 二.实验内容 统计数字问题 1、问题描述 一本书的页码从自然数1 开始顺序编码直到自然数n。书的页码按照通常的习惯编排,每个页码都不含多余的前导数字0。例如,第6 页用数字6 表示,而不是06 或006 等。数字计数问题要求对给定书的总页码n,计算出书的全部页码中分别用到多少次数字0,1,2, (9) 2、编程任务 给定表示书的总页码的10 进制整数n (1≤n≤109) 。编程计算书的全部页码中分别用到多少次数字0,1,2, (9) 三.程序算法 将页码数除以10,得到一个整数商和余数,商就代表页码数减余数外有多少个1—9作为个位数,余数代表有1—余数本身这么多个数作为剩余的个位数,此外,商还代表1—商本身这些数出现了10次,余数还代表剩余的没有计算的商的大小的数的个数。把这些结果统计起来即可。 四.程序代码 #include int s[10]; //记录0~9出现的次数 int a[10]; //a[i]记录n位数的规律 void sum(int n,int l,int m) { if(m==1) {

int zero=1; for(int i=0;i<=l;i++) //去除前缀0 { s[0]-=zero; zero*=10; } } if(n<10) { for(int i=0;i<=n;i++) { s[i]+=1; } return; }//位数为1位时,出现次数加1 //位数大于1时的出现次数 for(int t=1;t<=l;t++)//计算规律f(n)=n*10^(n-1) { m=1;int i; for(i=1;i

《数值计算方法》实验指导书(学生版)要点

理学院 《数值计算方法》实验指导书 适合专业:信息与计算科学 数学与应用数学 统计学 贵州大学 二OO七年八月

前言 《数值计算方法》包括很多常用的近似计算的处理手段和算法,是信息与计算科学,数学与应用数学,统计学等专业的必修课程。为了加强学生对该门课程的理解,使学生更好地掌握书中的数值计算方法、编制程序的能力,学习数值计算方法课程必须重视实验环节,即独立编写出程序,独立上机调试程序,必须保证有足够的上机实验时间。 在多年教学实践基础上编写了《数值计算方法》实验指导书,目的是通过上机实验,使学生能对教学内容加深理解,同时培养学生动手的能力。本实验指导书,可与《数值计算方法》教材配套使用,但是又有独立性,它不具体依赖哪本教材,主要的计算方法在本指导书中都有,因此,凡学习数值计算方法课程的学生都可以参考本指导书进行上机实验。 上机结束后,按要求整理出实验报告。实验报告的内容参阅《数值计算方法》实验指导书。

目录 第一章函数基本逼近(一)——插值逼近 实验一Lagrange插值法 第二章函数基本逼近(二)——最佳逼近 实验二数据拟合的最小二乘法 第三章数值积分与数值微分 实验三自适应复化求积法 第四章线性代数方程组求解 实验四Gauss列主元消去法 实验五解三对角方程组的追赶法 实验六Jacobi迭代法 第五章非线性方程的数值解法 实验七Newton迭代法 第六章常微分方程数值解法 实验八常微分方程初值问题的数值方法

实验一 Lagrange 插值法 实验学时:2 实验类型:验证 实验要求:必修 一.实验目的 010 1 00 ,()()()(). n n n n j n n i j i i j j i agrange x x x x y y y y x agrange x f x x x y L L x x ==≠-=≈-∑∏ 通过L 插值法的学习掌握如何根据已知函数表构造L 插值多项式用 二.实验内容 1.算法设计。 2.编写相应的程序上机调试。 3.已知下列函数表 0.320.340.36 sin 0.3145670.3334870.352274 x x 用上述程序验证用线性插值计算sin 0.3367的近似值为0.330365,用抛物插值计算sin 0.3367的近似值为0.330374。 4.已知下列函数表 111213 ln 2.3979 2.4849 2.5649 x x 用上述程序分别用线性插值与抛物插值计算ln11.75的近似值。 三.实验组织远行要求 统一进行实验,一人一组。 四.实验条件

算法实验指导书

算法设计与分析实验指导书 信电工程学院 2015.7

算法设计与分析 一.实验目的 算法设计与分析是计算机相关专业的核心课程之一。本实验加深学生对算法设计的基本策略、主要方法及实验过程的理解;培养学生针对具体的问题,选择合适的数据结构和设计结构清晰、正确有效的算法的能力。 二.实验内容 E05210801 算法概述 E05210802 分治法 E05210803 动态规划 E05210804 贪心法 E05210805 回溯法 E05210806 分支限界法 E05210807 NP完全问题 E05210808 近似算法 三.实验方法 本课程所有实验均需上机进行,每个实验都有明确的实验目的,并根据实验要求提供实验题。每位同学通过独立思考、与同学讨论、老师辅导答疑相结合的方法完成相应的实验题,在对题目进行分析、选择有效的方法、编程及测试的过程中,将达到加深学生印象、锻炼学生运用书本知识实际解决问题的能力。 四. 实验要求 学生按照实验要求,上机前写好上机实验预习报告。 上机实验时按实验要求完成每一个实验的内容。 认真书写实验报告,内容包括:实验的目的、实验原理、实验内容、实验步骤、实验结果等。

实验一算法概述 1. 实验目的 (1) 复习数据结构课程的相关知识,实现课程间的平滑过渡; (2) 掌握并应用算法的数学分析和后验分析方法; (3) 理解这样一个观点:不同的算法能够解决相同的问题,这些算法的解题思路不同,复杂程度不同,解题效率也不同。 2. 实验内容 求两个自然数m和n的最大公约数。 3. 实验要求 (1) 至少设计出三个版本的求最大公约数算法; (2) 对所设计的算法采用大O符号进行时间复杂性分析; (3) 上机实现算法,并用计数法和计时法分别测算算法的运行时间; (4) 通过分析对比,得出自己的结论。

算法设计与分析实验指导书

实验一串匹配程序设计(2学时) 一、实验目的 (1). 熟练掌握串匹配的含义 (2). 掌握BF算法匹配的过程并编程实现 (3). 熟悉C++编译环境的基本操作 二、实验内容 给定两个字符串S和T,用BF算法,在主串S中查找字串T,输出结果,输出时要求有文字说明。请编写程序。 三、实验要求 (1)、熟悉C++编译环境的基本操作 (2)、考虑各种可能的情况(匹配成功或不成功) (3)、写出完整的程序 四、实验结果 实验二排序问题程序设计(2学时) 一、实验目的 (1). 掌握选择排序和起泡排序的基本思想 (2). 掌握两种排序方法的具体实现过程 (3). 在掌握的基础上编程实现两种排序方法 二、实验内容 输入一个待排序的序列,分别用选择排序和起泡排序两种排序方法将其变换成有序的序列,输出结果,输出时要求有文字说明。请编写程序。 三、实验要求 (1)、熟悉C++编译环境的基本操作 (2)、考虑各种可能的情况(序列本身已是有序序列,序列不是有序序列) (3)、写出完整程序 四、实验结果

实验三数字旋转方阵程序设计(2学时) 一、实验目的 (1). 掌握分治法的设计思想 (2). 掌握数字旋转方阵的具体实现过程 (3). 熟练掌握二维数组的使用方法 (4). 在掌握的基础上编程实现数字旋转方阵的实现过程 二、实验内容 给出一个初始数据,在此数据的基础上由外层向里层填写数据,完成一个数字旋转方阵,输出结果,输出时要求有文字说明。请编写程序。 三、实验要求 (1)、熟悉C++编译环境的基本操作 (2)、考虑各种可能的情况(方阵有一层,两层或更多层) (3)、写出完整程序 四、实验结果 实验四排序中分治法的程序设计(2学时) 一、实验目的 (1). 掌握归并排序和快速排序的划分方法 (2). 掌握归并排序和快速排序的具体分治策略 (3). 在掌握的基础上编程两种排序方法的实现过程 二、实验内容 给出一个初始序列,分别用归并排序和快速排序两种分治法将所给序列变换为有序序列,输出结果,输出时要求有文字说明。请编写程序。 三、实验要求 (1)、熟悉C++编译环境的基本操作 (2)、考虑各种可能的情况(序列只有一个值或更多) (3)、写出完整程序 四、实验结果

相关文档
最新文档