只是 return 语句的大 O 符号?

Big O notation of just a return statement?

我说大 O 表示法的时间复杂度只是 O(1) 对吗?

public boolean size() {
        return (size == 0);
    }

Am I right in saying that the time complexity in big O notation would just be O(1)?

没有

这种误解在 students/pupils 中很常见,我只能不断重复:

Big-O 表示法是为了给出 某些东西的复杂性,相对于某个 measure,相对于另一个 数量:

例如说:

"The algorithm for in-place FFT has a space requirement of O(n), with n being the number of FFT bins"

说明 FFT 内存 中需要多少,观察 FFT 的不同长度.

所以,您没有指定

  1. 您实际观察的是什么?是从您的方法调用和 returning 之间的时间吗?仅仅是比较吗? "time" 是用 Java 字节码指令还是真实机器周期来衡量的?
  2. 你有什么不同?您的方法的调用次数?变量 size?
  3. 实际上想知道什么?

我想强调 3.: 计算机科学专业的学生通常认为,如果他们只知道算法的理论时间复杂度,他们就知道某些东西的行为方式。实际上,这些数字往往意味着 无意义 。我的意思是。单次获取不在 CPU 缓存中的变量可能需要在 CPU 中添加 100-10000 次。如果直接编译,调用一个方法只是为了查看是否为 0 将需要几十条指令,如果您使用的是(半)解释的东西,例如 Java,则可能需要更多指令;然而,在 Java 中,下次您调用相同的方法时,它可能已经作为预编译的机器代码存在...

然后,如果你的编译器非常聪明,它可能不仅内联函数,消除堆栈 save/restore 和 call/return 指令,而且甚至可能将结果合并到你正在调节的任何指令中在那个 return 值上,这实质上意味着这个函数在极端情况下可能不需要一个周期来执行。

所以,无论你怎么说,你不能说"time complexity in big O of something that is a language specific feature"而不说明你的不同之处,以及你的平台是什么。