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))。 如果存在正常量n0c1、和c2,使得在n及其右边,f(n)的值总位于c1g(n)c2g(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))。 如果存在正常量noc,使得在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)) 如果存在正常量n0c,使得在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)的集合

等式和不等式中的渐进记号

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

o记号:

在这里插入图片描述

ω \omega ω记号

在这里插入图片描述

posted @   xuchaoxin1375  阅读(22)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
点击右上角即可分享
微信分享提示