算法基础

复杂度

  • 主定理(Master Theorem): 算法的运行时间
  • 排序复杂度
    • 以下对应排序算法最好情况、最坏情况及平均情况的时间复杂度
      • 冒泡排序: O(n)、O(\(n^2\))、O(\(n^2\))
      • 插入排序: O(n)、O(\(n^2\))、O(\(n^2\))
      • 选择排序: O(n)、O(\(n^2\))、O(\(n^2\))
      • 归并排序: O(nlgn)、O(nlgn)、O(nlgn)
      • 堆排序: O(nlgn)、O(nlgn)、O(nlgn)
      • 快排序: O(nlgn)、O(\(n^2\))、O(nlgn)
    • 以下对应排序算法的空间复杂度
      • 冒泡排序: O(1)
      • 插入排序: O(1)
      • 选择排序: O(1)
      • 归并排序: O(n)
      • 堆排序: O(1)
      • 快排序: O(nlgn)
  • 程序运行的时间记作函数T(n),其中n表示问题的规模,我们一般只关注随着问题规模n趋于无穷时函数中对函数结果影响最大的项,也就是最高次项(其系数也可忽略)。简化后的式子被称为这个程序算法的时间复杂度,记作\(O(f(n))\)\(f(n)\)就是简化后的式子。更准确地说O代表了运行时间函数的一个渐进上界,即T(n)在数量级上小于等于f(n)
    • \(O(1)<O(logn)<O(n)<O(nlogn)<O(n^2)<O(n^3)<O(2^n)<O(n!)<O(n^n)\)
    • 最内层执行次数最多的语句决定了整个算法的趋势

排序

  • 海量数据topK: 使用堆排序

posted on 2021-05-13 15:19  锋上磬音  阅读(40)  评论(0编辑  收藏  举报