如何计算这段代码的时间复杂度?它会是什么?

时间:2013-06-09 08:30:41

标签: time complexity-theory

时间复杂度是多少? 这是需要找到复杂性的代码: 我无法理解递归部分主要是:/

void xyz(int n)
{
    for (int i=0;i<n;i++)
      do something;
    if (n)
      for (int i=0;i<n;i++)
        xyz(n-1);
    else return;
}

1 个答案:

答案 0 :(得分:0)

当有人对您的问题发表评论时,请注意您对n和i的使用。如果n&gt; if(n)将始终评估为真此外,目前嵌套似乎可能已关闭,尝试使用括号使其更清晰。

计算时间复杂度的一般想法是计算(数学上,不是手动)基本操作的次数(最耗时的操作,通常是最深的嵌套循环内最耗时的操作)并查看如何复杂性(基本操作完成的次数)与输入大小有关。

如果时间复杂度以与输入大小增加相同的速度增加,则为线性,或者在复杂度等级O(n)中。如果复杂性与输入大小相比呈指数级增长,则可能在类O(n ^ 2)中。

递归肯定会变得棘手,但想法是“扩展它”,特别是通过设置递归关系。这是一个非常好的教程,使用递归关系来查找递归算法的时间复杂度: http://www.cs.duke.edu/~ola/ap/recurrence.html

相关问题