时间和空间复杂度

下面给出分析一个算法时间复杂度大O阶的方法:

推导大O阶:

1.计算出此算法总共的操作执行次数T(n)。
2.用常数1取代运行时间中的所有加法常数。
3.在修改后的运行次数函数中,只保留最高阶项。
4.如果最高阶项存在且不是1,则去除与这个项相乘的常数。
得到的结果就是大O阶。

常见的时间复杂度

执行次数函数 阶 非正式术语
12 O(1) 常数阶
2n+3 O(n) 线性阶
3n^2+2n+1 O(n^2) 平方阶
5logn+20 O(logn) 对数阶
2n+3nlogn+19 O(nlogn) nlogn阶
6n3+2n2+4 O(n^3) 立方阶
2^n O(2^n) 指数阶

常用的时间复杂度耗费时间从小到大的顺序是:

O(1) <O(logn)<O(n)<O(nlogn)<O(n2)<O(n3) <O(2n)<O(n!)<O(nn)

顺序存储结构封装需要三个属性:
——存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置
数据结构数据结构=数据+结构1、数据是信息的载体,能够被计算机识别、存储和加工处理,数据包括文字、表格、图像等。2、信息是数据的内涵,即数据所表达的意义3、数据项是具有独立意义的不可分割的最小标识单位(表格中的学号)。4、数据的基本单位是数据元素(有时称为结点、记录等)5、数据对象是具有相同类型的数据元素的集合(学生的信息类型相同),因为所有数据元素类型相同时处理起来加方便,所以在数据结构中除特别指定外数据通常都是数据对象 。6、数据结构是相互之间存在一种或多种特定关系的数据元素的集合。这些数据元素不是孤立存在的,而是有着某种关系,这种关系构成了某种结构。 1、算法和算法分析1、算法的特点: 有限性:一个算法必须总是(对任何合法的输入值)在执行有限步之后结束,且每一步都可在有限时间内完成。确定性:算法中每一条指令必须有确切的含义,不会产生二义性。可行性:算法中每一条运算都必须是基本的,就是说原则上都能精确地执行,甚至人们用笔和纸做有限次运算就能完成。输入性:一个算法有零个或多个输入。输出性:一个算法有一个或多个输出。 一、时间复杂度和空间复杂度下面给出分析一个算法时间复杂度大O阶的方法: 推导大O阶: 1.计算出此算法总共的操作执行次数T(n)。2.用常数1取代运行时间中的所有加法常数。3.在修改后的运行次数函数中,只保留最高阶项。4.如果最高阶项存在且不是1,则去除与这个项相乘的常数。得到的结果就是大O阶。 常用的时间复杂度耗费时间从小到大的顺序是:O(1) <O(logn)<O(n)<O(nlogn)<O(n2)<O(n3) <O(2n)<O(n!)<O(nn) void add(int n,a[N][N],b[N][N],int c[N][N]){ int i,j; for(i=0;i<n;i++) for(j=0;j<n;j++) { c[i][j]=0; for(k=0;k<n;k++) c[i][j]=c[i][j]+a[i][k]*b[k][j]; }} 解法1:从求算法中所有语句的频度来分析算法时间复杂度。
语句①的执行频度为n+1(注意i<n判断语句需执行n+1次)
语句②的执行频度为n(n+1)
语句③的执行频度为n2
语句④的执行频度为n2(n+1)
语句⑤的执行频度为n3
所以T(n)=2n3+3n2+2n+1=O(n3)解法2:从算法中基本运算的频度来分析算法时间复杂度。
基本运算是语句⑤
其频度为n3
所以T(n)=n3=O(n3) void func(int n){ int i=1,k=100; while(i<n) { k++; i+=2; }} 2、C语言中的自定义类型 C/C++语言中允许使用typedef关键字为一个数据类型指定一个别名,例如:typedef char ElemType;该语句将char类型与ElemType等同起来。这样做有两个好处:①方便程序调试,例如,将上述语句改为typedef int ElemType,则程序中所有ElemType都改为int类型了。(一改全改)②可以简化代码。 4、线性表顺序存储结构顺序存储结构封装需要三个属性:——存储空间的起始位置,数组data,它的存储位置就是线性表存储空间的存储位置——线性表的最大存储容量:数组的长度MaxSize。——线性表的当前长度:length。 地址计算方式第i个数据元素ai的存储位置可以由a1推算出:LOC(ai)=LOC(a1)+(i-1)*c元素a1a2…ai-1ai…an空闲空间下标01…i-2i-1…n-1 链式存储结构用一组随意的存储单元线性表的数据元素,这组存储单元可以存在内存中未被占用的任意位置,除了要存储数据元素的元素信息,还有存储它的后继元素的存储地址(指针)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

fairy_her

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值