使用Big-O表示法的时间复杂度

时间:2013-10-12 11:32:25

标签: c# algorithm big-o time-complexity square-root

鉴于O(sqrt(B))是一个整数,我无法理解时间复杂度B

例如,如果我有一个功能......

int GetResult(int A, int B)
{
}

...而且这个函数的时间复杂度为O(sqrt(B)),时间复杂度究竟是什么?

对不起,如果这有点模糊......我不确定如何解释。

2 个答案:

答案 0 :(得分:4)

时间复杂度是函数运行时相对于其输入数据量的指示。

给出函数的n个数据项,

  • O(n)表示函数将简单地传递每个数据项“一次”。因此,将输入量加倍会使其持续时间加倍。
  • O(n 2 )意味着函数例如在数据上有两个嵌套循环,因此输入量加倍并等待4倍。
  • 例如,
  • O(log n)只需要对数时间,例如当你提供10倍以上的输入时,该功能只需要一步“更长”。
  • O(sqrt(n))因此意味着当你给出4次呼叫输入时,该功能只需要两倍的时间。

Big-O-Notation仅说明函数如何缩放,而不是实际需要多长时间。例如,Big-O-Notation忽略了常数因子。例如对某些数据迭代4次的函数(序列中的4x循环)具有O(4n),并且等于O(n)。

这个事实也说明了为什么O(log 10 n)等于O(log 2 n): log 10 n =(log 2 n)/(log 2 10)。由于(log 2 10)是常数因子,因此可以在Big-O-Notation中省略。因此,您可以选择您喜欢的任何日志,这并不意味着有关Big-O-complexity的任何差异。

当您有两个输入时,比如列表A和B,您可以使用两个变量来表示大小,例如n resp。米 具有复杂度O(n ^ 2 * log m)的函数表现如下:

  • 加倍列表A将导致执行速度慢得多(即4倍持续时间),但
  • 加倍列表B只会在A的处理持续时间O(n 2 )上仅产生“一次迭代”(即它只需要n ^ 2 *(任何未知的常数因子)更长的时间。)

答案 1 :(得分:0)

你的问题的答案取决于B.
如果B = O(n ^ 4),则O(sqrt(B))= O(n ^ 2)
如果B = O(n ^ 2),则O(sqrt(B))= O(n)
如果B = O(n),则O(sqrt(B))= O(n ^(1/2))