【数据结构与算法】算法复杂度

本文介绍了计算复杂度,包括时间复杂度(如O(1),O(logn),O(n),O(n*logn),O(n^2))和空间复杂度(如O(1)和O(n)),解释了它们在程序执行中的意义,特别强调了前端领域对时间和空间的不同需求。
摘要由CSDN通过智能技术生成

一、什么是复杂度?

  • 程序执行时需要的计算量和内存空间,其中计算量是指时间复杂度,计算量大则需要时间久;内存空间是指空间复杂度和代码是否简洁无关,而是指计算机的cpu和内存计算复杂程度。 
  • 复杂度是数量级,不是具体的数字,是为了方便记忆和推广。比如,山川的高度、人的身高等,数量级是指一个相差不大的数量范围。
  • 一般针对某一个具体的算法,而非一个完整的系统

二、复杂度的表示 

  •  时间复杂度-程序执行时需要的计算量(CPU)

                用O表示复杂度

  1. O(1)一次就够,计算次数可数的数量级都称作O(1)级别的数量级 【如:object 取值/数学运算】
  2. O(logn)数量量的对数,该曲线表示logn函数的曲线,n是指横轴原始数据的输入量,随着n的变化,logn的曲线形势如图,logn的计算结果是纵轴,也就是计算量、时间复杂度、空间复杂度的结果。随着计算量的增长,曲线趋向于平缓,是个好的现象。【如:数组二分】
  3. O(n) 和传输的数量量一样,是一个分割线,输入量是多少,计算量就是多少。如输入量是5,计算量就是5,输入量是7,那么计算量就是7,较为符合常理。【如:数组的一维循环】
  4. O(n*logn)数据量*数据量的对数,计算量在增加时,曲线呈上走趋势,O(n)*O(logn) = O(nlogn)
  5. O(n^2)数据量的平方 当输入量为2时,计算量为4,输入量为3时,计算量为9,复杂度增速飞快。【如:数组的嵌套循环】

  • 空间复杂度 - 程序执行时需要的内存空间

        前端领域需要程序运行更快,重时间轻空间,因为运行在浏览器上,所以内存空间是共用的。常见的空间复杂度:

  1. O(1) 有限的、可数的空间(数量级)
  2. O(n) 和输入的数据量相同的空间(数量级):当定义一个数组时,数组的长度和空间有关系,长度是多少就需要占用多少空间

// 空间复杂度为O(1)
function fn(arr = []) {
    const a = arr[1]
    const b = arr[2]
}

// 空间复杂度为O(n)
function fn(arr = []) {
    const arr2 = []
    for (let i = 0; i < arr.length; i++){
        arr2[i] = arr[i]
    }
    return arr2
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值