我是否正确地说大O符号的时间复杂度只是O(1)?
public boolean size() {
return (size == 0);
}
答案 0 :(得分:7)
我是否正确地说大O符号的时间复杂度只是O(1)?
没有
这是学生/学生之间的一种误解,我只能不断重复这一点:
Big-O表示法是指某种衡量相对于另一个数字的复杂性 :
例如,说:
"就地FFT算法的空间要求为O(n),其中n为FFT二进制数的数量"
说明 FFT 在内存中需要多少,观察不同长度的FFT 。
所以,你没有指定
size
?我想强调3:计算机科学专业的学生经常认为,如果他们只知道算法的理论时间复杂度,他们就会知道某些事情的表现。实际上,这些数字往往意味着 nothing 。我的意思是。单次提取不在CPU高速缓存中的变量可能需要在CPU中添加100-10000的时间。如果直接编译,调用一个方法只是为了看某事是否为0将需要几十个指令,如果你正在使用像(半)解释为Java的东西,可能需要更多的指令;但是,在Java中,下次调用相同的方法时,它可能已经作为预编译的机器代码存在...
然后,如果您的编译器非常智能,它可能不仅内联函数,消除堆栈保存/恢复和调用/返回指令,甚至可能将结果合并到您在该返回值上调整的任何指令中,本质上意味着在极端情况下,此函数可能不会执行单个循环。
所以,无论你如何表达这一点,你都不能说"大O的时间复杂性,这是一种语言特定的功能"不说你的变化,以及你的平台究竟是什么。