亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來(lái)到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? kmp.c

?? 并行程序設(shè)計(jì)示例之一
?? C
字號(hào):
#include <malloc.h>#include <sys/stat.h>#include <sys/types.h>#include <stdio.h>#include <string.h>#include <mpi.h>#define  MAX(m,n)    (m>n?m:n)typedef struct{  	int pedlen;  	int psuffixlen;  	int pednum;}pntype;/*對(duì)模式串進(jìn)行周期分析,并計(jì)算相應(yīng)的new和newval值*/void Next(char *W,int patlen,int *nextval,pntype *pped){	int i,j,plen;   	int *next;   	if((next=(int *)malloc((patlen+1)*sizeof(int)))==NULL){     	printf("no enough memory\n");       	exit(1);   	}  	/*計(jì)算next和nextval*/        next[0]=nextval[0]=-1;  	j=1;   	while(j<=patlen){   		i=next[j-1];      	while(i!=(-1) && W[i]!=W[j-1]) i=next[i];      	next[j]=i+1;      	if(j!=patlen){          	if( W[j]!=W[i+1])              	nextval[j]=i+1;           	else    			nextval[j]=nextval[i+1];       	}        j++;  	}     pped->pedlen=patlen-next[patlen];  	pped->pednum=(int)(patlen/pped->pedlen);    	pped->psuffixlen=patlen%pped->pedlen;   	free(next);}/*改進(jìn)的KMP算法*/void kmp(char *T,char*W,int textlen,int patlen,int *nextval,pntype *pped,int prefix_flag,int matched_num,int *match,int *prefixlen){	int i,j;  	i=matched_num;                	j=matched_num;               while(i<textlen)    {    	if((prefix_flag==1)&&((patlen-j)>(textlen-i))) {          	break;		}        while(j!=(-1) && W[j]!=T[i])  j=nextval[j];        if(j==(patlen-1)) {    			match[i-(patlen-1)]=1;        	if(pped->pednum+pped->psuffixlen==1)            j = -1 ;    		else                                             	j=patlen-1-pped->pedlen;         }   		j++;      	i++;    	}   	(*prefixlen)=j;}/*重構(gòu)模式串以及next函數(shù)*/void Rebuild_info(int patlen,pntype *pped,int *nextval,char *W) { 	int i;    	if (pped->pednum == 1)    		memcpy(W+pped->pedlen,W,pped->psuffixlen); 	else {         	memcpy(W+pped->pedlen,W,pped->pedlen);       	for (i=3; i<=pped->pednum; i++){         	memcpy(W+(i-1)*pped->pedlen,W,pped->pedlen);           	memcpy(nextval+(i-1)*pped->pedlen,nextval+pped->pedlen,pped->pedlen*sizeof(int));      	}        	if(pped->psuffixlen!=0){       		memcpy(W+(i-1)*pped->pedlen,W,pped->psuffixlen);           	memcpy(nextval+(i-1)*pped->pedlen,nextval+pped->pedlen,pped->psuffixlen*sizeof(int));                   	} 	} }  /*生成文本串*/void gen_string(int strlen,int pedlen,char *string,int seed){	int suffixlen,num,i,j;   	srand(seed);   	for(i=0;i<pedlen;i++){    	num=rand()%26;        string[i]='a'+num;   	}   	for(j=1;j<(int)(strlen/pedlen);j++)    	strncpy(string+j*pedlen,string,pedlen);   	if((suffixlen=strlen%pedlen)!=0)    	strncpy(string+j*pedlen,string,suffixlen);}  /*從文件讀入模式串信息*/ void GetFile(char *filename,char *place, int *number) { 	FILE *fp;    struct stat statbuf;      if ((fp=fopen(filename,"rb"))==NULL) {		printf ("Error open file %s\n",filename);         exit(0); 	}     fstat(fileno(fp),&statbuf);      if(((*place)=(char *)malloc(sizeof(char)*statbuf.st_size)) == NULL){		printf ("Error alloc memory\n");        exit(1); 	}        	if (fread((*place),1,statbuf.st_size,fp)!=statbuf.st_size){		printf ("Error in reading num\n");         exit(0); 	}     fclose (fp);     (*number)=statbuf.st_size; } /*打印運(yùn)行參數(shù)信息*/void PrintFile_info(char *filename,char *T,int id){ 	FILE *fp; 	int i;	if ((fp=fopen(filename,"a"))==NULL){		printf ("Error open file %s\n",filename);         exit(0); 	}  	fprintf (fp,"The Text on node %d is %s .\n",id,T);    		fclose (fp); } /*打印匹配結(jié)果*/void PrintFile_res(char *filename,int *t,int len,int init,int id){ 	FILE *fp; 	int i;	if ((fp=fopen(filename,"a"))==NULL){		printf ("Error open file %s\n",filename);         exit(0); 	}  	fprintf (fp,"This is the match result on node %d \n",id);    	for (i=0; i<=len-1; i++)     	if(t[i]==1) 			fprintf (fp,"(%d)  +\n",i+init);     	else  			fprintf (fp,"(%d)  -\n",i+init);	fclose (fp); } void main(int argc,char *argv[]) { 	char *T,*W; 	int	*nextval,*match;   	int	textlen,patlen,pedlen,nextlen_send;    	pntype pped;  	int	i,myid,numprocs,prefixlen,ready;   	MPI_Status  status; 	MPI_Init(&argc,&argv);    	MPI_Comm_size(MPI_COMM_WORLD,&numprocs);    	MPI_Comm_rank(MPI_COMM_WORLD,&myid);    	nextlen_send=0;   	ready=1;   	/*讀如文本串長(zhǎng)度*/   	textlen=atoi(argv[1]);   	textlen=textlen/numprocs;  	pedlen=atoi(argv[2]);   	if((T=(char *)malloc(textlen*sizeof(char)))==NULL){     	printf("no enough memory\n");       	exit(1);   	}   	gen_string(textlen,pedlen,T,myid);	if(myid==0){		PrintFile_info("match_result",T,myid);		if(numprocs>1)			MPI_Send(&ready,1,MPI_INT,1,0,MPI_COMM_WORLD);	}   	else{  		MPI_Recv(&ready,1,MPI_INT,myid-1,myid-1,MPI_COMM_WORLD,&status);		PrintFile_info("match_result",T,myid);		if(myid!=numprocs-1)			MPI_Send(&ready,1,MPI_INT,myid+1,myid,MPI_COMM_WORLD);	}	printf("\n");   		if((match=(int *)malloc(textlen*sizeof(int)))==NULL){		printf("no enough memory\n");		exit(1);	}    	/*處理器0讀入模式串,并記錄運(yùn)行參數(shù)*/   	if(myid==0){   		printf("processor num = %d \n",numprocs);    	printf("textlen = %d\n",textlen*numprocs);         GetFile("pattern.dat",&W,&patlen);     	printf("patlen= %d\n",patlen);     	if((nextval=(int *)malloc(patlen*sizeof(int)))==NULL){        	printf("no enough memory\n");           	exit(1);        }		/*對(duì)模式串進(jìn)行分析,對(duì)應(yīng)于算法14.6步驟(1)*/      	Next(W,patlen,nextval,&pped);        if(numprocs>1){        	if (pped.pednum==1)            		nextlen_send = patlen;            else         		nextlen_send = pped.pedlen*2;        }    }	/*向各個(gè)處理器播送模式串的信息,對(duì)應(yīng)于算法14.6步驟(2)*/  	if(numprocs>1){     	MPI_Bcast(&patlen, 1, MPI_INT, 0, MPI_COMM_WORLD);    		if(myid!=0)    		if(((nextval=(int *)malloc(patlen*sizeof(int)))==NULL)				||((W=(char *)malloc(patlen*sizeof(char)))==NULL)){           		printf("no enough memory\n");            	exit(1);            } 	 	MPI_Barrier(MPI_COMM_WORLD);    	MPI_Bcast(&pped,3,MPI_INT,0,MPI_COMM_WORLD);      	MPI_Bcast(&nextlen_send,1,MPI_INT,0,MPI_COMM_WORLD);    	MPI_Bcast(nextval,nextlen_send,MPI_INT,0,MPI_COMM_WORLD);     	MPI_Bcast(W,pped.pedlen,MPI_CHAR,0,MPI_COMM_WORLD);   	}    MPI_Barrier(MPI_COMM_WORLD);   	/*調(diào)用修改過(guò)的KMP算法進(jìn)行局部串匹配,對(duì)應(yīng)于算法14.6步驟(3)*/  	if(numprocs==1) {  		kmp(T,W,textlen,patlen,nextval,&pped,1,0,match+patlen-1,&prefixlen);   	}   	else {     	if(myid!=0)    		/*各個(gè)處理器分別根據(jù)部分串?dāng)?shù)據(jù)以及周期信息重構(gòu)模式串*/        	Rebuild_info(patlen,&pped,nextval,W);     	if(myid!=numprocs-1)  			kmp(T,W,textlen,patlen,nextval,&pped,0,0,match+patlen-1,&prefixlen);		else  			kmp(T,W,textlen,patlen,nextval,&pped,1,0,match+patlen-1,&prefixlen);   		MPI_Barrier(MPI_COMM_WORLD);		/*各個(gè)處理器進(jìn)行段間匹配,對(duì)應(yīng)于算法14.6步驟(4)*/    	if(myid<numprocs-1)         	MPI_Send(&prefixlen,1,MPI_INT,myid+1,99,MPI_COMM_WORLD);     	if(myid>0)     		MPI_Recv(&prefixlen,1,MPI_INT,myid-1,99,MPI_COMM_WORLD,&status);     	MPI_Barrier(MPI_COMM_WORLD);    	if((myid>0)&&(prefixlen!=0))     			kmp(T-prefixlen,W,prefixlen+patlen-1,patlen,nextval,&pped,1,prefixlen,match+patlen-1-prefixlen,&prefixlen);    		MPI_Barrier(MPI_COMM_WORLD);   	}	/*輸出匹配結(jié)果*/	if(myid==0){		PrintFile_res("match_result",match+patlen-1,textlen-patlen+1,0,myid);		if(numprocs>1)			MPI_Send(&ready,1,MPI_INT,1,0,MPI_COMM_WORLD);	}   	else{  		MPI_Recv(&ready,1,MPI_INT,myid-1,myid-1,MPI_COMM_WORLD,&status);		PrintFile_res("match_result",match,textlen,myid*textlen-patlen+1,myid);		if(myid!=numprocs-1)			MPI_Send(&ready,1,MPI_INT,myid+1,myid,MPI_COMM_WORLD);	}	free(T);    free(W);    free(nextval);    MPI_Finalize();  } 

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区3| 91精品国产91久久综合桃花 | 91精选在线观看| 日韩午夜电影在线观看| 国产日本亚洲高清| 玉足女爽爽91| 精品制服美女丁香| 成人毛片视频在线观看| 欧美日本在线看| 国产精品女主播av| 久久超碰97中文字幕| 欧美日韩精品一区二区三区| 蜜桃视频在线一区| 日本道色综合久久| 国产欧美日韩在线观看| 成人av影院在线| 国产日产亚洲精品系列| 99视频有精品| 国产精品成人在线观看| 国产一区二区三区在线观看免费| 欧美怡红院视频| 亚洲另类中文字| 91精品婷婷国产综合久久竹菊| 国产在线精品一区在线观看麻豆| 欧美美女黄视频| 亚洲夂夂婷婷色拍ww47| 日韩欧美www| 蜜桃精品视频在线| 中文字幕一区二区三区四区不卡| 国产成人免费av在线| 久久精品夜夜夜夜久久| 久久精品国产澳门| 亚洲免费在线观看视频| 色菇凉天天综合网| 久久99国产精品成人| 最近日韩中文字幕| 91蜜桃免费观看视频| 一区二区三区在线观看国产| 色哟哟一区二区| 伊人色综合久久天天人手人婷| 欧美v亚洲v综合ⅴ国产v| 黄页视频在线91| 亚洲一区在线看| 国产精品久久久久影视| 日韩一级二级三级精品视频| 色一区在线观看| 国产成人8x视频一区二区| 国产精品美女久久久久久| 制服丝袜国产精品| 日本韩国精品在线| 成人精品小蝌蚪| 国产中文字幕一区| 男男视频亚洲欧美| 久久色.com| jvid福利写真一区二区三区| 久久99精品久久只有精品| 亚洲一区在线电影| 亚洲欧洲成人精品av97| 国产无一区二区| 久久亚洲综合色一区二区三区 | 麻豆精品久久精品色综合| 一卡二卡欧美日韩| 中文字幕乱码一区二区免费| 色婷婷亚洲婷婷| 成人福利视频网站| 国产剧情一区二区三区| 国产精品久久国产精麻豆99网站| 欧美精品一区二区高清在线观看| 高清久久久久久| 国产精品一区二区三区网站| 蜜桃传媒麻豆第一区在线观看| 日韩精品乱码免费| 精品日韩一区二区三区免费视频| 欧美美女网站色| 欧美一级艳片视频免费观看| 欧美日韩高清影院| 69堂成人精品免费视频| 7777精品久久久大香线蕉| 91精品婷婷国产综合久久竹菊| 欧美精品v国产精品v日韩精品| 精品视频一区二区不卡| 国产一区二区三区四区五区美女| 精品一区二区三区蜜桃| 精品一区二区久久久| 韩日av一区二区| 国产综合色视频| 国产98色在线|日韩| 丁香六月综合激情| 99久久综合99久久综合网站| 亚洲电影欧美电影有声小说| 久久综合九色综合欧美亚洲| 久久久99精品免费观看不卡| 国产精品三级久久久久三级| 成人欧美一区二区三区白人| 亚洲精品一卡二卡| 爽好久久久欧美精品| 久久精品国产在热久久| 国产伦精品一区二区三区在线观看| 国产精品18久久久久久久网站| 国产成人av电影免费在线观看| 99久久国产综合精品麻豆| 欧美午夜不卡在线观看免费| 日韩三级免费观看| 亚洲国产精华液网站w| 亚洲精品ww久久久久久p站| 日韩精品一级中文字幕精品视频免费观看| 天天色图综合网| 亚洲综合一区二区精品导航| 日本亚洲三级在线| 午夜精彩视频在线观看不卡| 久久99精品久久久久久久久久久久 | 欧美绝品在线观看成人午夜影视| 日韩欧美美女一区二区三区| 国产精品国产三级国产普通话三级| 亚洲影视在线观看| 黄页视频在线91| 欧美性极品少妇| 国产视频一区二区三区在线观看| 伊人性伊人情综合网| 国内一区二区视频| 欧美视频一区在线| 久久久99久久| 日本美女一区二区三区视频| 成人av网站免费观看| 91精品国产综合久久精品图片 | 亚洲成人先锋电影| 国产精品一区2区| 欧美日韩mp4| 国产精品国产三级国产aⅴ原创| 天天色综合成人网| 91网站在线观看视频| 精品国产免费久久| 亚洲高清免费一级二级三级| 亚洲成a人在线观看| 国产suv精品一区二区883| 777久久久精品| 亚洲私人黄色宅男| 国产一区二区三区视频在线播放| 在线亚洲+欧美+日本专区| 欧美高清dvd| 亚洲免费三区一区二区| 国产乱码精品一区二区三区av | 欧美影视一区在线| 国产精品久久久久久久久晋中| 精品一区二区三区在线观看国产 | 亚洲一区二区偷拍精品| 国产成人8x视频一区二区| 欧美xxxx老人做受| 日本欧美一区二区三区乱码| 91搞黄在线观看| 亚洲日本一区二区| 丁香亚洲综合激情啪啪综合| 欧美精品一区视频| 美女网站色91| 欧美一卡2卡三卡4卡5免费| 亚洲国产毛片aaaaa无费看| 一本一道久久a久久精品| 国产精品国产三级国产a| 不卡视频在线看| 国产精品成人在线观看| 成人av网址在线| 亚洲婷婷在线视频| 99精品视频在线免费观看| 国产精品每日更新在线播放网址| 国产成人久久精品77777最新版本 国产成人鲁色资源国产91色综 | 日韩无一区二区| 久久精品国产一区二区三区免费看| 7777精品伊人久久久大香线蕉| 亚洲福利视频一区二区| 欧美日韩视频在线一区二区| 亚洲成人tv网| 欧美精品在线观看播放| 日本欧美韩国一区三区| 日韩欧美黄色影院| 激情综合色播激情啊| 国产午夜精品一区二区三区四区 | 99国产精品一区| 亚洲视频免费观看| 色噜噜狠狠色综合欧洲selulu| 一区二区三区毛片| 欧美午夜精品久久久久久孕妇| 性欧美大战久久久久久久久| 在线不卡中文字幕播放| 老司机免费视频一区二区三区| 欧美电影免费提供在线观看| 国产精品一区不卡| 日韩美女视频一区二区| 欧美日韩久久久一区| 美女视频黄 久久| 精品国产精品网麻豆系列| 国产精品青草综合久久久久99| 欧美日韩在线观看一区二区 | 国产女同性恋一区二区| 蜜桃av一区二区| 在线看不卡av| 麻豆国产91在线播放| 一区二区三区精品视频| 欧美国产精品v| 日韩欧美国产电影| 精品视频一区二区三区免费|