我不知道是否有人问过,但请考虑以下方案。
怀疑1
我可以计算约。这个计划的复杂性? (最差/最佳/平均)
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main()
{
srand(time(NULL));
int no;
while((no=rand()))
printf("Hello world!\n");
return 0;
}
在this问题中OP已计算出使用随机数的问题的复杂性,但我不知道如何进行此计算。
在Java中随机生成。无论种子如何,都会取O(1)。
该程序是否具有恒定的时间复杂度(因为它不依赖于任何其他因素/输入)?
怀疑2
int main()
{
while(1){
//some action
}
return 0;
}
此问题的复杂性?
无限循环会使问题确定吗?
答案 0 :(得分:3)
这取决于rand
的实施。只有当它以这样的方式实现时,每个UINT_MAX
个可能的随机种子(或者至少所有可能的time
的返回值)在某个时刻都会达到零,这是最坏情况下的时间复杂度定义。否则,它是未定义的,因为这不是算法,而是最好的半算法:它不能保证终止。
实际的复杂性,我认为只能通过考虑一系列具有更大sizeof(time_t)
的机器来确定,因为time
是程序中唯一需要输入的部分。它是O(2 ^ n),其中n是机器的单词大小,因为不能存在超过该数量的随机种子。
在任何一台机器上,最坏情况下的运行时间超出了某个常数(可能非常大),假设rand
最终会为每个种子命中零,使其平凡O( 1)。