假设我的方法有pow / log的变量和常量:
double LogX(int x){
return Math.Log(x, constantBase);
}
double PowX(int x){
return Math.Pow(constant, x);
}
在使用Math函数时,我不确定这些是正确的时间复杂度。我的概念印象是PowX将是O(n),因为它必须将常数乘以n-1次,但我知道还有其他方法来实现幂函数,并且无法找到关于我应该在那里假设的明确答案。如果它是恒定时间,那么它是O(n)吗?我同样不确定如何正确处理LogX。
如果重要的话,我正在使用C#,但我正在寻找对此的一般理解。如果我只有一个方程式f =常数^ x或f = log(x),那么我对这些时间复杂度的答案是不是比通过数学函数做的那样?
答案 0 :(得分:1)
对于位数有限的数字(例如float
/ double
/ int
),您可以考虑这些函数(以及其他类似函数sin
/ {{ 1}})作为O(1),因为当它们由浮点处理器执行时,它们有明确定义的界限,即使手动实现,用于计算函数的系列也可以用固定数量的元素来限制。
对于任意长数字,您必须使用明显更复杂的估算值,这些估算值也必须直接与您的实施相关联。
即。像cos
(其中n是整数)这样的整个幂可以在O(log n)乘法(sample)中计算,复杂度的每个乘法依次取决于每个数字中的位数(对于单个乘法O(initial_length_in_bits ^ 2),对于所有乘法I' d guess ^ 3)。因此产生的复杂性将类似于O(log n * initial_length_in_bits ^ 3)。