算法的渐进符号解析

Progressive symbol (Ο、Ω、Θ)

为什么要设计渐进符号?

在一个程序运行当中,会消耗一定的计算机资源,比如说内存,磁盘这 些,我们统一称这些为空间,另外程序运行需要执行一定的逻辑比如判断,循环,都需要花费一定的时间。我们可以凭借这两个维度来衡量算法的效率,也就是空间和时间。如何来量化复杂度到底有多复杂,抽象除了渐进符号的概念

  • 渐进符号:Ο
    设f(n)和g(n)是定义域n为自然数集合的函数,f(n)的阶不高于g(n)的阶。**(存在性问题)**存在两个常量c和n0,使得对于所有的n>n0,都有0<=f(n)<=c×g(n),那么g(n)也被叫做f(n)的渐进上界。 个人的理解为:当计算规模足够大的时候,f(n)函数逼近于函数g(n),并且f(n)函数图像在g(n)函数图像的下面,c的存在消除了g(n)的最高项的系数

  • 渐进符号:Ω
    设f(n)和g(n)是定义域为n自然数集合的函数,f(n)的阶不低于g(n)的阶,存在两个常量c和n0,使得对于所有的n>n0,都有0<=c×g(n)<=f(n),也称g(n)为f(n)的渐进上界。个人的理解为:当计算规模足够大的时候,f(n)函数逼近于函数g(n),并且f(n)函数的图像始终在g(n)函数图像的上面,c的存在同样消除了g(n)的最高项的系数

  • 渐进符号:θ
    设f(n)和g(n)是定义域为n自然数集合的函数,对所有n来说都有,f(n)==g(n),称g(n)为f(n)的紧确界


总的来说设计了五种渐进符号,分别是紧确界θ,上界O,非紧上界o,下界Ω,非紧下界ω,这五种,非紧上界和上界的不同点在于,简单的理解就是对于非紧上界来说,g(n)的函数图像必须在f(n)的上方,但对于上界来说,g(n)的函数图像可以与f(n)重合。

在面对需要确定复杂度的f(n)的时候,首先应该要做的是确定计算规模,也就是n0,因为实际生产中,不同问题规模的问题,其 在权衡时间和空间的时候可能会做出不同的选择,我们需要根据在特定的问题规模下,找到最合适的算法和数据结构。根据定义来看,对于每一个f(n),其实都可以找到不唯一的g(n)满足Ω或者O的条件,比如下面例子

当n>10,f(n)=3×n+2的时候,不难得出,g(n)=4×n、或者g(n)=n^ 2的时候都是f(n)的上界,也就是f(n)=O(4×n)也可以f(n)=O( n^ 2),当通常我们都取f(n)=O(4×n),如果取O(n^2)的话,对问题复杂度的分析就不准确,两者相距过大,导致没有太大的意义存在

猜你喜欢

转载自blog.csdn.net/qq_52696089/article/details/125297468