C语言连续子向量的最大和及时间度量实例
本文实例分析了C语言连续子向量的最大和及时间度量,分享给大家供大家参考之用。具体方法如下:
#include<stdio.h> #include<time.h> #include<stdlib.h> #defineSCALE3000 intmaxnum(inta,intb); intmain(intargc,charconst*argv[]) { FILE*fp; fp=fopen("maximum.in","r"); //intx[]={1,12,-11,10,-65,54,22,-9,21,5,48,5,-8,-2,56,54,-88,-5,2,-8,554,-56,35,-55,555,-65,-545,-23,48,-5,88,-56,16,-8}; int*x=(int*)malloc(sizeof(int)*(SCALE+1)); intxi=SCALE,a=0,num_in=0; while(xi--){ fscanf(fp,"%d",&x[a++]); } clock_tstart,end; //***Algorithm-1cube*** start=clock(); intmax=0; intlength=SCALE; inti,j,k; for(i=0;i<length;++i) { for(j=i;j<length;++j) { intsum=0; for(k=i;k<=j;++k) { sum+=x[k]; } max=maxnum(max,sum); } } //longnum=10000000L; //while(num--); end=clock(); doubletimes=(double)(end-start)/CLOCKS_PER_SEC; doubledend=(double)end; printf("\n***Algorithm-1cube***\n"); printf("end:%f\n",dend); printf("Timeconsuming:%f\n",times); printf("%d\n",max); //***Algorithm-2square*** start=clock(); max=0; for(i=0;i<length;++i) { intsum=0; for(j=i;j<length;++j) { sum+=x[j]; max=maxnum(max,sum); } } end=clock(); times=(double)(end-start)/CLOCKS_PER_SEC; dend=(double)end; printf("\n***Algorithm-2square***\n"); printf("end:%f\n",dend); printf("Timeconsuming:%f\n",times); printf("%d\n",max); //***Algorithm-3linear*** start=clock(); max=0; intmax_end_here=0; for(i=0;i<length;++i) { max_end_here=maxnum(max_end_here+x[i],0); max=maxnum(max,max_end_here); } end=clock(); times=(double)(end-start)/CLOCKS_PER_SEC; dend=(double)end; printf("\n***Algorithm-3linear***\n"); printf("end:%f\n",dend); printf("Timeconsuming:%f\n",times); printf("%d\n",max); free(x); x=NULL; return0; } intmaxnum(inta,intb) { returna>b?a:b; }
感兴趣的朋友可以测试运行一下本文实例以加深理解。希望本文所述对大家C程序设计的学习有所帮助。