首页 > 解决方案 > 在 Java 中计算原始操作

问题描述

我正在尝试计算 Java 中的原始操作并偶然发现了这一点。我不知道为什么检索数组只占一个而不是两个。

我有这段代码:

 arrayExample[j] = arrayExample[j] + 1; // 2 + 1 + 1 + 1 = 5

出于某种原因,我们计算读取j两次,分配一次,添加一次和访问数组一次。

为什么这里没有两次访问数组?

提前致谢。

标签: javaalgorithmbig-o

解决方案


通过“访问数组”,它们意味着读取那里的值。对数组的赋值是另一种数组访问,它只是被算作赋值而不是数组访问。

如果没有更正式的定义什么算作“基本操作”,这无论如何都是一个定义不明确的问题。我们可能会问为什么加载常量 1 不算作基本操作。(或者你可能很迂腐,检查 JVM 是否有一个不需要加载 1 作为常量的“增量”字节码操作。它确实如此。)或者你可能会问为什么只计算基本操作的数量是有意义的各种,当不同的基本运算(例如整数加法与浮点除法)具有不同的运行时间时。

对于大 O 分析,重要的是这里的基本操作的数量是一个常数,它不依赖于算法的任何输入的大小。无论您将其视为 4、5 还是 6 个基本操作都无关紧要,因为无论如何它都是 O(1) 基本操作。


推荐阅读