算法设计与分析——第二章算法分析的数学基础

算法分析的数学基础 第2章 算法分析的数学基础 《Introduction to Algorithms》 第三章 第四章 附 录 一. 计算复杂性函数的阶 计算函数的阶: 算法执行时间随问题规模增长而增长的阶(增长率). 执行时间函数的主导项 如: T(n)=an2+bn+cT(n)=an^2 +bn+cT(n)=an2+bn+c 主导项: an2an^2an2,当输入大小n较大时,其它低阶项相对来说意... 阅读详情

2.1 计算复杂性函数的阶

## 增长的阶

算法的实际运行时间受除算法设计本身以外很多其他因素的影响,如:指令集、操作系统、编译器……

  • 如何描述算法的效率→\to→只与输入问题的规模有关
    • 增长率
    • 时间复杂度
  • 忽略低阶项
  • 保留最高阶项
  • 忽略常系数
  • 常见增长阶:Θ(1)\Theta(1)Θ(1), Θ(lg n)\Theta(lg\,n)Θ(lgn), Θ(n)\Theta(\sqrt[]{n})Θ(n ​), Θ(n)\Theta(n)Θ(n), Θ(nlg n)\Theta(nlg\,n)Θ(nlgn), Θ(n2)\Theta(n^2)Θ(n2), Θ(n3)\Theta(n^3)Θ(n3), Θ(2n)\Theta(2^n)Θ(2n), Θ(n!)\Theta(n!)Θ(n!)
    • 利用Θ(n2)\Theta(n^2)Θ(n2)表示插入排序的最坏运行时间
  • 增长记号O,Θ,Ω,o,ωO, \Theta, \Omega, o, \omegaO,Θ,Ω,o,ω
    • OOO表示渐进上界
    • Θ\ThetaΘ表示渐进紧界
    • Ω\OmegaΩ表示渐进下界

同阶函数集合 Θ\ThetaΘ

Θ(g(n))={  f(n)∣∃c1,c2>0,∀n>n0,c1g(n)≤f(n)≤c2g(n) } \Theta(g(n))=\{\,f(n)|\exists c_1,c_2 >0,\forall n>n_0,c_1g(n)\le f(n) \le c_2g(n) \,\} Θ(g(n))={ f(n)∣∃c1​,c2​>0,∀n>n0​,c1​g(n)≤f(n)≤c2​g(n)}

称为与g(n)同阶的函数集合

  • 若f(n)∈Θ(g(n))f(n)\in \Theta(g(n))f(n)∈Θ(g(n)), g(n)g(n)g(n)与f(n)f(n)f(n)同阶, 记作f(n)=Θ(g(n))f(n) = \Theta(g(n))f(n)=Θ(g(n))

Θ(g(n))\Theta(g(n))Θ(g(n))例子:

  • 通常f(n)=an2+bn+c=Θ(n2)f(n)=an^2+bn+c=\Theta(n^2)f(n)=an2+bn+c=Θ(n2),其中a,b,c是常数且a>0a>0a>0
  • 若p(n)=∑i=0dainip(n)=\sum_{i=0}^{d}a_in^ip(n)=∑i=0d​ai​ni,其中aia_iai​是常数且ad>0a_d>0ad​>0,则p(n)=Θ(nd)p(n)=\Theta(n^d)p(n)=Θ(nd)
  • Θ(n0)\Theta(n^0)Θ(n0)或者Θ(1)\Theta(1)Θ(1)为常数时间复杂性

低阶函数集合 OOO

对于给定函数g(n)g(n)g(n):
O(g(n))=f{ (n) 存在正常数c和n0满足对于所有n≥n0,0≤f(n)≤cg(n) } O(g(n))=f\{(n) \,\bold{存在}正常数c和n_0 满足对于所有n\ge n_0, 0 \le f(n) \le cg(n)\,\} O(g(n))=f{ (n)存在正常数c和n0​满足对于所有n≥n0​,0≤f(n)≤cg(n)}
记作f(n)∈O(g(n))f(n)\in O(g(n))f(n)∈O(g(n)), 或简记为f(n)=O(g(n))f(n)=O(g(n))f(n)=O(g(n))

