Java 以下循环的(最坏情况)时间分析是什么?
下面是整数变量n的一些代码:Java 以下循环的(最坏情况)时间分析是什么?,java,time,big-o,analysis,Java,Time,Big O,Analysis,下面是整数变量n的一些代码: while (n > 0) { n = n/10; // Use integer division } 我试图找到这个循环的最坏情况时间分析。O(n)对我来说是新的,我对此有困难。这不就是O(n)吗?实际上算法就是O(log(n))。您正在除以10(通过循环每次减去0) 一般来说,如果一个算法的大小与n的大小成线性关系,那么它就是O(n),但是对于这个问题,如果你将n的大小增加10倍,那
while (n > 0)
{
n = n/10; // Use integer division
}
我试图找到这个循环的最坏情况时间分析。O(n)对我来说是新的,我对此有困难。这不就是O(n)吗?实际上算法就是O(log(n))。您正在除以10(通过循环每次减去0) 一般来说,如果一个算法的大小与n的大小成线性关系,那么它就是O(n),但是对于这个问题,如果你将n的大小增加10倍,那么你只需要再进行一次迭代,而不是通过循环进行10倍的迭代
根据要求,这里有两个网站,有一个简短的入门。快速的谷歌搜索将发现更多:
是以2为底还是以10为底?在数学中,普通对数通常指后者,但在cs中,普通对数指前者。通常在大O符号中,你不关心基数。你知道有什么地方我可以进一步阅读“大O/n”来加深我的知识。我理解它背后的想法,但实际上,确定时间案例分析是什么让我感到不舒服。我觉得我可能想得太多了。我对java是新手,但我已经完成了java 1、java 2以及上周完成的算法。因为
log_2(x)=log_10(x)*3.3219
在大o表示法中,无论是log2还是log10都无关紧要。感谢大家的帮助。如果循环按预期工作,那么平均来说,在最坏的情况下,它将处于o(log_10 n)
,这并不是那么糟糕O(n)
。话虽如此,但不确定是否存在某些病理边缘的情况,其中出现了一些问题……在什么情况下,这个比例可以定为O(n)?