zoukankan      html  css  js  c++  java
  • 《数据结构与算法之美》笔记 03 | 复杂度分析(上):如何分析、统计算法的执行效率和资源消耗?

    其实挺久之前试听过这门算法课,但当时很浮躁,就记得当时听完好像有点混乱没怎么理解。今儿个摆正心态集中精神学习,发现其实很简单。
    把经典的三个问题套进今天的内容,复杂度分析是什么,为什么需要进行复杂度分析,怎么分析?

    1、复杂度分析是什么?

    复杂度分析分为时间复杂度分析和空间复杂度分析。时间复杂度分析就是分析代码执行效率,空间复杂度分析就是分析代码占用存储空间的情况。
    时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。

    2、为什么需要复杂度分析?

    因为实现一个需求解决一个问题,代码实现多种多样,对于有限的计算机资源,总是期望代码占用更少空间,用户总是期待软件运行速度更快,等待时间更少。
    这就需要能有方法可以对代码进行评估,以筛选出执行效率更高资源消耗更少的代码。
    代码跑一遍,通过统计、监控,就能得到算法执行的时间和占用的内存大小,为什么还要进行分析呢?
    因为测试结果依赖测试环境,测试结果收测试数据规模影响很大。我们需要一个不用具体的测试数据来测试,就可以粗略地估计算法的执行效率的方法。

    3、怎么分析?

    使用大O复杂度表示法

    公式中的 O,表示代码的执行时间 T(n) 与 f(n) 表达式成正比。
    忽略常数、系数和低阶
    时间复杂度分析

    1. 只关注循环执行次数最多的一段代码
    2. 加法法则:总复杂度等于量级最大的那段代码的复杂度
    3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

      对于刚罗列的复杂度量级,我们可以粗略地分为两类,多项式量级和非多项式量级。其中,非多项式量级只有两个:O(2n) 和 O(n!)。
  • 相关阅读:
    tile38 复制配置
    The Guardian’s Migration from MongoDB to PostgreSQL on Amazon RDS
    tile38 一款开源的geo 数据库
    sqler sql 转rest api 的docker 镜像构建(续)使用源码编译
    sqler sql 转rest api javascript 试用
    sqler sql 转rest api redis 接口使用
    sqler sql 转rest api 的docker image
    sqler sql 转rest api 的工具试用
    apache geode 试用
    benthos v1 的一些新功能
  • 原文地址:https://www.cnblogs.com/1million/p/13443620.html
Copyright © 2011-2022 走看看