zoukankan      html  css  js  c++  java
  • 算法复杂度

    评估算法时间复杂度的具体步骤是:

    (1)找出算法中重复执行次数最多的语句的频度来估算算法的时间复杂度;

    (2)保留算法的最高次幂,忽略所有低次幂和高次幂的系数;

    (3)将算法执行次数的数量级放入大Ο记号中

    在程序段(a)中,语句x=x+1不在任何一个循环体内,则它的时间频度为1,其执行时间是个常量;而(b)中,同一语句被重复执行n次,其时间频度为n;显然在(c)中,该语句的频度为n^2。由此,这三个程序段的时间复杂度为O(1)、O(n)、O(n^2)。分别为常量、线性阶和平方阶。

    对于较为复杂的算法,可以将它们分割成容易估算的几个部分,然后利用O的求和原则得到整个算法的时间复杂度。例如,若算法的两个部分的时间复杂度分别为T1(n)=O(f(n))和T2(n)=O(g(n)),则总的时间复杂度为:

    T(n)= T1(n)+ T2(n)=O(max(f(n), g(n)))

    然而,很多算法的运行时间不仅依赖于问题的规模,也与处理的数据集有关。例如,有的排序算法对某些原始数据(如自小至大有序),则其时间复杂度为O(n),而对另一些数据可达O(n^2)。因此,在估算算法的时间复杂度时,均以数据集中最坏的情况来估算。

    文章小结

    评估算法时间复杂度的要点是:如果一个算法的执行次数是 T(n),那么只保留最高次项,同时忽略最高项的系数后得到函数 f(n),此时算法的时间复杂度就是 O(f(n))。

  • 相关阅读:
    nikto web server 扫描工具
    crowdsec开源安全引擎
    windows strace 类似的工具
    禁用spring boot 暴露的几个产品可用的endppint 服务
    nginx proxy minio 默认页配置(三)
    nginx proxy minio 默认页配置(二)
    nginx proxy minio 默认页配置
    flamescope + chrome cpu profile 分析web 性能
    golang noCopy 的功能
    golang 死锁&&静态检查的一些工具
  • 原文地址:https://www.cnblogs.com/caijiqi190731/p/11341185.html
Copyright © 2011-2022 走看看