分析非递归算法的效率

时间:2017-01-31 04:35:58

标签: algorithm for-loop

我正在尝试分析一种算法,使用5个步骤估算其时间效率。

五个步骤是:

  1. 确定参数n表示输入大小。
  2. 识别算法的基本操作。
  3. 确定大小为n的输入的最差,平均和最佳情况。
  4. 设置C(n)反映算法循环的求和 结构
  5. 简化求和。
  6. 算法为:

    Algorithm UniqueElements (A[0 … n-1)
    – //Check whether all the elements in a given array are
    distinct
    – //Input: an array A[0 … n]
    – //Output: returns “true” if all the elements in A are
    distinct and “false” otherwise
    for i ← 0 to n - 2 do
     for j ← i + 1 to n - 1 do
    – If A[i] = A[j] return false
    return true
    

    我的解决方法是:

    1. 由于我只决定输入大小,我选择了6。
    2. 我说算法的基本操作是A [i] = A [j]。
    3. 之间的比较
    4. 最佳案例:n = 1.最坏情况= 6.平均情况= 3。
    5. 求和:
    6. enter image description here

      1. 求和将简化为n ^ 2
      2. 我这样做了吗?

1 个答案:

答案 0 :(得分:0)

我相信这应该解决如下:

  1. 决定参数n。 我认为这是要求等式中的'n'。所以这里,它是输入数组的长度。

  2. 我同意基本操作。比较A [i] == A [j]。

  3. 由于如果两个元素相同,此算法会提前中断,那么我们知道最坏情况是所有元素都不同的时候。在这种情况下,我们有两个循环 - 一个嵌套在另一个循环中 - 每个循环与输入长度(n)线性相关。
    这意味着我们的最坏情况受O(n ^ 2)的限制。

    我们的平均病例是通过将所有可能的结果相加并除以所有结果来计算的。这看起来非常类似于C(n)的总结。给出长度为n的输入运行所需的时间总和是:
    maths to calculate average time 这就是 Theta(n ^ 2)

    最后,最佳案例时间。这几乎是微不足道的< \ i>。这里最好的情况是数组中的第一个和第二个项目是相同的。这是常数时间,因此最佳情况是theta(1)

  4. 对于这部分,再次参考链接的数学。

  5. 我同意你的简化! n ^ 2是正确的。

  6. 希望这有帮助!