【问题标题】:Time complexity - recursive call [closed]时间复杂度 - 递归调用
【发布时间】:2013-12-01 11:58:52
【问题描述】:

我正在尝试了解如何计算算法的时间复杂度。

我有这段代码: 这是整个方法:

public void solve(int i) {
    if(i < 2) {
        return;
    }
    solve(i-1); //recursive call
    int x = v[n-i];
    for(int j = n-i+1; j < n; j++) {
        if(x > v[j]) {
            count++;
        }
    }
    return;
}

我认为复杂度是 O(n)。我对吗?

谢谢

【问题讨论】:

  • 什么是solve(i-1);?!
  • 这可能会有所帮助:bigocheatsheet.com
  • 好吧,至少现在我们有了solve的来源。 n 是什么? v 是什么?
  • 谢谢。 n 是从文件中读取的数字,v 是具有 n 个元素的数组。

标签: java time time-complexity code-complexity


【解决方案1】:

复杂度应该是O(N^2),因为在最坏的情况下您将有N + (N-1) + (N-2) + 1 = N ( N + 1 ) / 2 迭代。

【讨论】:

  • 谢谢,我去看看文章
【解决方案2】:

这里的复杂度是O(i^2)n不管。

该函数将运行i 次(直到i&lt;2)。每次迭代将运行i 次 (n-(n-i+1)=i-1)。

N提到i时,我们可以称它为O(N^2)

注意!这里Nn不一样!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-12
    • 2018-05-29
    相关资源
    最近更新 更多