Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.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
Java 使用自动初始化数组的算法复杂性度量_Java_Php_Arrays_Time Complexity - Fatal编程技术网

Java 使用自动初始化数组的算法复杂性度量

Java 使用自动初始化数组的算法复杂性度量,java,php,arrays,time-complexity,Java,Php,Arrays,Time Complexity,在评估使用必须初始化的数组的算法的时间复杂度时,通常表示为O(k)。其中k是数组的大小。 例如,计数排序的时间复杂度为O(n+k) 但是当数组被自动初始化时会发生什么,比如在Java或PHP中。公平地说,Java(或PHP…)中的计数排序(或任何其他需要初始化数组的算法)的时间复杂度是O(n)?实际上是O(n+k) 因此,如果n的阶数高于k(计数排序中有许多重复项),则可以在时间复杂度中丢弃它,使其成为O(n)您是在谈论时间复杂度为O(n+k)的问题吗 您必须记住,时间复杂度是由一台理想化的机器

在评估使用必须初始化的数组的算法的时间复杂度时,通常表示为
O(k)
。其中k是数组的大小。
例如,计数排序的时间复杂度为
O(n+k)


但是当数组被自动初始化时会发生什么,比如在Java或PHP中。公平地说,Java(或PHP…)中的计数排序(或任何其他需要初始化数组的算法)的时间复杂度是
O(n)

实际上是
O(n+k)


因此,如果
n
的阶数高于
k
(计数排序中有许多重复项),则可以在时间复杂度中丢弃它,使其成为
O(n)
您是在谈论时间复杂度为O(n+k)的问题吗

您必须记住,时间复杂度是由一台理想化的机器决定的,它没有缓存、资源限制,并且与特定语言或机器的实际执行方式无关

时间复杂度仍然是
O(n+k)

然而,在实际机器中,初始化可能比递增更有效,因此
n
k
不能直接比较。初始化的模式似乎是顺序的,而且非常有效(即
n
)。例如,如果计数类型为
int
,CPU可以使用
long
或128位寄存器来执行初始化


计数的访问模式可能是相对随机的,对于较大的
k
值,可能要慢得多。(最多慢10倍)

自动初始化不是免费的,您必须考虑它,所以它仍然是O(n+k)。

但这是我的观点。如果这种效率足以降低复杂性呢?(我纠正了复杂性)