c语言时间复杂度优化,[求助]怎样才能把我程序的时间复杂度降低点啊

由于考虑到周期较小,所以用动态数组,便于引用!

经过测试一般数据运行耗时基本为0毫秒

代码红色部分考虑的是周期段不一定从第一位开始,故时间复杂度较高

如果认定是从第一位开始,那么红色代码可变为:

if(result[i]==1&&result[i-1]==1)

return *min=0,*max=i-1;这样显然速度会快一些!但没有理论依据,故选前者!

[CODE]

#include "stdio.h"

#include "alloc.h"

#include "time.h"

#define MAXSIZE 20

#define INCREASESIZE 5

int a,b,*result;

long n;

int Function(int *min,int *max)

{

int i,j, size=MAXSIZE;

result=(int *)malloc(sizeof(int)*size);

if(result==NULL)

exit(-1);

result[0]=result[1]=1;

for(i=2;;i++)

{

if(i>=size)

{

result=(int *)realloc(result,sizeof(int)*(size+INCREASESIZE));

if(result==NULL)

exit(-1);

size+=INCREASESIZE;

}

result[i]=( result[i-1]*a+result[i-2]*b )%7;

for(j=i-1;j>0;j--)

if(result[j]==result[i]&&result[j-1]==result[i-1])

return *min=j-1,*max=i-1; }

}

int main()

{

int min,max;

while(1)

{

scanf("%d%d%ld",&a,&b,&n);

if(a<1 || a>1000 || b<1 || b>1000 || n<1 || n>100000000)

exit(-1);

Function(&min,&max);

if( n

printf("%d\n\n",result[n-1]);

else

printf("%d\n\n" ,result[(n-1)%(max-min)+min]);

}

free(result);

return 0;

}

[/CODE]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值