【问题标题】:Counting sort running time计数排序运行时间
【发布时间】:2017-08-21 13:11:31
【问题描述】:

下面这个link的代码片段

int[] countingSort(int[] a, int k) {
        int c[] = new int[k];
        for (int i = 0; i < a.length; i++)    //{1}
            c[a[i]]++;
        for (int i = 1; i < k; i++)           //{2}
            c[i] += c[i-1];
        int b[] = new int[a.length];
        for (int i = a.length-1; i >= 0; i--) //{3}
            b[--c[a[i]]] = a[i];
        return b;
}

它表明运行时间是O(n + k)时间。k是输入的范围 数组a。

谁能解释一下为什么运行时间是 O(n+k)。 ?

如果我们查看代码片段,发现 {1} for 循环运行了 n 次,{2} 运行了 K 次,第三个也运行了 n 次所以总运行时间应该是 O(2n+k ) 时间 。我的计算不正确吗?常数 2 在这里被忽略了吗?

【问题讨论】:

    标签: sorting counting


    【解决方案1】:

    你的计算也是正确的,因为O(2n+k) = O(n+k)

    对于时间复杂度,只有多项式次数很重要,系数不重要。

    所以; O(n) = O(2n) = O(3n) .... = O(xn)

    请阅读https://en.wikipedia.org/wiki/Time_complexity#Linear_time

    【讨论】:

      猜你喜欢
      • 2021-03-22
      • 2015-01-28
      • 1970-01-01
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多