【问题标题】:how to find the worst-case complexities of the following algorithm如何找到以下算法的最坏情况复杂性
【发布时间】:2022-11-17 05:43:45
【问题描述】:
for (i = 0; i<= n-2; i++)
 do {
  j: = n-1 
  while (j > i)
   do {
    if A[j] < A[j-1] then 
      temp: = A[j] 
      A[j]: = A[j-1] 
      A[j-1]:= temp 
      } 
   j: = j-1 
  }
 }

根据我的理解,我知道这是一个插入排序算法,插入排序的最坏情况是O(n^2)。我只是不知道如何解释获得答案要遵循的步骤

【问题讨论】:

  • 看看thereexample
  • 你有两个最多可以运行 n-1 次的嵌套循环,所以实际上它大约是 O(n^2)。您的代码似乎不是 C 语言,所以标签错误!
  • 您标记 [c],但提供的代码不是有效的 C,并且您似乎没有问特定于 C 的问题。如果问题确实不是关于 C,那么请删除该标记。如果它关于C,那么请将你的伪代码转换为善意C代码。
  • 它似乎也与数据结构或人工智能无关。请不要垃圾邮件标签。

标签: algorithm sorting time-complexity


【解决方案1】:

内部循环在 [i+1, n-1] 中运行 j(递减)。所以它执行 n-1-i 比较,并且最多执行此数量的交换。

外循环在[0, n-2]中运行i,使得比较总数等于

n-1 + n-2 + n-3 + ... 1

这是一个三角数。

【讨论】:

  • 回覆 ”这是一个三角数。",即 x + x-1 + x-2 + ... = x(x+1)/2,即 O(x^2)
  • @ikegami: Tn-1, not Tn.
  • 回覆 ”Tn-1,不是 Tn", ...和 ​​O( (n-1)^2 ) = O( n^2 )
猜你喜欢
  • 2021-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-02
  • 2022-06-14
相关资源
最近更新 更多