• 时间复杂度的理解


    时间复杂度:

    可以理解为程序的运算步骤
    n为项目的规模, 时间复杂度表示为T(n)

    渐进函数:

      时间复杂度一般都为项目所有的运算步骤的渐进函数

      渐进函数特征:忽略常数项

      ex:

        k为常数项
        T(n) = n ^ 3 * k
        g(n) = n ^ 3
        T(n) = k * n ^ 3
        g(n)就是T(n)的渐进函数

    大O表示法:

    就是一个函数忽略常数项,只保留最核心,最特征的部分

    描述:

    •   如果算法A需要的时间与f(n)成正比,则算法A称为f(n)阶,表示为O(f(n))。
    •   函数f(n)称为算法A的增率函数(growth-rate function)。
    •   该表示法使用大写字母O来表示(order),故称大O表示法。
    •   若规模为n的问题需要的时间与n成正比,则问题表示为O(n),即n阶。
    •   若需要的时间与n^2成正比,则表示为O(n^2),以此类推。

      1)可忽略算法增率函数的低阶项。
      2)可忽略算法增率函数中高阶项的倍数常量。
      3)O(f(n))+O(g(n))=O(f(n)+g(n))可组合增率函数。

    时间复杂度:

      分析算法时, 存在几种可能的考虑:
        1. 算法完成工作最少需要多少基本操作, 即最优时间复杂度
        2. 算法完成工作最多需要多少基本操作, 即最坏时间复杂度
        3. 算法完成工作平均需要多少基本操作, 即平均时间复杂度
      对于最优时间复杂度, 其价值不大, 因为它反映的知识最乐观最理想的情况, 没有参考价值

    最坏时间复杂度:

    对于最坏时间复杂度, 提供了一种保障, 表明算法在此种程序中一定能完成工作

    平均时间复杂度:

    对于平均时间复杂度, 是对算法的一个全面评价, 因为它完整全面的反映了这个算法的性质, 但另一方面, 这种衡量并没有保障, 不是每个计算都能在这个基本操作内完成, 而且, 对于平均情况的计算, 也会因为应用算法的实例分布可能并不均匀难以计算

    因此, 我们主要关注算法的最坏情况, 即最坏时间复杂度

    时间复杂度的基本计算规则

    1. 基本操作:
    • 只含有常数项,认为其时间复杂度为O(1)
    2. 顺序操作:
    • 时间复杂度按加法进行计算
    3. 循环操作
    • 时间复杂度,按乘法进行计算
    4. 分支结构
    • 时间复杂度取最大值
    • (每个分支都有自己的运算步骤,取出里面运算步骤最多的分支,当作分支结构的步骤)

    判断一个算法的效率时,往往只需要关注操作数量的最高次项,其他次要项,常数项可以忽略不计
    通常我们所讲的时间复杂度是项目的最坏时间复杂度

    控制程序的基本流程

    顺序
    条件
    循环
    这三项可以组合所有的算法,项目

    时间复杂度的计算时间复杂度的计算

    包含顺序,循环,条件三个流程

    ex:

    for a in range(0, n):
        for b in range(0, n):
            c = n - a -b
            if a ^ 2 + b ^ 2 = c ^ 2:
                print(a,b,c)

    代码分析

    for a in range(0, n):
        (循环用乘法计算)
        这句代码的运行步骤是:O(n)
    
    for b in range(0, n):
        (循环用乘法计算)
        这句代码的运行步骤是:O(n)
    
    c = n - a -b
        (基本操作语句为1)
        运行步骤为:O(1)
    
    if a ^ 2 + b ^ 2 = c ^ 2:
    print(a,b,c)
    进入判断语句, 有两个分支
    (当碰到分支语句的时候,取分支步骤最多的)
        分支1执行print(a,b,c)
            步骤为1
        分支2是判断条件失败,直接跳过了
            步骤为0    
    

      

    根据大O计算法则,计算后的结果为:
    T(n) = O(n * n * (1+1))
      语句优化:  T(n) = O(n ^ 2 * 2)
     常数项忽略: T(n) = O(n ^ 2)

    扩展:

     
  • 相关阅读:
    hdu find the most comfortable road(贪心+并查集)
    hdu 迷瘴(贪心)
    Excel中指定的sheet名称或索引读取数据到DataTable
    SQLServer 批量插入数据的两种方法
    javascript基础教程3
    Enterprise Library 4.1学习笔记 配置应用程序块(c/s和b/s均适用)
    关于同一用户不能同时在两台电脑上登录问题的解决方案
    获取当天为一年中的第几周
    javascript基础教程4
    Excel导出方法选择(转自gwf25sz)
  • 原文地址:https://www.cnblogs.com/amou/p/9073800.html
Copyright © 2020-2023  润新知