什么是算法复杂度分析

什么是算法复杂度分析:

    任何可以正常运行的程序都可以成为算法,那所谓的算法复杂度分析是什么呢?简而言之,所谓的算法复杂度分析就是用来表示算法的运行的性能。

    在现实的工作中,同样的任务,我们可以通过不同的算法来完成,对于不同的算法来说,他们的时间的性能是有差异的,那就需要对各个算法的性能进行评估,我们可以通过使用一个或一组测试用例吧算法运行一下,然后比较一下性能的差异,但是这样的比较结果很多时候是有局限性的,因为严格来讲你需要保证不同算法的计算机,他们的性能是完全一致的,甚至计算机使用的系统的状态等都必须是一致的,这本身是很难保证的,于此同时我们也必须要把这个算法实现出来看到它的性能,很多时候我们有了一个算法思想之后,希望能够通过算法的思想就能知道算法的性能,大致的评估这个算法是优是劣,能否满足我们的业务需求再来决定是否要去实现它,这就需要有一套工具能够非常抽象的从数学的层面判断一个算法他的性能,就产生了复杂度分析的一个概念。

我们以线性查找法为例来看一下如何对算法的复杂度进行分析:

    1.对于复杂度分析来说通常要看算法的最差的情况下的性能,也就是查询算法运行的上界。

    2.查看要处理的数据规模与算法有什么关系:

     n:在算法复杂度分析中通常使用n来表示数据的规模。以线性查找法为例,n = data.length;

     T:通过T表示算法的性能,也可以理解为一个时间;

      算法的效率不能简单的T = n来表示,因为每次查询并不是一个简单的比较的过程,实际上底层是包括很多的指令,这些指令的执行都会影响性能,所以这是一个复杂的过程,而且这个也要区分cpu底层的指令码等等因素,这些因素都是很难考证的,因此在验证性能的时候,为了方便衡量性能,将以上的因素都化简了。不去仔细的分析执行一轮循环会对这n个元素操作,每一次操作会涉及多少指令,我们只需要知道我们整个算法的性能与n呈什么样的关系。比如在线性查找中,是呈现正相关的的,就记做O(n)级别的,也就是说我们的算法的性能与数据规模呈现正相关。

    如果考虑到代码底层的复杂过程,线性查找方法的复杂度大致应该是:

     T = 5n + 2? T = c1*n + c2

    在算法复杂度分析中,常数是不重要的,可以直接约掉,可以通过O(n)来表示,我们可以看出复杂度描述的是随着数据规模n的增大,算法性能呈线性变化趋势。也就是说所谓的复杂度,就是表示随之数据规模的增加,程序性能的变化趋势的。

实例:

T1 = 10000n     O(n)

T2 = 2n^{2}           O(n^{2})

T1算法的应能要总体好于T2,存在某一临界点n0,当n >= n0,T1<T2;

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值