时间复杂度 举例理解

在Redis中,我们常说在内存中的操作用的是hash表,时间复杂度是O(1),那么这个O(1)是怎么意思?

 

感性理解:

O(1) 就是无论算法中的变量怎么变化,算法所耗费的时间总是固定的。比如说hash表,查找元素。

O(n) 就是该算法所耗费的时间是随着变量正比相关的,当变量越大的时候,所耗费的时间就越大。比如说一层for循环。

O(n2) 就是该算法所耗费的时间是随着变量n2相关的,当变量越大的时候,所耗费的时间就越大。比如说两层for循环。

 

O(n)再举例:IO复用模型实现之一 Linux中的select。

它仅仅知道了,有I/O事件发生了,却并不知道是哪那几个流(可能有一个,多个,甚至全部),我们只能无差别轮询所有流,找出能读出数据,或者写入数据的流,对他们进行操作。所以select具有O(n)的无差别轮询复杂度,同时处理的流越多,无差别轮询时间就越长。

比如说,一位老师要检查全班所有学生的作业,当有学生写完之后,就通知老师作业写完了,但是没有告诉老师是谁写完了。老师只能到教室挨个学生问下,“是你写完作业了吗”....“是你写完作业了吗”....直到把全班的同学都问一遍才知道都有谁写完了。

这种方式的缺点显而易见,当随着学生的曾加的时候,老师的工作量也是呈线性增长。

所以,select算法的时间复杂度为O(n)

 

O(1) 再举例:IO复用模型实现之一 Linux中的epoll

epoll会把哪个流发生了怎样的I/O事件主动进行告知,这样后面的系统就不会再去轮询。

还是用上面老师检查学生作业的例子,当有学生写完作业之后,主动举手报告,老师就直接过来检查该学生的作业。

这种情况下,无论学生的数量增加多少,老师检查一位学生作业的时间仍然是不变的。

所以,epoll算法的时间复杂度为O(1)

 

参考文章:

时间复杂度:O(1)、O(n)、O(n²)、O(nlogn)等是什么意思,白话文解释专业术语

算法的时间与空间复杂度(一看就懂)

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值