【问题标题】:asymptotic-complexity - Calculate steps of primitive operationsasymptotic-complexity - 计算原始操作的步骤
【发布时间】:2013-03-14 10:43:58
【问题描述】:

我在理解如何计算以下算法的原始操作时遇到了一些困难。

我知道步骤的计算是这样的:

(1) = 1 步:赋值

(2) = 1 步:分配

(3) = 3+(n-1) 步骤:3 次比较,经历 (n-1) 次

(4) = 1 步:分配

(5) = 2+(n-2):赋值和比较经历了(n-1)+(n-2)+...+2+1=(n-1)n/2次

(6) = 3步:两个数组,一个比较[

(7) = 4 步:两个数组,一个操作 [-] 和对交换的函数调用,这是第 3 步 n(1)

(8) = 2 步:赋值和加法运算

我可以推断出最坏的情况是 (n^2+n+2n+2) = O(n^2) 因为最坏的情况是当列表以第一个值作为大数排序时最后一个值是最小值,它是从 i=0 到 n (i-1) 的总和。

当列表已经排序时也是最好的情况,这意味着列表将以恒定速度运行。

我的问题是找到如何从算法中收集原始操作,这样我就可以通过计算 c 和 n_0 用 Ordo 的定义自己证明这一点。

【问题讨论】:

    标签: algorithm bubble-sort asymptotic-complexity


    【解决方案1】:

    当有人说排序算法具有特定的时间复杂度时,他们通常指的是所需的比较次数。正如您已经完成的那样,您需要计算元素之间的比较次数并找出常量。

    【讨论】:

    • 我还是不明白,可以举个例子吗?
    • 在您提到的算法中,比较发生在步骤 (6) 中。如您所述,比较次数将为 n * (n - 1) / 2。由于 n * (n - 1) / 2 = 1/2,你可以称之为 O(n^2)。
    猜你喜欢
    • 2013-06-08
    • 2017-02-10
    • 2021-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-04-03
    • 1970-01-01
    • 2016-09-04
    • 2017-11-16
    相关资源
    最近更新 更多