使用随机数的C程序的时间复杂度

时间:2013-09-07 21:31:24

标签: c time-complexity

我不知道是否有人问过,但请考虑以下方案。

怀疑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;
    }

此问题的复杂性?

无限循环会使问题确定吗?

1 个答案:

答案 0 :(得分:3)

这取决于rand的实施。只有当它以这样的方式实现时,每个UINT_MAX个可能的随机种子(或者至少所有可能的time的返回值)在某个时刻都会达到零,这是最坏情况下的时间复杂度定义。否则,它是未定义的,因为这不是算法,而是最好的半算法:它不能保证终止。

实际的复杂性,我认为只能通过考虑一系列具有更大sizeof(time_t)的机器来确定,因为time是程序中唯一需要输入的部分。它是O(2 ^ n),其中n是机器的单词大小,因为不能存在超过该数量的随机种子。

在任何一台机器上,最坏情况下的运行时间超出了某个常数(可能非常大),假设rand最终会为每个种子命中零,使其平凡O( 1)。