常见的算法的时间复杂度

15fae6fa069d41e1bdff84986bde275f.jpg

 

### 线性搜索
想象一下,你在自家的厨房里,把所有的厨具都摊开放在桌面上,每件都带个标签。现在,你在找一个特别的小勺子。你一个接一个的看,直到发现那个标签是“小勺子”的那一件为止。这趟可能很耗时,尤其是你的厨具超多的话。线性搜索,就是这么个“一件一件慢慢来”的意思,时间复杂度是 **O(n)**,就代表了,随着厨具数量 **n** 的增加,你找到东西的时间也会相应地增加。

### 二分搜索
回到刚才找勺子的话题,这次你换了个聪明的策略。你直接猜疑第7件是不是勺子(假设这让你觉得最有可能),不是就猜中线附近另一件……如此这般,每次猜疑,你都把范围缩小一半。这种方法相比一件一件找会快很多,时间复杂度是 **O(log n)**,说明你要用的时间,跟厨具数量的对数差不多,就是说即使厨具超多,找到勺子也不会很慢。

### 冒泡排序
讲到了冒泡排序,你决定把厨具按高度从高到低排个序。你拿过最左的,和紧挨着的下一个比较,如果左边比右边高,你再互换他们的位置。你一遍又一遍地做这个事情,直到没有任何厨具比旁边高了。这样做虽然每次都认真比较,但是时间会随着厨具数量的增加而增加得飞快。排序后的结果——时间复杂度是 **O(n^2)**,所以,数量多的时候,要排整齐,等的时间真的好长。

### 快速排序
还是排厨具,你用了个叫做“快速排序”的绝妙招数。取了最左的一个厨具(假设它最好用)作为基准,比它小的都放一边,比它大的另一边,这样左半边都比它小,右半边都比它大。然后再分别对这两边做同样的事,不断的分区排序。这样子,你利用了这个厨具的“好用”,让排序过程快了很多。即使在最坏的情况下,这个排序的时间复杂度也不太差,平均下来是 **O(n log n)**,意味着随着厨具数量增多,排序时间缓慢增长。

### 哈希表操作
又回到了找勺子的话题。这次,你在勺子上挂了个标签叫"勺子1号",然后把它放在了贴着"1号"标签的抽屉里。下次你要找勺子,看一眼标签就知道去哪个抽屉了,所以几乎不需要花时间,就是那种 "嘀"一下就找到了的感觉。在哈希表中查找东西,平均情况下速度就是 **O(1)**,看起来几乎不受你藏了多少东西(即数据量)的影响。

这些算法的时间复杂度就像是告诉你在不同的情况下,找东西(或解决问题)需要的时间长短。尽可能选择时间复杂度小的算法,就好像是在精打细算下节省时间的技巧一样。

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值