Python常见操作的时间复杂度

news2025/8/7 7:54:01

Python常见操作的时间复杂度

本文整理了Python中常见数据结构操作的时间复杂度,旨在帮助大家了解Python操作的性能,协助运行更快的代码。

文章目录

    • 标注方法
    • List操作
    • Set操作
    • Deque操作

标注方法

程序时间复杂度一般用"大O表示法(Big-O notation)"来表示。假如有如下代码:

def list_check(to_check, the_list):
	for item in the_list:
		if to_check == item:
			return True
	return False

上面代码功能很简单,就是检查to_check是否在列表the_list中。我们称这个函数的时间复杂度为 O ( n ) O(n) O(n),其中 n n n 指列表the_list中的元素个数, O ( n ) O(n) O(n)的意思是算法所需时间的上限随列表中的元素个数线性增长。

在我们描述时间复杂度时,通常会涉及2个数量:

  • O ( n ) O(n) O(n) 中的 n n n 通常表示容器中元素个数
  • O ( k ) O(k) O(k) 中的 k k k 通常表示参数或传入容器中元素个数

常见复杂度表

Big-O复杂度解释
O ( 1 ) O(1) O(1)常量复杂度无论输入的大小,运行时间始终保持一个常数。
例如从哈希表中取值的时间复杂度就是 O ( 1 ) O(1) O(1)
O ( n ) O(n) O(n)线性复杂度运行时间随输入大小线性增长。
遍历列表就是一个时间复杂度为 O ( n ) O(n) O(n)的操作。
O ( n 2 ) O(n^{2}) O(n2)平方复杂度运行时间与输入大小呈平方关系。
比如冒泡排序、插入排序的时间复杂度为 O ( n 2 ) O(n^2) O(n2)
O ( 2 n ) O(2^{n}) O(2n)指数复杂度运行时间与输入大小呈指数关系。指数复杂度的算法性能非常低。
例如图论中的三色问题就是指数复杂度。
O ( log ⁡ n ) O(\log_{n}) O(logn)对数复杂度当输入呈指数增长是,运行时间按线性增长。
二分法查找就是典型的对数复杂度。

常见复杂度的图像展示

在这里插入图片描述

List操作

List是Python中使用最多的数据结构,熟悉List中各操作的时间复杂度对我们优化程序性能有很大帮助

操作时间复杂度(平均情况)
追加 append() O ( 1 ) O(1) O(1)
拷贝 copy() O ( n ) O(n) O(n)
删除元素 remove() O ( n ) O(n) O(n)
删除切片 del lst[2:4] O ( n ) O(n) O(n)
插入 insert() O ( n ) O(n) O(n)
获取元素 lst[0] O ( 1 ) O(1) O(1)
设置元素 lst[0] = 1 O ( 1 ) O(1) O(1)
迭代 O ( n ) O(n) O(n)
获取切片 lst[0:3] O ( k ) O(k) O(k)
设置切片 lst[0:3] = [4, 5] O ( n + k ) O(n+k) O(n+k)
扩展 extend() O ( k ) O(k) O(k)
排序 lst.sort() O ( n log ⁡ n ) O(n \log_n) O(nlogn)
获取长度 len() O ( 1 ) O(1) O(1)
in O ( n ) O(n) O(n)
min()``max() O ( n ) O(n) O(n)

Set操作

操作时间复杂度(平均情况)时间复杂度(最差情况)
in O ( 1 ) O(1) O(1)
差集 s-t O ( len ( s ) ) O(\text{len}(s)) O(len(s))
交集 s&t O ( min ( len ( s ) , len ( t ) ) ) O(\text{min}(\text{len}(s), \text{len}(t))) O(min(len(s),len(t))) O ( len ( s ) × len ( t ) ) O(\text{len}(s) \times \text{len}(t)) O(len(s)×len(t))
并集 s|t O ( len ( s ) + len ( t ) ) O(\text{len}(s) + \text{len}(t)) O(len(s)+len(t))
对称差集 s^t O ( len ( s ) ) O(\text{len}(s)) O(len(s)) O ( len ( s ) × len ( t ) ) O(\text{len}(s) \times \text{len}(t)) O(len(s)×len(t))
多重交集 s1&s2&s3&...&sn ( n − 1 ) ∗ O ( l ) (n-1) * O(l) (n1)O(l) 其中 l = max ( len ( s 1 ) , … , len ( s n ) ) l = \text{max}( \text{len}(s_1),\dots,\text{len}(s_n)) l=max(len(s1),,len(sn))
s.difference_update(t) O ( len ( t ) × len ( s ) ) O(\text{len}(t) \times \text{len}(s)) O(len(t)×len(s))
s.symetric_difference_update(t) O ( len ( t ) ) O(\text{len}(t)) O(len(t))

