algorithm_算法分析引入的记号_复杂度分析符号
文章目录
algorithm_算法分析引入的记号:复杂度分析符号
T ( n ) : T(n): T(n):算法的运行时间
f ( n ) f(n) f(n):输入规模和关于输入规模的函数
-
问题输入规模 n 问题输入规模n 问题输入规模n
-
输入规模的函数 , 形如 f ( n ) , 也可以记作其他符号 g ( n ) 等 输入规模的函数,形如f(n),也可以记作其他符号g(n)等 输入规模的函数,形如f(n),也可以记作其他符号g(n)等
-
输入规模的最佳概念依赖于研究的问题。
- 对许多问题,如排序或计算离散傅里叶变换,最自然的量度是输入中的项数,
- 例如,待排序数组的规模n,
- 对其他许多问题,如*两个整数相乘*,输入规模的最佳量度是用通常的二进制记号表示输入所需的总位数。
- 对许多问题,如排序或计算离散傅里叶变换,最自然的量度是输入中的项数,
-
有时,用两个数而不是一个数来描述输入规模可能更合适。
- 例如,若某个算法的输入是一个图,则输入规模可以用该图中的顶点数和边数来描述。
( Θ , O , Ω \Theta,O,\Omega Θ,O,Ω):常用的三种记号:
-
(a) Θ \Theta Θ记号限制一个函数在常量因子内的上下确界。
- 如果存在正常量 n 0 、 c 1 、和 c 2 ,使得在 n 及其右边 , 有 f ( n ) 的值总位于 c 1 ⋅ g ( n ) 与 c 2 ⋅ g ( n ) 之间或等于它们 , 那么记 f ( n ) = Θ ( g ( n ) ) 。 如果存在正常量n_0、c_1、和c_2,使得在n及其右边, \\有f(n)的值总位于c_1\cdot g(n)与c_2\cdot g(n)之间或等于它们, \\那么记f(n)=\Theta(g(n))。 如果存在正常量n0、c1、和c2,使得在n及其右边,有f(n)的值总位于c1⋅g(n)与c2⋅g(n)之间或等于它们,那么记f(n)=Θ(g(n))。
-
(b) O O O记号为函数给出一个在常量因子内的上界。
- 如果存在正常量 n o 和 c ,使得在 n 及其右边, f ( n ) 的值总小于或等于 c g ( n ) ,那么记 f n ) = O g ( n ) ) 。 如果存在正常量n_o和 c,使得在n及其右边, \\f(n)的值总小于或等于cg(n),那么记fn)=Og(n))。 如果存在正常量no和c,使得在n及其右边,f(n)的值总小于或等于cg(n),那么记fn)=Og(n))。
-
© Ω \Omega Ω记号为函数给出一个在常量因子内的下界。
- 如果存在正常量 n 0 和 c ,使得在 n 0 及其右边, f ( n ) 的值总大于或等于 c g ( n ) , 那么记 f ( n ) = Ω ( g ( n ) ) 如果存在正常量n_0和c,使得在n_0及其右边,f(n)的值总大于或等于cg(n), \\那么记f(n)=\Omega(g(n)) 如果存在正常量n0和c,使得在n0及其右边,f(n)的值总大于或等于cg(n),那么记f(n)=Ω(g(n))
关系小结
- 我们记 f ( n ) = O ( g ( n ) ) 以指出 f ( n ) 是集合 O ( g ( n ) ) 函数集合的成员 若 f ( n ) = Θ ( g ( n ) ) , 则总是有 f ( n ) = O ( g ( n ) ) , 因为 Θ ( 渐进确界 ) 是一个比 O 记号更加确界和约束明明显的概念 ★ 按照集合论中的写法 , 其表达的就是 Θ ( g ( n ) ) ⊆ O ( g ( n ) ) 我们记f(n)=O(g(n))以指出f(n)是集合O(g(n))函数集合的成员 \\若f(n)=\Theta(g(n)),则总是有f(n)=O(g(n)), \\因为\Theta(渐进确界)是一个比O记号更加确界和约束明明显的概念 \\\bigstar 按照集合论中的写法,其表达的就是\Theta(g(n))\subseteq O(g(n)) 我们记f(n)=O(g(n))以指出f(n)是集合O(g(n))函数集合的成员若f(n)=Θ(g(n)),则总是有f(n)=O(g(n)),因为Θ(渐进确界)是一个比O记号更加确界和约束明明显的概念★按照集合论中的写法,其表达的就是Θ(g(n))⊆O(g(n))
Θ(渐进紧确界)
★ \bigstar ★为什么用等号?
-
这里 g ( n ) 往往是一个简单的式子 ( 比如 n , n 2 等 ) 这里g(n)往往是一个简单的式子(比如n,n^2 等) 这里g(n)往往是一个简单的式子(比如n,n2等)
- 函数 g ( n ) 主要用来描述边界曲线 , 这往往用简化的函数来描述就足够了 函数g(n)主要用来描述边界曲线,这往往用简化的函数来描述就足够了 函数g(n)主要用来描述边界曲线,这往往用简化的函数来描述就足够了
-
而 f ( n ) 往往会较 g ( n ) 来的长一些 , 比如 a n 2 + b n + c ; 而f(n)往往会较g(n)来的长一些,比如an^2+bn+c; 而f(n)往往会较g(n)来的长一些,比如an2+bn+c;
theorem:( Θ , O , Ω \Theta,O,\Omega Θ,O,Ω)
-
-
话句话说
-
对于满足 f ( n ) = O ( g ( n ) ) 并且 f ( n ) = Ω ( g ( n ) ) 两个条件的 任意两个函数 f ( n ) , g ( n ) , 那么总是可以推出确界关系 f ( n ) = Θ ( g ( n ) ) 对于满足f(n)=O(g(n))并且f(n)=\Omega(g(n))两个条件的 \\任意两个函数f(n),g(n), \\那么总是可以推出确界关系f(n)=\Theta(g(n)) 对于满足f(n)=O(g(n))并且f(n)=Ω(g(n))两个条件的任意两个函数f(n),g(n),那么总是可以推出确界关系f(n)=Θ(g(n))
-
类似于
夹逼原理
-
O记号:
-
该记号可以用于粗略反映描述最坏的情况
-
对于给定的函数 g ( n ) 对于给定的函数g(n) 对于给定的函数g(n)
- 由定义可见,对于例子 g ( n ) = n 2 g(n)=n^{2} g(n)=n2,我们可以说 f ( n ) = n f(n)=n f(n)=n属于集合 O ( g ( n ) ) = O ( n 2 ) O(g(n))=O(n^{2}) O(g(n))=O(n2)
- O ( g ( n ) ) 是一个函数集合 O(g(n))是一个函数集合 O(g(n))是一个函数集合
- [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Z9VBypMd-1662905127061)(image/image-20220911212542386.png)]
Ω记号:
- 后半句话中,应把 Ω ( n 2 ) 视为函数 f ( n ) 的集合 Ω(n^{2})视为函数f(n)的集合 Ω(n2)视为函数f(n)的集合
等式和不等式中的渐进记号
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」