大家好,我是小王
每次看见题目时,都会带有要求在O(n)的时间内这种,
目录
1、算法效率
算法是对特定问题求解步骤的一种描述,而算法效率分析则分为两种:第一种是时间效率,第二种是空间效率。而在现实中我们计算时间复杂度和空间复杂度时通常使用大O的渐进表示法。
大O符号(Big O notation),是用于描述渐进行为的符号
推导大O的方法
1、用常数1取代运行时间中所有的加法常数。
2、在修改后的运行次数中,只保留最高阶的项。
3、如果最高项存在并不是1,则去除与这个项目相乘的常数,得到的结果就是大O阶,
以下就是时间复杂度为O(n^3)
2、时间算法复杂度及有关例题
一般情况下,算法中基本操作重复执行次数是问题规模n的某个函数f(n),算法的时间量度记作
它表示随问题规模的增大,算法执行时间的增长率和f(n)的增长率相同,称做算法的渐进时间复杂度,简称时间复杂度
计算例题:
由上图我们可以看见他的准确时间复杂F(N)=N*N+3*N+0,随着N的增大,这个表达式中
N^2对结果的影响是最大的,
时间复杂度是一个估算,主要看表达式中对结果影响最大的一项,因此,上面的时间按复杂度为O(N^2).
当然,我们在做题目的时候可能会遇见两种未知数M、N,当出现这种情况是,如果M>>N,估算的时间复杂度就为O(M),反之则为O(N).如果值接近,则双方都有可能。也有可能全是常数项,那此时的估算的时间复杂度就为O(1)。
另外有些时间复杂度存在最好、平均和最坏的情况:
最坏情况:任意输入规模的最大运行次数(上界) 0( N )
平均情况:任意输入规模的期望运行次数 O( N /2)
O(1)
最好情况:任意输入规模的最小运行次数(下界)
例如:在一个长度为 N 数组中搜索一个数据× 当算法存在这三种情况的时候
最好情况:1次找到
最坏情况: N 次找到
平均情况: N /2次找到
在实际中一般情况关注的是算法的最坏运行情况 所以数组中搜索数据 复杂度为 O ( N )
3、空间复杂度及例题
空间复杂度就是对一个算法在运行过程中临时占用的储存空间大小的量度
注意:
空间复杂度与时间复杂度有相同点和不同点,相同点就是它们都使用大O渐进表示法,类似时间复杂度的方式,去计算变量个数,而不同点则是时间是累计的,空间是不累计的。
例题:
空间复杂度O(1)。
递归就是在调用时建立栈帧,返回时销毁栈帧。
不知道我讲的是否能帮助你,如果有错误的地方,期待您的指点。