复杂度分析上

一:什么是复杂度

       复杂度也叫渐进复杂度,包括时间复杂度和空间复杂度,用来分析算法执行效率与数据规模之间的增长关系,可以粗略地表示,越高阶复杂度的算法,执行效率越低。常见的复杂度并不多,从低阶到高阶有:O(1)、O(logn)、O(n)、O(nlogn)、O(n^2 )。

二:时间复杂度

       时间复杂度也叫渐进时间复杂度,表示代码执行时间随数据规模增长的变化趋势,大O()表示法记为O(n)。

 三:时间复杂度分析

        1. 只关注循环执行次数最多的一段代码

        2. 加法法则:总复杂度等于量级最大的那段代码的复杂度

        3. 乘法法则:嵌套代码的复杂度等于嵌套内外代码复杂度的乘积

四:几种常见的时间复杂度

        可以粗略地分为两类,多项式量级和非多项式量级。其中,多项式两级有O(1)、O(logn)、O(n) 、O(nlogn)、O(n^2)、O(n^3)…… ,   非多项式量级只有两个:O(2^n) 和 O(n!)。

         1.O(1)

                  一般情况下,只要算法中不存在循环语句、递归语句,即使有成千上万行的代码,其              时间复杂度也是Ο(1)。

          2.O(logn)、O(nlogn)

                 实际上,不管是以 2 为底、以 3 为底,还是以 10 为底,我们可以把所有对数阶的时间           复杂度都记为 O(logn),如果一段代码的时间复杂度是 O(logn),我们循环执行 n 遍,时间复             杂度就是 O(nlogn) 了。

         3.O(m+n)、O(m*n)

                 代码的复杂度由两个数据的规模来决定,m 和 n 是表示两个数据规模。我们无法事先             评估 m 和 n 谁的量级大,所以我们在表示复杂度的时候,就不能简单地利用加法法则,省             略掉其中一个。所以,时间复杂度就是 O(m+n),但是乘法法则继续有效:T1(m)*T2(n) =               O(f(m) * f(n))。

四:空间复杂度

        时间复杂度的全称是渐进时间复杂度,表示算法的执行时间与数据规模之间的增长关系。类比一下,空间复杂度全称就是渐进空间复杂度(asymptotic space complexity),表示算法的存储空间与数据规模之间的增长关系。

       我们常见的空间复杂度就是 O(1)、O(n)、O(n2 ),像 O(logn)、O(nlogn) 这样的对数阶复杂度平时都用不到。而且,空间复杂度分析比时间复杂度分析要简单很多。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值