• 时间复杂度和空间复杂度


    算法参考:https://blog.csdn.net/m0_37907797/article/details/102661778

    算法效率的度量方法:

           事后统计:利用计算机计时器对不同算法编制的程序的运行时间进行比较,事后诸葛亮。

           事前分析估算方法:在计算机程序编写前,依据统计方法对算法进行估算。

           一个用高级语言编写的程序在计算机上运行时所消耗的时间取决于下列因素:

            (1). 算法采用的策略、方法;(2). 编译产生的代码质量;(3). 问题的输入规模;(4).  机器执行指令的速度。

           我们在分析一个算法的运行时间时,重要的是把基本操作的数量和输入模式关联起来。判断一个算法的效率时,函数中的常数和其他次要常数项常常可以忽略。

    算法时间复杂度:

            一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称f(n)是T(n)的同数量级函数。记作T(n)=O(f(n)),O(f(n)) 为算法的渐进时间复杂度,简称时间复杂度。用大写O()来体现算法时间复杂度的记法,我们称之为大O记法。

           一般情况下,随着输入规模n的增大,T(n)增长最慢的算法为最优算法。

    如何推导大O阶?

          用常数1取代运行时间中的所有加法常数。

          在修改后的运行次数函数中,只保留最高阶项。

          如果最高阶项存在且不是1,则去除与这个项相乘的常数。

          得到的最后结果就是大O阶。

    常数阶:O(1)

    线性阶:一般含有非嵌套循环涉及线性阶,线性阶就是随着问题规模n的扩大,对应计数次数呈线性增长

    int i,n=100,sum=0;
    for(i=0;i<n;i++)
    {
          sum=sum+i;
    }
    循环复杂度为O(n),代码需要执行n次

    平方阶:两个n嵌套循环O(n^2),三个O(n^3),具体问题具体分析。

    对数阶:

    int i=1,n=100;
    while(i<n)
    {
         i=i*2;
    } 
    假设有x个2相乘后大于或等于n,则会退出循环。
    由于2
    ^x=n 所以x=log2(n)所以O(logn)

  • 相关阅读:
    使用PHPExcel 读取 表格数据, 发现中文全变成 FALSE??
    使用百度编辑器--ueditor,后台接收提交编辑的内容,HTML不见了, 赋值不了,赋值之后,html暴露出来了??
    PHP中使用RabiitMQ---各项参数的使用方法
    Java包装类、拆箱和装箱详解
    Eclipse中新建Java工程的三个JRE选项区别
    博客园的代码运行
    35个jQuery小技巧(代码)
    前端最全的 API 集锦
    我的博客开张了
    达梦数据库TPCC测试
  • 原文地址:https://www.cnblogs.com/wy9264/p/10434133.html
Copyright © 2020-2023  润新知