时间复杂度

发布时间 2023-07-10 10:18:21作者: jingyu0929

主定理

 递推式子的时间复杂度求法

\[T(n) = aT(\frac{n}{b}) + f(n), n >= b \]

 其中:

  • $n $是问题规模的大小
  • \(a\) 是原问题的子问题个数
  • \(\frac{n}{b}\) 是每个子问题的大小
  • \(f(n)\) 是子问题合并成原问题所需的代价

 分三种情况:

  1. $ f(n) < n^{\log_b ^a} $ ,那么 $T(n) = \varTheta (n^{\log_b ^a}) $
  2. $ f(n) = n^{\log_b ^a} $ ,那么 \(T(n) = \varTheta (n^{\log_b ^a}\log n)\)
  3. $ f(n) > n^{\log_b ^a} $,那么 \(T(n) = \varTheta (f(n))\)

摊还分析

 求数据结构的一系列操作的平均时间。可以保证某一系列操作在最坏情况下的平均性能

聚合分析

 确定 $ n $ 个操作的最坏复杂度 \(T(n)\) ,每一个操作的平均代价就是 \(\frac{T(n)}{n}\)

核算法

 对不同操作赋予不同的费用,称其为摊还代价。当一个操作的摊还代价大于实际代价的时候,将差额存起来,称为存款,后续操作如果有摊还代价小于实际代价时,我们将之前存的信用拿出一部分来抵消这里的差值。

 摊还代价不是随便取的,要构造一个摊还代价使得上面的存款不会被取完

势能法

将数据结构和势能关联起来

啥啊这是