首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有一种简单的方法来计算时间复杂度?

有没有一种简单的方法来计算时间复杂度?
EN

Stack Overflow用户
提问于 2020-02-29 11:29:39
回答 1查看 66关注 0票数 0

我们的老师没有教我们如何分析算法的运行时间,然后她想让我们报告Shell排序。

我只想知道是否有一种简单的方法可以找到像shell排序这样的算法的平均/最佳/最坏情况的性能。

代码语言:javascript
复制
//for references

class ShellSort{
  void shellSort(int array[], int n){
    //n = array.length
    for (int gap = n/2; gap > 0; gap /= 2){
      for (int i = gap; i < n; i += 1) {
        int temp = array[i];
        int j;
        for (j = i; j >= gap && array[j - gap] > temp; j -= gap){
          array[j] = array[j - gap];
        }
        array[j] = temp;
      }
    }
  }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-02-29 11:42:53

欢迎来到堆栈溢出!通常,排序算法的时间复杂度是通过执行的键比较次数来衡量的。我们可以从考虑什么是需要最少的键比较才能完全排序的输入开始(最好的情况),然后再考虑需要最多的输入(最坏的情况)。通常,最好的情况是排序的列表,最坏的情况可能是按相反顺序排序的列表,尽管这可能不是某些分而治之的算法的情况。

至于平均情况,一旦你得到了最好和最坏的情况,你就知道平均值介于两者之间。如果两者都有相同的时间复杂度类(通常是'Big Oh‘类),那么您就知道平均值是相同的。否则,您可以通过概率分析从数学上推导出它。

对于数组上的每个循环,这将添加一个'n‘的时间复杂性因子,而嵌套循环将’成倍‘地增加这种复杂性。也就是说,2个嵌套循环的复杂度为n^2,3个嵌套循环的复杂度为n^3。

重复地将数组分成两半通常会给出'log(n)‘的时间复杂度因子。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60461738

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档