【发布时间】:2013-09-10 14:08:45
【问题描述】:
我不知道是否有人问过这个问题,但请考虑以下程序。
疑问 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;
}
这个问题的复杂性?
无限循环是否使问题具有确定性?
【问题讨论】:
-
这个程序没有输入。那么这怎么会有时间复杂度数字呢?另一个把握:时间复杂度适用于确定性算法。当然,在大多数情况下,简单随机并不是那么随机,但话又说回来:如果迭代依赖于(伪)随机值,我不会称其为确定性。
-
@ppeterka66 我应该保留这个问题吗?还是删除?
-
根本没有输入。可以估计函数 rand() 的复杂性,但不能估计程序本身的复杂性,因为它的持续时间取决于随机种子。
-
其实不知道要不要关闭。有人会从阅读本文中受益吗?或者如果需要这些信息,甚至可以找到它?坦率地说,我对 this 问题不知所措......
-
@ppeterka66:随机算法的时间复杂度与确定性算法同样重要。
标签: c time-complexity