算法时间复杂度-BigO

BigO表示法

BigO表示法俗称大O表示法,描述了最坏情况下算法的速度有多快。

这个速度具体指的是运行时间的增速

写做:O(n),n表示的是操作次数的大小,对常数不敏感。

举个例子, 下图(第一种情况)线性查找如果想找到元素6, 我们需要按照顺序遍历每个元素,比较次数为6,所以其时间复杂度为O(n),也称线性时间。

(第二种情况)二分查找(Binary Search)如果想要找到元素6,我们在列表中间取一个元素与6比较,如果小于6,那么我们对右面剩余元素做同样的操作。其比较次数为3, 所以其时间复杂度为O(logn),为对数时间。
在这里插入图片描述

很明显从这个例子能了解到,对数时间比线性时间更快,效率更高,如果搜索的元素越多,后者更快。

而只知道算法需要多长时间是不够的,大O表示法主要描述了,算法有多快,也就是运行时间如何随着输入元素的数量增加而增加

小例子

再来思考一个问题, 如果在一个1024个电话数量的电话本里查找性张的姓氏,二分查找是一个好的选择,在最坏情况下相比于从头到尾的线性查找,二分查找只需要10次便可以找到我们要的姓氏。

思考一下,如果2048个电话数量呢?

时间复杂度的平均情况

虽然大O描述的是最坏情况下,算法的速度有多快,但是算法的平均运行时间也是很重要的。

回忆一下合并排序,最坏情况下其运行时间为O(nlogn)。
快速排序,最坏情况下运行时间为O(n^2),平均情况下为O(nlogn)。

但是快速排序相对于更快。

原因一:遇上平均情况比遇上最坏情况可能性更大。

原因二:大O表示法其实是O(c*n), 一般是不考虑常数的c的,因为常数的影响很小,但有时候常数的影响很大,例如合并排序和快速排序,后者的常数比前者小。

快速排序最坏情况
在这里插入图片描述

快速排序最佳情况平均情况
在这里插入图片描述

快速排序的最坏情况为每次选择第一个元素作为基准值,但如果每次随机选择一个元素作为基准值,其平均情况也就是最佳情况。也就是快速排序更快的原因。

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
渐近复杂度big-Θ)是一种用于描述算法运行时间或空间复杂度的记号。它表示算法在最坏情况下的上界和下界,即它给出了算法的上限和下限。 假设有一个函数 f(n),其中 n 是输入大小。如果存在两个正常数 c1 和 c2,以及一个正整数 n0,使得对于大于等于 n0 的所有 n,都有 c1*g(n) ≤ f(n) ≤ c2*g(n),其中 g(n) 是另一个函数。那么我们可以说 f(n) 的渐近复杂度为 Θ(g(n))。 简而言之,渐近复杂度描述了算法的运行时间或空间需求与输入大小的关系。渐近复杂度大致分为三种情况:最好情况、平均情况和最坏情况。最好情况表示在最理想的输入情况下算法的运行时间;平均情况表示在平均输入情况下算法的运行时间;最坏情况表示在最糟糕的输入情况下算法的运行时间。 常见的渐近复杂度包括: - 常数复杂度(O(1)):算法的运行时间不随输入大小而变化。 - 线性复杂度(O(n)):算法的运行时间与输入大小成线性关系。 - 对数复杂度(O(log n)):算法的运行时间与输入大小的对数关系。 - 线性对数复杂度(O(n log n)):算法的运行时间与输入大小的对数关系乘以线性因子。 - 平方复杂度(O(n^2)):算法的运行时间与输入大小的平方成正比。 - 指数复杂度(O(2^n)):算法的运行时间与输入大小的指数关系。 渐近复杂度分析可以帮助我们评估算法的效率和可行性,并选择适合问题规模的算法

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Not_Today.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值