博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
复杂度
阅读量:7062 次
发布时间:2019-06-28

本文共 678 字,大约阅读时间需要 2 分钟。

一、引言

    一个算法是由控制结构(顺序、分支和循环3种)和原操作(指固有数据类型的操作)构成的,则算法时间取决于两者的综合效果。为了便于比较同一问题的不同算法,通常的做法是:从算法中选取一种对于所研究的问题来说的基本操作的原操作,以该基本操作重复执行的次数作为算法的时间量度。

    例如:

for(i=1;i<=n;i++){   for(j=1;j<=n;j++)   {c[i][j] = 0;for(k=1;k<=n;k++){c[i][j] += a[i][k]*b[k][j];}   }}

  

在两个N*N矩阵相乘的算法中,乘法运算是矩阵相乘问题的基本操作。整个算法的执行时间与该基本操作重复执行的次数n^3成正比,记做

        T(n) = O(n^3);

一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数f(n),算法的时间量度记作

        T(n) = O(f(n)); 

它表示随着问题规模n的增大,算法执行时间的增长率和f(n)的增长率相同,称作算法的渐近时间复杂度,简称时间复杂度。

    大多数情况下,问题基本操作的原操作是最深层循环内的语句中的原操作,它的执行次数和包含它的语句的频度相同。语句的频度指的是该语句重复执行的次数,例如

1、{a++;s=0;}2、for(i=1;i<=n;i++){a++;s+=x;}3、for(j=1;j<=n;j++){for(k=1;k<=n;k++)    {    a++;s+=x;    }}

  

 
这三个程序的时间复杂度分别为O(1)、O(n)和O(n^2),分别成为常量阶、线性阶、平方阶。 

转载地址:http://rbnll.baihongyu.com/

你可能感兴趣的文章
【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
查看>>
回流、重绘及其优化
查看>>
责任链模式的两种实现
查看>>
入口文件开始,分析Vue源码实现
查看>>
LintCode 31. partitionArray 数组划分
查看>>
vue和cordova项目整合打包,并实现vue调用android的相机的demo
查看>>
微信开放平台全网发布【失败】的几点排查方法
查看>>
vue-router 实现分析
查看>>
js如何打印object对象
查看>>
体验javascript之美-第五课 匿名函数自执行和闭包是一回事儿吗?
查看>>
Ruby 2.x 源代码分析:扩展 概述
查看>>
我感觉这是史上最牛的防sql注入方法类
查看>>
angular2开源库收集
查看>>
ArchSummit深圳APM专场总结:性能监控与调优实践干货分享
查看>>
Vue性能优化:如何实现延迟加载和代码拆分?
查看>>
据Progress调查:2018年,70%的客户在使用NoSQL
查看>>
微服务架构适用场景分析
查看>>
OpsRamp推出以服务为中心的AIOps和云监控功能
查看>>
MongoDB又不加密,8.09亿条个人详细记录泄露
查看>>
《引领转型》访谈录
查看>>