Θ(g(n))\Theta(g(n))Θ(g(n))与O(g(n))O(g(n))O(g(n))的关系:

  • f(n)=Θ(g(n))  ⟹  f(n)=O(g(n))f(n)=\Theta(g(n))\implies f(n)=O(g(n))f(n)=Θ(g(n))⟹f(n)=O(g(n))
  • Θ\ThetaΘ强于OOO
  • Θ(g(n))⊆O(g(n))\Theta(g(n)) \subseteq O(g(n))Θ(g(n))⊆O(g(n))
    • an2+bn+c=Θ(n2)an^2+bn+c=\Theta(n^2)an2+bn+c=Θ(n2)并且an2+bn+c=O(n2)an^2+bn+c=O(n^2)an2+bn+c=O(n2)
    • an+b=O(n2)an+b=O(n^2)an+b=O(n2)
    • n=O(n2)n=O(n^2)n=O(n2)

如果 f(n)=O(nk)f(n)=O(n^k)f(n)=O(nk) ,则称f(n)f(n)f(n)是多项式界限的​

严格低阶函数 ooo

对于给定函数g(n)g(n)g(n):
o(g(n))=f{ (n) 存在任意正常数c,存在一个正数n0满足对于所有n≥n0,0≤f(n)<cg(n) } o(g(n))=f\{(n) \,存在\bold{任意}正常数c,\bold{存在一个正数}n_0 满足对于所有n\ge n_0, 0 \le f(n) < cg(n)\,\} o(g(n))=f{ (n)存在任意正常数c,存在一个正数n0​满足对于所有n≥n0​,0≤f(n)<cg(n)}
记作f(n)∈o(g(n))f(n)\in o(g(n))f(n)∈o(g(n)), 或简记为f(n)=o(g(n))f(n)=o(g(n))f(n)=o(g(n))

ooo与OOO的关系:

  • OOO可能是或不是紧的
    • 2n2=O(n2)2n^2=O(n^2)2n2=O(n2)是紧的,但2n=O(n2)2n=O(n^2)2n=O(n2)不是紧的
  • ooo标记上界且不紧
    • 2n=o(n2)2n=o(n^2)2n=o(n2),但是2n2≠o(n2)2n^2\ne o(n^2)2n2​=o(n2)
    • 区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{O:\exist\,c\,某…

高阶函数集合 Ω\OmegaΩ

对于给定函数g(n)g(n)g(n):
Ω(g(n))=f{ (n) 存在正常数c和n0满足对于所有n≥n0,0≤cg(n)≤f(n) } \Omega(g(n))=f\{(n) \,存在正常数c和n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} Ω(g(n))=f{ (n)存在正常数c和n0​满足对于所有n≥n0​,0≤cg(n)≤f(n)}
记作f(n)∈Ω(g(n))f(n)\in \Omega(g(n))f(n)∈Ω(g(n)), 或简记为f(n)=Ω(g(n))f(n)=\Omega(g(n))f(n)=Ω(g(n))

Ω\OmegaΩ用来描述运行时间的最好情况,对所有输入都正确

例如,对于插入排序:

  • 最好运行情况为Ω(n)\Omega(n)Ω(n)
  • 运行时间为Ω(n)\Omega(n)Ω(n) (Ω(n2)\Omega(n^2)Ω(n2)[x])
  • 最坏运行时间为Ω(n2)\Omega(n^2)Ω(n2)

也可以用来描述问题:

​ - 排序问题的时间复杂性为Ω(n)\bold{\Omega(n)}Ω(n) →\to→ 最好情况

O,Θ,Ω\bold{O,\Theta,\Omega}O,Θ,Ω的关系:
对于f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))且f(n)=Ω(g(n)) 对于f(n)和g(n),\bold{f(n)=\Theta(g(n))}当且仅当\\ \bold{f(n)=O(g(n))且f(n)=\Omega(g(n))} 对于f(n)和g(n),f(n)=Θ(g(n))当且仅当f(n)=O(g(n))且f(n)=Ω(g(n))

严格高阶函数集合 ω\omegaω

