时间复杂度————被list.insert坑了
今天被一个很简单的坑到了,还想了很长时间,insert 函数,真的知道它内部执行的操作吗?
开始其实是在看一本算法的书,书里面给了两段工作内容差不多的伪代码
第一段如下:
data = []
while 还有数据:
x = 下一数据
data .insert(0,x) # 把新数据加到表的最前面
第二段如下:
data = []
while 还有数据:
x = 下一数据
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操作其实也是一种遍历操作,需要花费的时间不是常量级,而是线性级
时间复杂度————被list.insert坑了的更多相关文章
- stl_list.h
stl_list.h // Filename: stl_list.h // Comment By: 凝霜 // E-mail: mdl2009@vip.qq.com // Blog: http://b ...
- 日常笔记6C++标准模板库(STL)用法介绍实例
一.vector常见用法详解 vector翻译为向量,但是这里翻译成变长数组的叫法更好理解. 如果typename是一个STL容器,定义的时候要记得在>>符号之间加上空格,因为在C++11 ...
- python面试的100题(8)
企业面试题 15.python新式类和经典类的区别? (在Python 2及以前的版本中,由任意内置类型派生出的类(只要一个内置类型位于类树的某个位置),都属于“新式类”,都会获得所有“新式类”的特性 ...
- python数据结构:数组和列表
线性结构有两种:数组和列表 array和list 其中list各项操作的时间复杂度如下 因为insert是在头部插入 所以列表所有元素后移,时间复杂度为O(n) remove移除列表中某个值的第一个匹 ...
- 省市区三级-sql脚本:
/*Navicat MySQL Data Transfer Source Server : moiraiSource Server Version : 50631Source Host : 192.1 ...
- VS Code编写Python3 insert 数据库插入无效也不报错的坑~.~
标题最近在开发中需要用到web端开发工具.需要用python工具.偶然发现微软的良心之作:Visual Studio Code,这个大小才几十兆的轻量级代码编辑器,功能却是重量级的,通过插件的方法,, ...
- FMDB存储模型对象(以二进制存储)用NSKeyedArchiver archivedDataWithRootObject序列号,NSKeyedUnarchiver unarchiveObjectWithData反序列化(重点坑是sql语句@"insert into t_newsWithChannel (nwesName,newsType) values (?,?)")一定要用占位符
交友:微信号 dwjluck2013 一.封装FMDB单例 (1)JLFMDBHelp.h文件 #import <Foundation/Foundation.h> #import < ...
- 踩坑事件:不能对基于文本的临时表使用sql insert语句
先来描述一下问题: 如果你是从基于文本的数据源来创建DataFrame的,当你将DataFrame注册为临时表后,如果对这个临时表进行insert into 操作,会抛出异常的. 问题答案参见:htt ...
- MySQL "replace into" 的坑以及insert相关操作
下面我们主要说一下在插入时候的几种情况: 1:insert ignore 2:replace into 3:ON DUPLICATE KEY UPDATE 关于insert ignore: 关于rep ...
随机推荐
- github初学者搭建自己的网站
如何利用github打造博客专属域名 感谢园友的无私共享-- http://www.cnblogs.com/xuehaoyue/p/6551217.html 选分支 建立好库,在设置 这里选择博客类型 ...
- 集成学习方法Boosting和Bagging
集成学习是通过构架并结合多个学习器来处理学习任务的一种思想, 目前主要分为两大类:Boosting和Bagging. 对于任意一种集成方法, 我们都希望学习出来的基分类器具有较高的准确性和多样性, 基 ...
- Spring错误
今天在学习spring的aop操作时碰到了一个问题: Caused by: org.springframework.aop.framework.AopConfigException: Cannot p ...
- ERROR IN RESOURCESTART
TOMCAT启动时出现这个问题,试遍了网上所有的方法就是不管用,卸载tomcat重新安装即可
- EasyUI总结(一)-- 入门
一.EasyUI下载 EasyUI官方下载地址:http://www.jeasyui.com/download/index.php,目前最新的版本是:jQuery EasyUI 1.4.1
- group by语法
group by 用法解析 group by语法可以根据给定数据列的每个成员对查询结果进行分组统计,最终得到一个分组汇总表. SELECT子句中的列名必须为分组列或列函数.列函数对于GROUP BY子 ...
- Redis在新项目中的使用场景
Redis在新项目中的使用场景 数据类型 使用场景 string 比如说,我想知道什么时候封锁一个Ip地址,Incrby命令(使用这个命令记录被访问的次数) Hash 存储用户的信息[id,name, ...
- SQLServer之MAX() 函数
MAX() 函数 MAX 函数返回一列中的最大值.NULL 值不包括在计算中. SQL MAX() 语法 SELECT MAX(column_name) FROM table_name 注释:MIN ...
- 当 K8s 集群达到万级规模,阿里巴巴如何解决系统各组件性能问题?
作者 | 阿里云容器平台高级技术专家 曾凡松(逐灵) 本文主要介绍阿里巴巴在大规模生产环境中落地 Kubernetes 的过程中,在集群规模上遇到的典型问题以及对应的解决方案,内容包含对 etcd.k ...
- 2019 DevOps 必备面试题——配置管理篇
原文地址:https://medium.com/edureka/devops-interview-questions-e91a4e6ecbf3 原文作者:Saurabh Kulshrestha 翻译君 ...