码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 如何评价一个算法的优劣——时间复杂度


    算法复杂度包括时间复杂度和空间复杂度。好算法的评判标准就是高效率和低存储,高效率即时间复杂度小,低存储即空间复杂度小。

    时间复杂度指算法运行需要的时间。

    一般将算法的基本运算执行次数作为时间复杂度的度量标准。

    举个栗子:

    int sum(int n){
    	int sum = 0; //1次
    	for(int i = 1 ; i <= n ; i <++{ // n + 1次
    		sum += i; // n次
    	}
    	return sum; //1次
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    总的执行次数为 2 x n + 3。

    用一个函数T(n) = 2n + 3表示,算法运行时主要取决于最高项。

    → 如果用时间复杂度的渐进上界O表示,那么该算法的时间复杂度为O(n)。

    其实没有必要计算每一行代码的运行次数,只需要计算语句频度最多的语句即可。

    再举个栗子:

    sum = 0; // 运行1次
    total = 0; //运行1次
    for(int i = 0 ; i <= n ; i++){ //运行n + 1次,最后1次判断条件不成立,结束。
    	sum += i; //运行n次
    	for(j = 1; j <= n ; j ++){ // 运行n*(n+1)次
    		total = total + i * j; //运行n * n次
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    循环内层的语句往往是运行次数最多的,对运行时间“贡献”最大。

    在上面那个栗子中,total = total + i * j 最大,所以只需要计算语句的运行次数即可,该算法的时间复杂度为O(n ^ 2)。

    常见的算法时间复杂度如下:

    1. 常数阶:算法运行的次数是一个常数,O(1)
    2. 对数阶:时间复杂度运行效率较高,常见的有O(logn)、O(nlogn)。
    3. 多项式阶:很多算法的时间复杂度是多项式,常见的有O(n)、O(n^2)、O(n ^ 3)
    4. 指数阶:指数阶时间复杂度运行效率极差。常见的有O(2 ^ n)、O(n!)、O(n ^ n)

    常见的时间复杂度函数曲线:

    在这里插入图片描述

    它们的关系是:

    O(1) < O(logn) < O(n) < O(nlogn) < O(n ^ 2) < O(n ^ 3) < O(2 ^ n) < O(n !) < O(n ^ n)

  • 相关阅读:
    对数似然函数 | 交叉熵 | 损失函数
    vue学习记录
    移动软件开发实验三——视频播放小程序
    【个人学习总结】CRC校验原理及实现
    初始环境配置
    View 自定义 - 坐标系、位置获取
    LeetCode-754. 到达终点数字【数学】
    Arduino之ESP8266编程学习总结体会
    用户模块的实现和首页的开发(二)
    在线BLOG网|基于springboot框架+ Mysql+Java+JSP技术的在线BLOG网设计与实现(可运行源码+数据库+设计文档)
  • 原文地址:https://blog.csdn.net/weixin_44226181/article/details/126531160
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号