Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用随机数的C程序的时间复杂度 我不知道这是否被问过,但请考虑下面的程序。_C_Time Complexity - Fatal编程技术网

使用随机数的C程序的时间复杂度 我不知道这是否被问过,但请考虑下面的程序。

使用随机数的C程序的时间复杂度 我不知道这是否被问过,但请考虑下面的程序。,c,time-complexity,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; } 这个问题的复杂性 无限循环是否使问题具有确定性?这取

疑问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;
}
这个问题的复杂性


无限循环是否使问题具有确定性?

这取决于rand的实现。只有以这样一种方式实现,即UINT_MAX可能的随机种子中的每一个或至少所有可能的时间返回值在某个点上都达到零,最坏情况下的时间复杂度才被定义。否则,它是未定义的,因为它充其量不是一个算法,而是一个半算法:它不能保证终止

因此,我认为实际的复杂性只能通过考虑一系列机器来确定,这些机器的时间越来越大,因为时间是程序中唯一接受任何输入的部分。它是O2^n,其中n是机器的字号,因为不可能存在超过这个数量的随机种子


在任何一台机器上,最坏情况下的运行时间都以某个常数为界,该常数可能非常大,因为假设rand最终会为每个种子达到零,这使得它很小,为O1。

此程序没有输入。那么这怎么会有一个时间复杂度的数字呢?另一个理解是:时间复杂性是确定性算法。当然,easy random在大多数情况下都不是那么随机的,但话说回来:如果迭代依赖于伪随机值,我不会称之为确定性。@ppeterka66我应该保留这个问题吗?还是删除它?根本没有输入。可以估计函数rand的复杂度,但不能估计程序本身的复杂度,因为它的持续时间取决于一个随机种子。实际上我不知道它是否应该关闭。有人会从中获益吗?或者,如果需要这些信息,人们还能找到它吗?坦白地说,我在这个问题上不知所措…@ppeterka66:随机算法的时间复杂度与确定性算法的时间复杂度同样重要。你对这个程序没有任何输入这一事实有什么看法?我认为在这种情况下,复杂性是没有意义的。如果你不同意,你能详细说明一下吗?编辑问题,使人们的答案不再匹配,这是一个非常糟糕的主意。@boxed_u____l:永远不要在旧问题下问新问题。它打破了SO的常见问题本质。为了回答这个问题,这个程序没有复杂性,因为它没有实现算法。@boxed_u____l:没关系。根据定义,一个永不终止的程序不是一个算法。@boxed\u\l:问一个新问题是一种方法,尤其是在你已经接受了答案之后。我的回答不再反映你的问题,这有点遗憾。
int main()
    {
        while(1){
           //some action
        }
        return 0;
    }