【问题标题】:Big-O of these two functions这两个函数的大 O
【发布时间】:2014-11-03 05:08:03
【问题描述】:

谁能帮我找出这两个函数的 Big-O:

int sum(int A[], int i, int n) {
    if (n == 1)
        return A[i];
    return sum(A, i, n/2) + sum(A, i + n/2, (n+1)/2);
}

以及“排序”功能:

void swap(int& a, int& b) {
    int temp = a;
    a = b;
    b = temp;
}

void swapMin(int A[], const int& index) {
    int indexMin = index;
    for (int i = index-1; i >= 0; --i)
        if (A[i] < A[indexMin])
          indexMin = i;

    swap(A[index], A[indexMin]);
}

void sort(int A[], int n) {
    for (int i = n-1; i >= 0; --i)
        swapMin(A, i);
}

我相信第一个是 O(1),第二个是 O(n),但我不确定这是否正确。

【问题讨论】:

  • 你必须问一个更精确的问题 - StackOverflow 不是要求人们为你做你的工作;描述您尝试过的内容以及您遇到的问题。 FIY,第一个是 O(n - i),第二个是 O(n^2)

标签: algorithm loops recursion big-o time-complexity


【解决方案1】:

对于第一个函数,你可以这样做:

然后你可以使用生成函数来解决它。

对于第二个,您可以使用 Sigma 表示法:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-22
    • 2021-03-04
    • 2018-07-16
    • 1970-01-01
    • 1970-01-01
    • 2021-11-20
    相关资源
    最近更新 更多