Deque操作

deque是python标准库提供的双向队列

操作时间复杂度(平均情况)
队尾追加 append() O ( 1 ) O(1) O(1)
队首追加 appendleft() O ( 1 ) O(1) O(1)
队尾扩展 extend() O ( k ) O(k) O(k)
队首扩展 extendleft() O ( k ) O(k) O(k)
队尾移除 pop() O ( 1 ) O(1) O(1)
队首移除 popleft() O ( 1 ) O(1) O(1)
拷贝 copy() O ( n ) O(n) O(n)
删除 remove() O ( n ) O(n) O(n)
轮转 rotate(k) O ( k ) O(k) O(k)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/15665.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows11系统WSL2安装ubuntu20.04桌面

文章目录1. MobaXterm安装2.WSL安装xfce desktop3. 连接桌面参考链接1. MobaXterm安装 这个比较简单,没介绍 2.WSL安装xfce desktop 安装命令 sudo apt-get install xfce4-terminal sudo apt-get install xfce4安装完之后需要稍微配置一下: export …

【并发编程六】c++进程通信——信号量(semaphore)

【并发编程六】c进程通信——信号量(semaphore)一、概述二、信号量三、原理四、过程1、进程A过程2、进程B过程五、demo1、进程A2、进程B六、输出七、windows api介绍1. 创建信号量 CreateSemaphore()2. 打开信号量 OpenSemaphore()3. 等待 WaitForSingle…

力扣LeatCode算法题第三题-无重复字符的最长子串

要求: 给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。 我一开始采用的第一种方法是使用hashmap去比对大小,在idea上可以跑通程序,但在leatcode的编译器中,无法通过字符串s"" 和s"…

苹果推送和开发证书更新

1.背景 推送证书(生产Apple Push Services和开发APNs Development iOS)的有效期都是一年,将要过期的时候,苹果官方会发邮件提醒。 2.csr和推送证书更新 打开mac电脑,找到启动台-->其他,打开钥匙串访问。…

uni-app入门:WXML数据绑定

1.简单数据绑定 2.组件属性数据绑定 3.运算绑定 3.1三元运算符 3.2算数运算 3.3字符串拼接运算 3.4逻辑判断运算 正文 WXML全称:wexin markup language,微信标签语言,可以理解为web中的html,…

JavaEE之HTTP协议 Ⅱ

文章目录一、认识请求"报头"(header)1.HOST2.Content-Length3.Content-Type4.User-Agent (简称 UA)5.Referer4.Cookie二、HTTP响应详解1. 认识"状态码"(status code)2. Content-Type3. 如何构造HTTP请求总结一、认识请求"报头"(header) 这里的键…

php资源列表|开发者应知晓

PHP PSR 代码标准 官网: https://www.php-fig.org原文: https://github.com/php-fig/fi...中文: https://psr.phphub.orgPHP资源列表PHP设计模式PHP知识技能树PHP资源站 PHP WeeklyCodeVisuallyPHP LeagueKnpLabs开发项目 FastAdmin - 基于 ThinkPHP5 + Bootstrap 的极速后台开…

ubuntu搭建Elasticsearch过程与问题

目录 一.下载Elasticsearh 二.解压 创建需要的文件目录 三.修改配置文件 四.遇到的问题 1.root账号启动问题 2.创建文件不授权切换到非root用户test的时候报错 3.启动最后还是报错 4.浏览器请求http://localhost:9200 报错:received plaintext http traffic…

【python】算法与数据结构作业记录分析

