我试图计算Java中的原始操作,但偶然发现了这一点。我不知道为什么检索数组只占一个计数而不是两个。
我有这段代码:
arrayExample[j] = arrayExample[j] + 1; // 2 + 1 + 1 + 1 = 5
出于某种原因,我们将读取
j
的次数计数为两次,一次分配一次,一次添加一次,一次访问数组。为什么这里没有两次访问阵列?
提前致谢。
最佳答案
通过“访问数组”,它们意味着读取那里的值。数组的分配是另一种类型的数组访问,它只是被视为分配而不是数组访问。
如果没有对什么算作“基本操作”有更正式的定义,无论如何这都是一个不确定的问题。我们可能会问为什么加载常数1不算作基本操作。 (或者您可能是个书呆子,请检查JVM是否具有“增量”字节码操作,该操作不需要将1加载为常量。它确实需要。)或者您可能会问为什么只计算的基本操作数有意义吗?各种情况下,当不同的基本运算(例如整数加法与浮点除法)具有不同的运行时间时。
对于Big O分析,重要的是此处的基本运算数是一个常数,它不依赖于该算法的任何输入量。无论将其算作4、5还是6个基本操作都没有关系,因为无论如何它都是O(1)基本操作。