森侃 2022-09-11 18:33 采纳率: 60%
浏览 45
已结题

时间复杂度,今天就要交了

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int maxIntervalSum_1(int array[],int len)//穷举法,三层循环
{
int max=0;
for(int i=0;i<len;i++)
{
for(int j=i;j<len;j++)
{
int sum=0;
for(int k=i;k<=j;k++)
{
sum+=array[k];
}
if(sum>max) max=sum;
}
}
return max;
}
int maxIntervalSum_2(int array[],int len)//改进穷举法,两层循环
{
int max=0;
for(int i=0;i<len;i++)
{
int sum=0;
for(int j=i;j<len;j++)
{
sum+=array[j];
}
if(sum>max) max=sum;
}
return max;
}
int maxIntervalSum_3(int array[],int begin,int end)//分治法
{
int mmax=0;
if(begin=end) return array[begin]>0?array[begin]:0;
int mid=begin+(end-begin)/2;
int lmax=maxIntervalSum_3(array,begin,mid);//左半区间最大值
int rmax=maxIntervalSum_3(array,mid+1,end);//右半区间最大值
//中间区间最大值
int sum=0;
int left_max=0;
for(int i=mid;i>=begin;i--)
{
sum+=array[i];
if(sum>left_max) left_max=sum;
}
sum=0;
int right_max=0;
for(int i=mid+1;i<=end;i++)
{
sum+=array[i];
if(sum>right_max) right_max=sum;
}
mmax=left_max+right_max;
int max=(lmax>rmax)?(lmax>mmax?lmax:mmax):(rmax>mmax?rmax:mmax);
return max;
}
int maxIntervalSum_4(int array[],int len)//动态规则
{
int max=0;
int sum=0;
for(int i=0;i<len;i++)
{
sum+=array[i];
if(sum<0) sum=0;
if(sum>max) max=sum;
}
return max;
}

int main(int argc,char* argv[])
{
char* f_name=argv[1];//文件名
int n=atoi(argv[2]);//字符串转整数
int repeat_time=atoi(argv[3]);//重复次数
//读取数据到数组
FILE pf;
int
data=(int*)malloc(n*sizeof(int));
if((pf=fopen("C:\text_datum.txt","r"))==NULL)
{
printf("Error\n");
system("PAUSE");
exit(1);
}
//读取文件内容到数列
for(long long int i=0;i<n;i++)
{
fscanf(pf,"%d\n",&data[i]);
}
fclose(pf);

clock_t c_start,c_end;
int maxValue=0;
c_start=clock();
for(int i=0;i<repeat_time;i++)
{
    maxValue=maxIntervalSum_1(data,n);
}
c_end=clock();
double diff_t=difftime(c_end,c_start);
printf("算法1,时间复杂度0(n^3),最大值=%d,执行时间=%f 毫秒.\n",maxValue,diff_t/repeat_time);



c_start=clock();
for(int i=0;i<repeat_time;i++)
{
    maxValue=maxIntervalSum_2(data,n);
}
c_end=clock();
diff_t=difftime(c_end,c_start);
printf("算法2,时间复杂度0(n^2),最大值=%d,执行时间=%f 毫秒.\n",maxValue,diff_t/repeat_time);



 c_start=clock();
for(int i=0;i<repeat_time;i++){
    maxValue=maxIntervalSum_3(data,0,n-1);
}
c_end=clock();
diff_t=difftime(c_end,c_start);
printf("算法3,时间复杂度0(nlogn),最大值=%d,执行时间=%f 毫秒.\n",maxValue,diff_t/repeat_time);

 c_start=clock();
for(int i=0;i<repeat_time;i++){
    maxValue=maxIntervalSum_4(data,n);
}
c_end=clock();
diff_t=difftime(c_end,c_start);
printf("算法4,时间复杂度0(n),最大值=%d,执行时间=%f 毫秒.\n",maxValue,diff_t/repeat_time);
return 0;

}

img

  • 写回答

2条回答 默认 最新

  • 亖夕 Python领域新星创作者 2022-09-11 19:37
    关注

    先把你代码贴好

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月20日
  • 已采纳回答 9月12日
  • 创建了问题 9月11日

悬赏问题

  • ¥15 matlab不知道怎么改,求解答!!
  • ¥15 永磁直线电机的电流环pi调不出来
  • ¥15 用stata实现聚类的代码
  • ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
  • ¥20 docker里部署springboot项目,访问不到扬声器
  • ¥15 netty整合springboot之后自动重连失效
  • ¥15 悬赏!微信开发者工具报错,求帮改
  • ¥20 wireshark抓不到vlan
  • ¥20 关于#stm32#的问题:需要指导自动酸碱滴定仪的原理图程序代码及仿真
  • ¥20 设计一款异域新娘的视频相亲软件需要哪些技术支持