算法(1)

 一、复杂发

  1.常见的时间复杂度分析方法

    (1):循环次数

    (2)均摊分析

    (3)递归式----主定理

  2.复杂度:

    (1)O(1):基本运算、+、 -、 *、 /、 % 、寻址

    (2)O(logn) :二分查找

    (3)O(n^1/2):枚举约数

    (4)O(n):线性查找

    (5)O(n^2):朴素最近点对

    (6)O(n^3):Floyd最短路径、普通矩阵乘法

    (7)O(nlogn):归并排序,快速排序的期望复杂度,基于比较排序的算法下界

    (8)O(2^n):枚举全部子集

    (9)总结:优秀 O(1) < O(logn) < O(n1/2) < O(n) < O(nlogn)

        可能可以优化 O(n2) < O(n3) < O(2n) < O(n!)

  3.将1,2,3,4.........n序列进行排序,

二、均摊分析

 1. (1)多个操作,一起算时间复杂度
  (2)MULTIPOP的队列,可以一次性出队k个元素
    每个元素只出入队列一次
    动态数组尾部插入操作(vector)
    一旦元素超过容量限制,则扩大一倍,再复制

 2.eg最大子数组和

  给定数组a[1…n],求最大子数组和,即找出1<=i<=j<=n,

  使a[i]+a[i+1]+…+a[j]最大(arrayList)。vector底层的实现是数组,数组的大小是有效的,

  当数组快要放满的时候,就开辟一个原数组两倍大的空间,将原数组复制到新的数组中去

  

    (1)暴力求解,枚举

    

   

猜你喜欢

转载自www.cnblogs.com/bigdata-stone/p/10200682.html
今日推荐