我刚刚开始学习Big O表示法,并对如何计算算法的增长率有疑问。假设我的算法具有O(√nlogn)时间复杂度,并且对于n = 10,我的算法需要2秒。如果我想知道n = 100需要多长时间,我是否设置了2 / x =(√10log10)/(√100log100)的比率然后求解x?或者我可以说我的输入大10倍,所以需要2 *(√10log10)秒?
答案 0 :(得分:2)
第一种方法是对的。 Big O并不关心常数倍,所以你可以通过用代数求解它来确定常数。
c*(√10*log(10)) = 2
c = 2/(√10*log(10))
√100*log(100) * 2/(√10*log(10)) = x
但是,请记住,大O也不关心“较小”项,因此这些常量开销和其他较小比例因子只会使计算渐近准确。例如,算法由以下等式控制:
(√nlogn + 1 / n)= t
仍然是O(√nlogn),这会使你的计算对n的小值不太准确。