对于给定函数g(n)g(n)g(n):
ω(g(n))=f{ (n) 对于任意正常数c,存在正数n0满足对于所有n≥n0,0≤cg(n)≤f(n) } \omega(g(n))=f\{(n) \,对于\bold{任意}正常数c,\bold{存在正数}n_0 满足对于所有n\ge n_0, 0 \le cg(n) \le f(n)\,\} ω(g(n))=f{ (n)对于任意正常数c,存在正数n0​满足对于所有n≥n0​,0≤cg(n)≤f(n)}
记作f(n)∈ω(g(n))f(n)\in \omega(g(n))f(n)∈ω(g(n)), 或简记为f(n)=ω(g(n))f(n)=\omega(g(n))f(n)=ω(g(n))

lim⁡n→∞f(n)g(n)=∞ \lim_{n\to \infty}\frac{f(n)}{g(n)}=\infty n→∞lim​g(n)f(n)​=∞

ω\omegaω表示不紧的下界

KaTeX parse error: Can't use function '$' in math mode at position 25: …2}{2}=\omega(n)$̲,但$\frac{n^2}{2…

ω\omegaω与 Ω\OmegaΩ 的区别:KaTeX parse error: Undefined control sequence: \cases at position 1: \̲c̲a̲s̲e̲s̲{ \omega:\,\exi…

ω\omegaω与ooo的关系:
f(n)=ω(g(n))  ⟺  g(n)=o(f(n)) f(n)=\omega(g(n)) \iff g(n)=o(f(n)) f(n)=ω(g(n))⟺g(n)=o(f(n))

渐进符号的性质

  • 传递性:O,Θ,Ω,o,ωO, \Theta, \Omega, o, \omegaO,Θ,Ω,o,ω
    f(n)=Θ(g(n))并且g(n)=Θ(h(n))  ⟹  f(n)=Θ(h(n)) f(n)=\Theta(g(n))并且 g(n)=\Theta(h(n)) \implies f(n)=\Theta(h(n)) f(n)=Θ(g(n))并且g(n)=Θ(h(n))⟹f(n)=Θ(h(n))

  • 自反性:$O,\Theta,\Omega $
    f(n)=Θ(f(n)) f(n)=\Theta(f(n)) f(n)=Θ(f(n))

  • 对称性:Θ\ThetaΘ
    f(n)=Θ(g(n))  ⟺  g(n)=Θ(f(n)) f(n)=\Theta(g(n)) \iff g(n)=\Theta(f(n)) f(n)=Θ(g(n))⟺g(n)=Θ(f(n))

  • 反对称性:O,Ω,o,ωO, \Omega, o, \omegaO,Ω,o,ω
    f(n)=O(g(n))  ⟺  g(n)=Ω(f(n))f(n)=o(g(n))  ⟺  g(n)=ω(f(n)) f(n)=O(g(n)) \iff g(n)=\Omega(f(n))\\ f(n)=o(g(n)) \iff g(n)=\omega(f(n)) f(n)=O(g(n))⟺g(n)=Ω(f(n))f(n)=o(g(n))⟺g(n)=ω(f(n))

  • 等价性$\cases{\text{传递性}\自反性\对称性} $$\implies $ Θ\ThetaΘ

  • 并非所有函数都可比

2.2 和式的估计与界限

求和公式

  1. 线性和
    ∑k=1n(cak+bk)=c∑k=1nak+∑k=1nbk \sum_{k=1}^{n}(ca_k+b_k) = c\sum_{k=1}^{n}a_k+\sum_{k=1}^{n}b_k k=1

哈工大2019年春算法设计与分析期末复习 就是一篇很普通的算法设计与分析的复习时的笔记而已 本文原载于我的博客,地址:https://blog.guoziyang.top/archives/22/ 阅读详情

相关推荐

算法设计与分析基础第二章部分课后题答案

算法设计与分析基础第二章部分课后题答案(曲师大) Exercise 2.1 1. Question i ii iii a n 相加 不会 b 二进制表中的数 相乘 不会 c n 两个数字不断比较 不会 d 两个输入数中较大的数的大小,或两个输入数中较小的数的大小,或两个输入数的大小之和。 模除运算 会 e 二进制表中的位数 从剩余的主要候选名单中剔出若干 不会 f n 两位数字乘法 不会 4.a:最好的情况下是2只,最差的情况下是12只 b:都在袜子丢失中,丢失的总情况数为C_102=45,假设丢失的恰好是

Qxxchampion的博客 3972

《数据结构与算法分析》——C语言描述 第二版 学习笔记二

《数据结构与算法分析》——C语言描述 第二版 学习笔记二 第二章 算法分析 算法(algorithm):是为求解一个问题需要遵循的、被清楚地指定的简单指令集。 一、数学基础 四个关于相对增长率的数学定义: 定义:如果存在正常书c和n0,使得当N&amp;amp;gt;=n0时,T(N)&amp;amp;lt;=cf(N),则记为 T(N) = O(f(N))。 ...

weixin_37684179的博客 2140

SAP BO系统启用邮件发送功能

目录 背景 维护邮件目标 启用邮件功能 背景 为了将BO报表或BO预警信息发送给特定的收件人,需要启用SAP BO系统的邮件发送功能。 维护邮件目标 1. 登录BO系统的中央管理控制台(CMC): http://<bo server name>:<port>/BOE/CMC 2. 点击“Organize”底下的“Servers”按钮进入BO服务器界面: 3. 点击“Servers List”进入服务器列表界面,右键点击JobServer&lt.

guowenming001的博客 1963

kali破解wifi之airmon-ng 工具利用

......

qq_42378173的博客 1万+

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6356

基于Meteoinfo与TrajStat的后向轨迹聚类分析实战:从数据准备到可视化制图

本文详细介绍了基于Meteoinfo与TrajStat进行后向轨迹聚类分析的完整实战流程。从Java环境配置、Meteoinfo软件与TrajStat插件安装,到精准获取NOAA气象数据、设置参数进行批量轨迹计算,再到利用聚类分析提炼主要气流路径,并最终完成专业地图可视化与制图。文章旨在帮助环境与气象研究者快速掌握从数据准备到成果输出的全链路操作。

p4q5r6s7t的博客 805

第18届全国大学生智能汽车竞赛四轮车控制策略深度解析:从舵机PID到速度闭环

本文深度解析了第18届全国大学生智能汽车竞赛中四轮车的核心控制策略。从舵机PID方向控制的基础原理与机械校准入手,详细阐述了误差计算、PD控制等关键环节;进而深入探讨了基于编码器的速度闭环控制,包括增量式PI算法与速度决策逻辑。文章结合实战经验,提供了方向环与速度环的协同调参思路与避坑指南,旨在帮助参赛者构建稳定、高效的智能车控制系统。

potato的博客 464

适合小白的超详细yolov8环境配置+实例运行教程,从零开始教你如何使用yolov8训练自己的数据集(Windows+conda+pycharm)

yolov8源码下载地址:GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLiteyolov8使用文档: Home - Ultralytics YOLOv8 Docs教学视频参考: 包会!YOLOv8训练自己的数据集_哔哩哔哩_bilibili先用conda prompt创建一个虚拟环境,我的叫yolov8, python版本用3.10 源码地址:GitHub - ul

CV在读 25万+

【ROS】Nav2源码之nav2_collision_monitor(碰撞监测)详解

nav2_collision_monitor碰撞监视器是一个节点,为机器人提供了一个额外的安全级别。它使用来自传感器的数据,执行若干与避免碰撞相关的任务,绕过成本图和轨迹规划器,监测是否需要紧急停止或者减速。

郭老二 1457

LeRobot 官方论文:一个用于端到端机器人学习的开源库

本文介绍了一个名为LeRobot的开源库,旨在解决机器人学习领域的碎片化问题。该库提供了端到端的技术栈,包括统一的机器人中间件API、标准化的数据集格式(LeRobotDataset)、优化的推理栈以及多种最先进机器人学习算法的实现。LeRobot支持多种低成本开源机器人平台(如SO-10X、ALOHA-2等),通过共享中间件实现便捷的遥操作和数据收集。其数据集格式已广泛应用于社区,截至2025年9月已有16,000多个数据集公开共享。该库还支持流式处理大规模数据,降低了研究门槛。在模型方面,LeRobot

2506_90492529的博客 907

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

上一篇: 计算机组成原理——第三章系统总线
下一篇: 算法设计与分析——第一章算法概论
THOOOR
博客等级 码龄8年 5粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值