目录 算法与数据结构实验题 9.21 朋友圈 ★实验任务 ★数据输入 ★数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题 9.24 水杯 ★实验任务 ★数据输入 ★数据输出 输入示例 输出示例 代码实现 效果展示 算法与数据结构实验题 9.21 朋友圈 …

实验(四):LCD1602显示实验

一、实验目的与任务 实验目的: 1. 掌握LCD1602显示控制方法; 2. 掌握利用Proteus进行单片机控制系统的仿真及调试方法。 3. 掌握单片机开发板的使用。 任务: 1.根据要求编写程序,并写出原理性注释; 2. 将检查程序运行的…

Java入门项目——读书管理系统

Java简单实现读书管理系统一、前言二、思路及整体框架三、代码展示1.有关读书包(Book)2.有关用户包3.有关操作书的包一、前言 相信有很多小伙伴学习完了【JavaSE】基础语法,想知道自己到底学的怎么样,或则学完不知道这么把知识点…

JavaFX之Scene Builder的使用(开发一款GUI小工具原来这么简单)

文章目录一、前言二、JavaFX与Scene Builder下载三、Scene Builder的使用四、详细教学(示例)4.1 环境配置4.2 创建fxml文件以及Controller类文件4.3 自定义界面4.4 运行我们的程序五、拓展总结博主个人社区:开发与算法学习社区 博主个人主页&…

创建.gitignore文件并使用

创建 .gitignore文件 第一种方式 在项目根目录下直接创建一个文件,后缀改成 .gitignore 即可。 第二种方式 用git创建,到根目录下,执行 touch .gitignore,即可看见目录下已经出现了该忽略文件。 添加忽略规则 # 忽略所有以 …

httpOnly对于抵御Session劫持的个人小结

Ⅰ 什么是http only?起到什么防护作用? cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,主要防护的攻击手段:XSS不能通过document对象直接获取cookie Ⅱ 怎么绕过http only的防护(三种&#xff…

5、CSS——三种样式和样式优先级、CSS中颜色设置方式、标签选择器和基本选择器的优先级

目录 一、行内样式 二、内部样式 三、外部样式 1、创建外部样式步骤 2、引入外部样式的两种方式 2.1 第一种 2.2 第二种 3、style标签内的注释符号 四、样式优先级 五、CSS中颜色设置方式 1、使用颜色的英文单词 2、使用十六进制表示法 3、使用rgb()表示法…

Redis分区/分片详解

分区/分片详解 分区是分割数据到多个Redis实例的处理过程,因此每个实例只保存key的一个子集。 如果只使用一个redis实例时,其中保存了服务器中全部的缓存数据,这样会有很大风险,如果单台redis服务宕机了将会影响到整个服务。解决的…

easyExcel不同版本按照模板导出

Java解析、生成Excel比较有名的框架有Apache poi、jxl。但他们都存在一个严重的问题就是非常的耗内存,poi有一套SAX模式的API可以一定程度的解决一些内存溢出的问题,但POI还是有一些缺陷,比如07版Excel解压缩以及解压后存储都是在内存中完成的…

力扣(LeetCode)7. 整数反转(C++)

模拟 整数反转,需要一个中间变量 ansansans , 循环存入 xxx 的最低位 x%10x\%10x%10, 然后 xx/10x x/10xx/10 ,得到 xxx 新的最低位 。如果进入新的循环,ans10ans\times 10ans10 ,让上一次的 ansansans 十…

Makefile 基础(一) —— 自定义变量、预定义变量、自动变量

目录 一、自定义变量 1、定义变量 2、使用变量 3、修改变量的值 二、预定义变量 三、自动变量 一、自定义变量 1、定义变量 变量定义有两种方式,一种会在使用的时候递归展开,一种是直接赋值。两种定义方式如下: 递归展开&#xff1a…

Servlet的基本使用

目录 一、Servlet是什么 二、Servlet的基本使用 1、创建项目 2、引入依赖 3、创建目录 4、编写代码 5、打包程序 6、部署程序 7、验证程序 三、优化部署方式 1、安装Smart Tomcat 2、使用Smart Tomcat 四、使用Servlet时常见的错误 1、404 2、405 3、500 4、…