算法设计实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

算法设计与分析实验报告

1、大整数乘法实验

2、Boyer-Moore算法实验

学生学院

专业班级

学号

学生姓名

指导教师

2012 年11 月12 日

一、实验名称:大整数的乘法

二、实验目的及要求

学习分治的思想, 掌握实现大整数相乘的算法,以提高算法的效率。

三、实验环境

Vc++。

四、实验内容

从键盘上输入两个大整数,实现两个大整数相乘,并输出结果。

例如:在键盘上输入两个数a(此数为我的学号后四位6161),b(自定义)。

a=6161;

b=369852147;

五、算法描述及实验步骤

(1)定义三个数组a[100],b[100],c[199];

(2)用数组a来存放大整数a,数组b来存放大整数b,数组c 来存放数组a和数组b的每一位乘积;

六、源程序清单

#include

#define A 100

#define B 100

int getnumber(char a[],int b[]){

int i=0;

while(a[i]!='\0'){

b[i]=a[i]-48;

i++;

}

return i;

}

void make(int a[],int aa,int b[],int bb,int c[]){ int i,j;

for(i=0;i

if(a[i]==0) continue;

for(j=0;j

c[i+j]+=a[i]*b[j];

}

for(i=aa+bb-2;i>0;i--){

c[i-1]+=c[i]/10;

c[i]=c[i]%10;

}

printf("\nc=");

for(i=0;i

printf("%d",c[i]);

}

main(){

int aa,bb,i,a[A]={0},b[B]={0},c[A+B]={0}; char a1[A],b1[B];

printf("请输入一个数a:");

gets(a1);

aa=getnumber(a1,a);

printf("a=");

for(i=0;i

printf("%d",a[i]);

printf("\n请输入另一个数b:");

gets(b1);

bb=getnumber(b1,b);

printf("b=");

for(i=0;i

printf("%d",b[i]);

make(a,aa,b,bb,c);

printf("\n");

}

七、运行结果

七、总结

本程序的的时间复杂度太大O(aa*bb),但是解决了大整数相乘硬件无法完成的问题。

实验二

一、实验名称:Boyer moore 算法实现模式匹配

二、实验目的及要求

学习Boyer moore 算法思想;

掌握使用Boyer moore算法实现模式匹配

三、实验环境

Vc++。

四、实验内容

使用Boyer-Mooer算法在DNA序列中查找基因的问题。一个DNA序列是由来自字母表{A,C,G,T}的文本来表示的,而基因或者基因片段就是模式。

a.为第10对染色体中的下列基因片段构造一个移动表:TCCTATTCTT

b.用Boyer-Mooer算法,在下面的DNA序列中为上面这个模式定位:TTATAGATCTCGTATTCTTTTATAGATCTCCTATTCTT

五、算法描述及实验步骤

六、源代码清单

#include

#include

#include

int table[100];

int suff[100];

int max(int n, int m)

{

if(n >= m) return n;

else return m;

}

int * movetable(char p[])

{

int m,i;

char c;

m = strlen(p); //匹配模式长度m

for(c='a'; c<='z'; c++)

table[c-97]=m;

for(i=0; i<=m-2; i++)

table[p[i]-97]=m-1-i;

table[' '-6]=m;

return table;

}

int * suffixtable(char p[])

{

int n, k, i,j,m;

n = strlen(p);

k=1;

i=n-2;

m=n-1;

while(i>=0){

if(p[i]==p[n-1]) {suff[k]=n-1-i;break;}

i--;

}

for(k=2; k

for(i=k; i>0; i--){

j=i;

m=n-1;

while(j>0 && p[j-1]==p[n-1+m-5]){

j--;

相关文档
最新文档