马上加入IBC程序猿 各种源码随意下,各种教程随便看! 注册 每日签到 加入编程讨论群

C#教程 ASP.NET教程 C#视频教程程序源码享受不尽 C#技术求助 ASP.NET技术求助

【源码下载】 社群合作 申请版主 程序开发 【远程协助】 每天乐一乐 每日签到 【承接外包项目】 面试-葵花宝典下载

官方一群:

官方二群:

时间复杂度————被list.insert坑了

[复制链接]
查看2406 | 回复1 | 2019-10-17 09:44:11 | 显示全部楼层 |阅读模式

今天被一个很简朴的坑到了,还想了很长时间,insert 函数,真的知道它内部执行的操作吗?

开始实在是在看一本算法的书,书内里给了两段工作内容差不多的伪代码

第一段如下:

  1. data = []
  2. while 另有数据:
  3. x = 下一数据
  4. data .insert(0,x) # 把新数据加到表的最前面
复制代码

第二段如下:

  1. data = []
  2. while 另有数据:
  3. x = 下一数据
  4. data.insert(len(data),x) # 新数据加在末了
复制代码

 最开始感觉第二中代码中计算量不是应该比第一段多了一个计算长度的部分吗?应该是最二种时间花费更多,究竟上len(data)斲丧的时间或者说时间复杂度是一个常量级别的,几乎可以忽略

这个地方问题点不是在len(data)上,而是在insert 的执行上,insert 如果从使用上,作用上来思考,超等简朴,就是一个插入,但是这个方法中间的执行,却不是一个常量级的时间复杂度,

是一个线性关系,根据插入的位置和data的大小来确定,但是上面枚举的第一种代码,插入的位置刚好是头部,也就是最前面,简朴思考一下如果做一个插入操作,不消insert方法,自己写一个插入的方法,

就会是把从插入位置到末了一个元素全部向后挪动一位,这个时候时间可以看出来时间花费还是很大的,insert(0,x) 时间复杂度是O(n),而insert (-1,x)时间复杂度是O(l)

第二种代码时间复杂度计算是O(n),第一种代码时间复杂度计算是O(n^2),

总结一下,实在这个坑是因为忘记了insert操作实在也是一种遍历操作,需要花费的时间不是常量级,而是线性级







来源:https://www.cnblogs.com/higer666/p/11688865.html
C#论坛 www.ibcibc.com IBC编程社区
C#
C#论坛
IBC编程社区
*滑块验证:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则