当前位置: 首页 > news >正文

(简记)时间复杂度分析 $\Omicron,\Theta,\Omega$ 的区别

严谨定义请前往OI-wiki

渐进符号定义介绍

备考初赛。为了方便记忆,给出如下定义:

  • 对于 \(f(n)=\Theta(g(n))\),我们恰可以用 \(g(n)\) 乘上两个非 \(0\) 常数分别拟合出 \(f(n)\) 的上下界(可以取等号)。

  • 对于 \(f(n)=\Omicron(g(n))\),我们仅可以用 \(g(n)\) 乘上一非 \(0\) 常数分别拟合出 \(f(n)\) 的上界(可以取等号)。

  • 对于 \(f(n)=\Omega(g(n))\),我们仅可以用 \(g(n)\) 乘上一非 \(0\) 常数分别拟合出 \(f(n)\) 的下界(可以取等号)。

实际运用 \(\Theta,\Omicron\) 较多,毕竟只能知道下界你还跑什么程序。(?)

需要注意:

  1. \(\forall a\neq 1,\log_a n=\Omicron(\log_2 n)\),因此复杂度分析中对数底数一般不写。

  2. 实际上许多选手在时间复杂度分析时会直接写 \(O\) 而不是 \(\Omicron\)\(\text{Omicron}\) 符号,毕竟好打很多。而且多数我们遇到的题目在 LCT 的势能分析还有势能线段树等场景下,我们的复杂度分析都只能给出上界,毕竟复杂度的影响因素还有实际操作与数据,这也包括某些根号题。

注意此处给出例子线段树合并这一 trick 实际上是有下界的,即一条链且每个线段树单点操作相同情况,所以应该也能用 \(\Theta\) 符号。

主定理

用于求解一类递归问题的复杂度。

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

\[T(n)= \begin{cases} \Theta(n^{\log_b a}) & f(n)=\Omicron(n^{\log_b a-\epsilon}),\epsilon > 0\\ \Theta(f(n)) & f(n)=\Omega(n^{\log_b a+\epsilon}),\epsilon\geq 0\\ \Theta(n^{\log_b a}\log^{k+1} n) & f(n)=\Theta(n^{\log_b a}\log^k n),k\geq 0\\ \end{cases} \]

且第二种情况应有 \(af(n)\le cf(\frac{n}{b})\)\(n\) 足够大且 \(\exist c<1\) 满足该条件。

一句话记忆:计算 \(\log_b a\),如果 \(f(n)\)\(n^p\) 有关的部分可以被 \(n^{\log_b a}\) 完全覆盖,对数强相关总复杂度多一个 \(\log\)。否则考虑对于 \(n^p\) 有关部分找到的是上界还是下界,上 \(n^{\log_b a}\),下 \(f(n)\)

http://www.wxhsa.cn/company.asp?id=5960

相关文章:

  • Java的运算符
  • 2025年最强API安全解决方案:以智能风险监测重塑企业数据防护体系
  • HTML打包EXE工具中的WebView2内核更新指南
  • Javadoc生成文档方法
  • HTML一键打包EXE工具中使用Websocket
  • KUKA程序中DEF 与 DEFFCT 的区别
  • 第一天作业
  • EXE一机一码打包加密大师 - 打包加壳原理
  • 力扣62题 不同路径
  • 八皇后问题
  • 零知识证明中的专业漏洞解析
  • golang
  • 2025.9.16日软件工程学习日志
  • 2025ccpc南昌邀请赛感想+补题
  • img标签如何去除边框?
  • 25.9.16 java se大致了解后开始学习MySQL
  • C++ + OpenCV + Tesseract 实现英文数字验证码识别
  • Hadoop伪分布式hbase学习
  • Redis源码学习 -- 基本数据结构 -- Quicklist - -蓝蜗牛
  • 动态修改线程池参数
  • 力扣70题 爬楼梯
  • PHP(Laravel)+ ImageMagick + Tesseract 实现验证码识别
  • Windows下使用python + opencv读取含中文路径的图片 和 把图片数据保存到含中文路径下
  • 黑白世界
  • 在 PHP 中,$_GET
  • 在 ThinkPHP DB
  • 什么是网络+HTTP详解
  • 快速管理win系统上的用户
  • redis实现全局唯一id
  • 表格识别技术:“唤醒”沉睡在纸质文档中的海量结构化数据