Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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
Loops 从1到n的遍历元素小于O(n)_Loops_Time Complexity_Big O - Fatal编程技术网

Loops 从1到n的遍历元素小于O(n)

Loops 从1到n的遍历元素小于O(n),loops,time-complexity,big-o,Loops,Time Complexity,Big O,如何在小于O(n)的时间内从1遍历到n 例如 我们要打印: 1 2 3 4 5 6 7 8 9 less than O(n) or O(n/2) 这是不可能的,因为打印总共k个字符需要至少k个工作,并且在列出从1到n(包括1到n)的值时,至少要打印n个字符 (事实上,有Θ(logn)个字符,因为在某个固定基数中写入数字n所需的字符数是Θ(logn))。因为要打印n个元素,您必须至少触摸每个元素一次,@IlyaBursov在评论中正确地提到这是不可能的 重要免责声明: 我觉得在这个问题的答案中

如何在小于O(n)的时间内从1遍历到n

例如

我们要打印:

1 2 3 4 5 6 7 8 9 less than O(n) or O(n/2)

这是不可能的,因为打印总共k个字符需要至少k个工作,并且在列出从1到n(包括1到n)的值时,至少要打印n个字符


(事实上,有Θ(logn)个字符,因为在某个固定基数中写入数字n所需的字符数是Θ(logn))。

因为要打印n个元素,您必须至少触摸每个元素一次,@IlyaBursov在评论中正确地提到这是不可能的


重要免责声明:

我觉得在这个问题的答案中再加些什么是愚蠢的。以下几点与另一个主题相关。他们演示了思考解决问题的其他方法,而不是试图将不可能转化为可能


这就是说,您可以做的是,您可以在多个线程之间分配工作,特别是在不需要按顺序打印它们的情况下,并让任务并行处理

这将把执行时间从O(n)缩短到O(n/k),其中k是已启动的并行进程数,假设:

  • 您至少有k个免费内核;以及
  • n>k
  • 但是,您在本例中所做的全部工作仍然是:

    =每线程0(n/k)个工作*k个线程

    =O((n/k)*k)

    =O(n)


    关于多线程的警告:

    如果要在获得任务时启动线程,则会增加额外的执行时间。因此,您需要让线程在池中运行,然后为它们分配阵列中必须处理的部分


    如果你重复这个过程的次数足够多,那么第一次创建k个线程的成本将被摊销并完全抵消。

    这是不可能的,顺便说一句,O(N)和O(N/2)是你可以展开的sameCan—“在某个固定基数中写入数字N所需的字符数是Θ(logn)”?当然!当我们用位值写出数字时,每个数字代表一个指数级的大数量。从这个意义上讲,在一些固定的基数(比如,基数10)中,我们有一个关系,其中一个数n与其位数d的关系大致为n~10^d。求解d,我们得到d~log_10 n。这是不完全正确的,基数是给定的,并且不会随列表的大小而变化。你可以说它是Θ(n log max(arr)),但是假设无限变量sizeI认为问题是关于打印一个值为1到n的数组-我是否误读了OP?也可以在n/2例如为(I=1;I)这样做
    1 2 3 4 5 6 7 8 9 less than O(n) or O(n/2)