【问题标题】:Time complexity of this function O(n^2logn)?这个函数的时间复杂度 O(n^2logn)?
【发布时间】:2023-02-03 09:25:07
【问题描述】:

我试图计算出这个函数的时间复杂度: 伪代码

def inc(m):
  if m>12:
     return;
  for i in range(1,m):
     //some code
  mergeSort(array,0,n-1)
  for j in range(1,m):
     //some code
  inc(m+=1);

时间复杂度是O(n^2logN)吗?如您所见,此示例是一个递归函数,调用一个不同的递归函数进行排序并在最后调用它自己。我不知道 for 循环是否影响以及调用另一个递归函数作为合并排序。

【问题讨论】:

  • if m>12 对运行时间有巨大的影响...其中大部分将减少到常数时间,这实际上取决于归并排序的实现。
  • @user700390 这种情况下的合并排序是平均情况,O(nlogn)。但总的来说,你的意思是函数的复杂度可以是 O(1)?

标签: time-complexity big-o complexity-theory


【解决方案1】:

此代码的时间复杂度为 O(m*n logn),因为 m 是不超过 12 的常数,我们可以说复杂度受归并排序复杂度 O(nlogn) 的限制。在每次递归调用时,该函数执行两个循环,一个在合并排序之前,另一个在合并排序之后,它们的复杂度都是 O(m)。归并排序的时间复杂度为 O(nlog n)。

因此,总时间复杂度为 m * (2m + n * log n) 即 O(m * (m + n * log n))= O(m^2) + O(mnlogn)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2015-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多