【发布时间】:2020-10-27 01:06:07
【问题描述】:
我一直在尝试计算这个算法的时间复杂度,但我认为我不正确。
void unknownRuntime( FILE* input )
{
int temp;
int size;
int n;
int i=0;
int *array;
if( fscanf( input, "%d", &size ) != 1 )
{
exit(-1);
}
array = (int *) malloc( size*sizeof(int) );
if( array == NULL )
{
exit(-1);
}
while( fscanf( input, "%d", &temp ) == 1 && i<size)
{
array[i] = temp;
i++;
}
for( i=0; i<size; i++ )
{
for( n=size-1; n>1; n/=1.01 )
{
array[n-1] = array[n];
}
}
free(array);
}
我开发了一个程序来测试不同的数组大小,以建立输入大小和给定神秘函数的运行时间之间的关系,这是我的结果:
从我绘制的运行时间来看,它似乎是 O(N log N),但我不确定我是否可以看到算法的位置O(1) 时间将问题规模缩小一小部分。任何帮助将不胜感激。
【问题讨论】:
-
这是 $n/=1.01$。你可以在到达 1 之前执行 $log_1.01(n)$ 次。
标签: c algorithm time-complexity